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