C hay asm cũng được a à.miễn sao chương trinh chạy được.đó là mấy chương trình e lấy trên mạng thôi,e không hiểu nên nhờ mấy a giúp.e cảm ơn hồi đáp của mấy a
Viet Code giup em voi
Collapse
X
-
Anh kiểm tra giúp em nốt luôn đi a,a viết em không biết sai ở đâuNguyên văn bởi youaremylife Xem bài viếttóm lại là viết bằng asm hay c
chương trình gửi lên chỉ mang tính tham khảo, chỉ thể hiện lại nôi dung đã nói trước đó, muốn build được thì phải sửa lại thêm.
. a giúp e với
Comment
-
nếu bạn muốn tốc độ nó tăng giảm được thì để cái dòng #define usestepCode:#include <REGX51.H> #include <stdio.h> #define usestep #define BUTTON_PORT P2 #define MASK_BUTTON 0x07 #define BUTTON_STOP P2_0 #define BUTTON_FAST P2_1 #define BUTTON_LOW P2_2 #define PERIOD 100 #define DUTY_MIN 20 //percent of duty #define DUTY_MAX (PERIOD) #ifdef usestep #define DUTY_STEP 10 #endif #define PWM_PIN P2_7 #define disable_interrupt() ET0 = 0 #define reenable_interrupt() ET0 = 1 #define Timer_Setup() EA =0; TMOD = 0x02; TH0 = 0x9B; TL0 = 0x9B; TR0 = 0 ; ET0 = 0; EA = 1 #define Set_duty(t) PWM.duty = t unsigned char setduty; static data struct { unsigned char count; unsigned char duty; unsigned char period; }PWM; static data union { struct { unsigned char phase:1; unsigned char run:1; unsigned char error:1; unsigned char update:1; unsigned char Lowlimit:1; unsigned char Highlimit:1; unsigned char db:1; unsigned char RSTimer:1; }bits; unsigned char _byte; }status; // biến lưu trạng thái làm việc static data union { struct { unsigned char stop:1; unsigned char fast:1; unsigned char low:1; unsigned char unused:5; }bits; unsigned char _byte; }button; // biến lưu trạng thái nút nhấn // PRIVATE PROTOTYPE void Init_System(void); unsigned char check_button(void); void delay_Ms(unsigned int tdelay); void timer_interrupt_handle(void) interrupt 1 { if(status.bits.run) { if(PWM.count <= PWM.duty) PWM_PIN = 1; else if(PWM.count <=PWM.period) PWM_PIN= 0; else status.bits.RSTimer = 1; if(status.bits.RSTimer) { PWM.count = 0; status.bits.RSTimer = 0; } else PWM.count += 10; }else PWM_PIN = 0; TF0 = 0; // xoa co ngat } void main() { Init_System(); while(1) { do button._byte = check_button(); // kiem tra trang thai phim nhan while(!button._byte); // cho den khi co nut nhan if(button.bits.stop) // neu nut stop duoc nhan { disable_interrupt(); // khong cho timer hoat dong TR0 = 0; //dung timer TF0 = 0; //xoa co ngat PWM_PIN = 0; // dung dong co status.bits.error = 0; // xoa co loi status.bits.run = 0; // dong co da dung } else // nút stop không được nhấn { if((button.bits.fast)&&(button.bits.low)) // neu cả hai nút nhấn cùng được bấm xem như lỗi và bỏ qua { status.bits.error = 1; // DO SOME THING } else { if(button.bits.fast) // neu nut nhanh duoc nhan { #ifdef usestep if(!status.bits.Highlimit) { setduty = PWM.duty; setduty += DUTY_STEP; if(setduty >= DUTY_MAX) { setduty = DUTY_MAX; status.bits.Highlimit = 1; } } else if(setduty < DUTY_MAX) status.bits.Highlimit = 0; #else setduty = (unsigned char)DUTY_MAX; #endif Set_duty(setduty); // tinh nduty } if(button.bits.low) // neu nut nhanh duoc nhan { #ifdef usestep if(!status.bits.Lowlimit) { setduty = PWM.duty; if(setduty > DUTY_STEP) setduty -= DUTY_STEP; else setduty = DUTY_MIN; if(setduty <= DUTY_MIN) { setduty = DUTY_MIN; status.bits.Lowlimit = 1; } } else if(setduty > DUTY_MIN) status.bits.Lowlimit = 0; #else setduty = (unsigned char)DUTY_MIN; #endif Set_duty(setduty); // tinh nduty } if(!status.bits.run)// neu dong co dang dung thi cho phep chay lai { status.bits.run = 1; reenable_interrupt(); // cho phép timer hoạt động trở lại TR0 = 1; } } } } } unsigned char check_button(void) { unsigned char old_status,new_status; old_status = (~BUTTON_PORT)&MASK_BUTTON; //&MASK_BUTTON if(old_status) // kha nang co nut nhan { delay_Ms(1000); // chong nhieu new_status = (~BUTTON_PORT)&MASK_BUTTON; //&MASK_BUTTON while((BUTTON_PORT&MASK_BUTTON) != MASK_BUTTON); return old_status&new_status; // nếu trạng thái truoc va sau tuong ung cac nut la nhu nhau thi co nghia la nut do duoc nhan } return 0; // khong co nut nao duoc nhan } void delay_Ms(unsigned int tdelay) { // TO DO while(tdelay--); } // khoi tao void Init_System(void) { status._byte = 0; button._byte = 0; setduty = (unsigned char)DUTY_MIN; PWM.period = (unsigned char)PERIOD; Set_duty(setduty); P2 = 0xFF; PWM_PIN = 0; Timer_Setup(); }
không thì //#define usestep dòng đó chuơng trình sẽ chạy ở hai cấp tốc độ DUTY_MAX với DUTY_MIN mấy cái thiết lập bạn tự điền lấy
Comment
-
cai này mình làm rồi, nhưng viêt asembly!^^Nguyên văn bởi zangseik Xem bài viếtDùng 3 phím bấm,với phím bấm 1 tốc đô motor nhanh,pb2 toc do vua,pb3 dung.
[ATTACH=CONFIG]56097[/ATTACH]
em xin cam on nhieu,
ductuandtvt@gmail.com
cần thì mail cho mình :dinhnambkhn@gmail.com|
Comment
-
A gửi giúp e,e cảm ơnNguyên văn bởi dinhnam123 Xem bài viếtcai này mình làm rồi, nhưng viêt asembly!^^
cần thì mail cho mình :dinhnambkhn@gmail.com
Comment
Bài viết mới nhất
Collapse
-
bởi mèomướp1. Tìm hiểu đc thì càng tốt, bận thì thôi. Ko cần quá quan trọng
2. Số tự động cho đơn giản, kiểu như đi xe ga ấy ạ
3. Học lý thuyết tử tế ok
4.ok
5.có. đủ số km, tgian cầm lái là đc
6.đi ăn tập thể,...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 16:34 -
-
Trả lời cho Tìm bạn thân quen cũ.bởi lvhnE nhớ bác Vivanpham làm bên điện tử y sinh, có lần đó cái sơ đồ máy chụp x quang sao có mấy con thryristor làm gì mà ko ai trả lới đúng cả
...
-
Channel: Tâm tình dân kỹ thuật
07-08-2026, 09:17 -
-
Trả lời cho Amply bị rò DC 22 voltbởi lvhnBác kiểm tra lại đường mạch, mối hàn xem có bị hở hoặc dẫn không tốt không?
Thay cầu diode lớn hơn càng tốt không vấn đề gì cả....-
Channel: Điện thanh
07-08-2026, 09:12 -
-
bởi LantheChào bạn.
Trục đầu ra của hộp số hành tinh xoắn ốc được kết nối với mặt bích của khách hàng thông qua một trục răng trong. Sau chưa đầy sáu tháng hoạt động, nó phát ra tiếng kêu lách cách và độ rơ lớn đáng báo động.
Việc...-
Channel: Thiết bị điện tử cá nhân
06-08-2026, 13:05 -
-
bởi ittcChào các anh em nhé, mình dự định sắp tới sẽ đi học lái xe Ôtô, thi lấy bằng lái. Cụ thể mình sẽ học và thi lấy giấy phép lái xe hạng B. Thật sự mình là người chưa có kiến thức hiểu biết gì về Ôtô cả ? tất nhiên mình sẽ phải...-
Channel: Tâm tình dân kỹ thuật
-
-
Trả lời cho Amply bị rò DC 22 voltbởi trung30000Theo sự hướng dẫn của bác, sau khi em kiểm tra tầng Vi sai sử dụng cặp c1815, tiếp đến là 1 con a1013, và cặp thúc sử dụng mje304g và mje305g, em đã tiến hành thay cặp Vi sai c1815 sau đó mở máy lên đo ngõ công suất DC 0,2V hai giây sau máy đo...-
Channel: Điện thanh
05-08-2026, 20:09 -

Comment