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
Thông báo
Collapse
No announcement yet.
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
-
Trả lời cho Công thức tính định luật kirchhoffbởi nguyendinhvanCông thức này chắc là để áp dụng cho UAV để bắn máy bay F15....
-
Channel: Hỗ trợ học tập
Hôm qua, 21:17 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92GIỚI THIỆU CA KHÚC VỀ CHA MẸ:
Nặng Nghĩa Mẹ Cha
Sáng tác: Hoàng Đình Thường
Giọng hát: AI
Công cha cao tựa như Thái Sơn
Nghĩa mẹ sâu nước biếc xanh trong
Mong con khôn lớn đời hạnh phúc
Mẹ cha...-
Channel: Tâm tình dân kỹ thuật
12-05-2026, 16:22 -
-
bởi afrendlyCảm ơn bạn. Mình hỏi để thợ có thể tham khảo thôi chứ không đủ kiển thức để sửa, mà cũng không có đồ nghề, mua đồ nghề quá tiền máy. Gọi nhiều lần mà thợ hẹn mãi chưa có tới ấy bạn. Mình muốn sửa được chứ bỏ thì uống, nhưng sợ là được mỗi người thợ mà lại không sửa nổi....
-
Channel: Điện tử gia dụng
11-05-2026, 00:34 -
-
bởi mèomướpDạ nó bị tắc ẩm hoặc rò thiếu gas hoặc lốc yếu hoặc van tiết lưu có vấn đề hoặc tất cả những nguyên nhân trên ạ. Chú ko chuyên về mảng này thì bán đi, giành thời gian trồng rau sạch đem ra chợ bán lấy tiền mua tủ mới ạ. Còn...
-
Channel: Điện tử gia dụng
10-05-2026, 17:01 -
-
bởi afrendlyXin chào mọi người. Mình lại có vấn đề về đồ điện cần nhờ mọi người hỗ trợ giúp. Mình có tủ lạnh Sharp dùng cũng lâu rồi. Trước có bị kém lạnh, không đông đá thì có thợ họ mang về, sục đường ga gì đó hết 900k và đã dùng...
-
Channel: Điện tử gia dụng
10-05-2026, 16:53 -
-
bởi dinhthuong92Đấy, cái tôi thắc mắc là chỗ màu hồng ấy bạn, để áp vào cao chứ không bị sụt gần bằng áp pin thì rất cần cuộc cảm để làm điều đó. Tuy nhiên, trong công thức bác thớt dẫn không thấy mặt L, và một vài mạch MPPT tôi đã kiểm...
-
Channel: Nguồn!
09-05-2026, 10:01 -
-
bởi mèomướpDạ mạch sạc là 1 cục nguồn, nó sẽ điều chỉnh công suất đầu ra để có tổng trở bằng nội trở của pin ạ. Và cái cách nó chỉnh công suất đầu ra sẽ là dạng buck, boot. Đều cần đến cuộn cảm ạ. Tất nhiên chú thích thì có thể dùng dạng tuyến tính transistor để bù trừ nhưng mà nó đốt năng lượng vô ích ạ...
-
Channel: Nguồn!
08-05-2026, 16:26 -
-
bởi dinhthuong92Tng trở R của tải (gồm pin và mạch sạc) trong công thức đó rõ ràng khống có L xuất hiện. Nếu tính các dây dẫn thì rất nhỏ, bỏ qua. Vì nội trở pin là rất nhỏ, có thể nói luôn lớn hơn nội trở solar, nên mạch MPPT sẽ hầu như luôn tính...
-
Channel: Nguồn!
08-05-2026, 11:00 -
-
bởi dinhthuong92Chào bác. Đã là công thức phải tổng quát chứ, nó phải thể hiện cả quá trình, rối thì quá độ hay xác lập tính sau vì tùy điều kiện. Cũng như công thức tính diện tích chả hạn, phải là tích phân....
-
Channel: Nguồn!
08-05-2026, 10:49 -

Comment