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
-
Nguyê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.
Comment
-
Code:#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
-
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
-
Nguyê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 Trình điều khiển bước rời rạcbởi mèomướpDạ nếu chú đã viết được chương trình cho vđk thì thêm 1 chương trình con chạy động cơ bước chỉ đơn giản là copy phát. Về phần cứng thì vài con cách ly quang, vài con mosfet thôi ạ. thực sự là dễ dàng như bài tập bình thường của sinh viên thôi ạ...
-
Channel: Máy công cụ
Hôm qua, 12:55 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi Minhdai95vâng mình cảm ơn mn đã góp ý
-
Channel: Điện tử công suất
Hôm qua, 11:30 -
-
bởi tom22Xin chào
Tôi có một dự án trong đó một động cơ bước tích hợp được điều khiển bởi một bộ vi điều khiển.
Nhưng tôi thực sự không thích trả tiền cho trình điều khiển bước, khi tôi có một bộ vi điều khiển có khả năng thực...-
Channel: Máy công cụ
Hôm qua, 10:54 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ chú chủ thớt có thời gian và đam mê thì cứ từ từ ngâm cứu đi ạ đừng nghe chú Chú bq... dọa mà sợ ạ. Cái nguồn nhìn cũng lởm có khi hông bằng cái máy hàn tàu của chị hàng xóm hôm nọ tháo ra sửa với chú thợ thông ống nước suốt đêm mới xong. Chú ý an toàn xíu là được ạ...
-
Channel: Điện tử công suất
05-01-2025, 15:40 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi bqvietBộ nguồn xung ở tầm công suất 2700W này, gần 3 ký, không bao giờ đơn giản để mà sửa ngay cả đối với người có kinh nghiệm chứ đừng nói người không chuyên. Đám linh kiện công suất không tự nhiên cháy mà phải xuất phát từ nguyên nhân...
-
Channel: Điện tử công suất
04-01-2025, 22:09 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ chú kiểm tra đi ốt đầu vào, ra nữa ạ. Về phần kiểm tra dao động chú hỏi chị google ấy ạ, có nhìu cô chú đã hướng dẫn rồi ạ...
-
Channel: Điện tử công suất
04-01-2025, 16:53 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi Minhdai95mình đã kiểm tra phần công suất thấy hỏng cả 4 con IGBT mà mình muốn kiểm tra phần dao động và hồi tiếp khi chưa cấp điện cho mạch thì có cách nào không b, mình không phải dân trong nghề lên chưa có kinh nghiệm sửa. Cảm ơn b
-
Channel: Điện tử công suất
04-01-2025, 14:27 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ chú nhắm phần công suất dễ kiểm tra và hay hư hỏng nhất trước ạ. Rồi đến phần dao động nguồn, hồi tiếp...
-
Channel: Điện tử công suất
04-01-2025, 11:42 -
-
bởi Minhdai95mọi người đã ai sửa bộ nguồn này chưa ạ, cho e xin ít kinh nghiệm để sửa bộ nguồn. Em cảm ơn...
-
Channel: Điện tử công suất
04-01-2025, 11:22 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi nhathung1101
-
Channel: Điện tử dành cho người mới bắt đầu
31-12-2024, 17:39 -
Comment