bác nào sửa hộ em cái code mạch điều khiển động cơ.Em chuyển sang file hex toàn báo lỗi
Code:
#include<regx52.h> #include<stdio.h> #include<LCD.h> //Khai báo thu vien LCD sbit PWM = P3^7; sbit chieu = P3^6; sbit E = P3^5; sbit ledon = P3^1; sbit ledoff = P3^0; sbit ledthuan = P3^2; sbit lednghich = P3^4; #define phim_on P1_0 #define phim_off P1_1 #define phim_tang P1_2 #define phim_giam P1_3 #define phim_thuan P1_4 #define phim_nghich P1_5 unsigned int dem,t=0,t1=0,u,dem1=0,tocdo=0,tg=0; void ngat() interrupt 2 //Hàm ngắt ngoài để đếm số xung { dem1++; //Khi có 1 sườn sung tác động vào chân INT1 thì biến tăng lên 1 đơn vị } void timer0() interrupt 1 { TR0=0; //Dừng timer 0 TH0=-1000/256; //Khoi tao cho bo dem timer 1voi he so chia là 2000 TL0=-1000%256; t++; if(t==500) { t=0; t1=dem1; dem1=0; } TR0=1; //Chạy timer 0 } //PWM------------------------------------------ void timer2(void) interrupt 5{ //Ngắt timer 2 TR2=0; TF2=0; // Dừng chạy timer 2 dem++; //Tăng biến đếm if(dem > 10) dem = 0; if(dem<tocdo) PWM = 1; //Tạo xung PWM else PWM = 0; TR2 = 1; } void dieu_khien() //Hàm điều khiển động cơ { if (phim_on==0) { while(phim_on==0); //Khi nhấn vào phím on ledon=0; //Led báo động cơ hoạt động sáng lên ledoff=1; //Led báo động cơ ngừng hoạt động tắt tocdo=5; //Khởi động động cơ với tốc độ chạy 50% E=1; //Cho phép động cơ hoạt động chieu=0; //Chiều động cơ là chiều thuận } if (phim_tang==0) { while (phim_tang==0); //Nhấn vào phím tăng E=1; if(tg<10) { tg++; //Tăng tốc } if (chieu==0)tocdo=tg; if (chieu==1)tocdo=10-tg; } if (phim_giam==0) { while(phim_giam==0); //Nhấn vào phím giảm E=1; if(tg>1) { tg--; //Giảm tốc } if (chieu==0)tocdo=10-tg; if (chieu==1)tocdo=tg; } if (phim_off==0) { while(phim_off==0); //Nhấn vào phím tắt E=0; //Động cơ ngừng hoạt động ledoff=0; ledon=1; } if (phim_thuan==0) { while(phim_thuan==0); //Nhấn vào phím thuận chieu=0; E=1; tocdo=5; ledthuan=0; lednghich=1; } if(phim_nghich==0) //Nhấn vào phím nghịch { while (phim_nghich==0); chieu=1; //Đổi chiều động cơ E=1; tocdo=5; ledthuan=1; lednghich=0; } } void main() { khoi_tao(); //Gọi hàm khởi tạo LCD TMOD=0xd1; //Timer 0 chế độ 1, timer 2 chế độ 1 IE=0xFF; IP=0x04; TR1=1;TR0=1; IT1=1;TF0=1; T2CON=0x04; //Khởi tạo Timer 2 RCAP2H=0xFF; //Khởi tạo giá trị cho timer 2 RCAP2L=0x9C; PWM=0; EA=1; TR2=1; //Chạy timer 2 E=0; //Động cơ ngừng hoạt động ghi_lenh1(0x01); //Xóa màn hình ghi_lenh1(0x80); //Về đầu dòng thứ nhất ghi_chuoi1("MOIBANDKDONGCO"); while(1) { dieu_khien(); //Gọi hàm điều khiển động cơ u=t1*60/32; //Chia lấy tốc độ động cơ ghi_lenh(0xc0); //Về đầu dòng thứ 2 sprintf(&mang[0],"TocdoDC=%4d V/P",u);//Ghi tốc độ động cơ lên dòng thứ 2 ghi_chuoi(&mang[0]); //Gọi hàm ghi chuỗi u=0; //Xóa tốc độ } }
Comment