mình đang làm bài tập về đo tốc độ động cơ dc.mô phỏng bằng protues.động cơ có gắn encoder.lập trình trên Keil C.làm hoài sao nó ko chạy.mình có kèm theo code và mạch nguyên lí.mong các a e giúp đỡ với.xem nó sai chổ nào vậy.thanks!!!!!!!!!!!!!!!!
mạch nguyên lý
do toc do dongco.rar
/////////////////////////////////////////////////////////////////////////
/* khai bao thu vien*/
#include <reg52.h>
#include <stdio.h>
#include <math.h>
//////////////////////////////////////////////////////////////////////////
/* khai bao cac bien*/
unsigned char donvi,chuc,tram,nghin;
unsigned char n,f;
unsigned char M[10]={0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
unsigned char dem;
unsigned char i,j;
///////////////////////////////////////////////////////////////////////////
/*ham delay tao khoang thoi gian tre de quet led*/
void delay (unsigned long int t)
{
unsigned long int j;
for(j=1;j<=t;++j);
}
////////////////////////////////////////////////////////////////////////////
/* ham hien thi gia tri toc do dong co*/
void ht_tocdo_dc()
{
P2=M[nghin];
P0=~0x01;
delay(10);
P0=~0;
P2=0xFF;
P2=M[tram];
P0=~0x02;
delay(10);
P0=~0;
P2=0xFF;
P2=M[chuc];
P0=~0x04;
delay(10);
P0=~0;
P2=0xFF;
P2=M[donvi];
P0=~0x08;
delay(10);
P0=~0;
P2=0xFF;
}
////////////////////////////////////////////////////////////////////////////////
/* chuong trinh chinh*/
void main()
{
TMOD=0x25;//timer 0 lam bo dem,che do 1 dem xung o chan T0; Timer 1
//lam bo dinh thoi mode 2
IE=0x88;//cho phep ngat va ngat tu timer 1
IP=0x08;//uu tien ngat timer 1
TH1=TL1=-100;//nap gia tri dau cho timer 1
TH0=TL0=0;//xoa timer 1
dem=0;
f=0;
while(1)
{
TR0=TR1=1;
while(dem<1000);//cho het khoang thoi gian 0.1 giay
n=TH0*256+TL0;//doi gia tri dem duoc thanh so thap phan
f=n*10;//don vi Hz.nhan 10 vi dem trong 0.1s
nghin=f/1000;
tram= (f%1000)/100;
chuc= ((f%1000)%100)/10;
donvi= ((f%1000)%100)%10;
ht_tocdo_dc();
}
}
void ngatt1 (void) interrupt 3
{
dem++;
TF1=0;//xoa co ngat de timer 0 tiep tuc dem
TR1=1;
}
/* khai bao thu vien*/
#include <reg52.h>
#include <stdio.h>
#include <math.h>
//////////////////////////////////////////////////////////////////////////
/* khai bao cac bien*/
unsigned char donvi,chuc,tram,nghin;
unsigned char n,f;
unsigned char M[10]={0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
unsigned char dem;
unsigned char i,j;
///////////////////////////////////////////////////////////////////////////
/*ham delay tao khoang thoi gian tre de quet led*/
void delay (unsigned long int t)
{
unsigned long int j;
for(j=1;j<=t;++j);
}
////////////////////////////////////////////////////////////////////////////
/* ham hien thi gia tri toc do dong co*/
void ht_tocdo_dc()
{
P2=M[nghin];
P0=~0x01;
delay(10);
P0=~0;
P2=0xFF;
P2=M[tram];
P0=~0x02;
delay(10);
P0=~0;
P2=0xFF;
P2=M[chuc];
P0=~0x04;
delay(10);
P0=~0;
P2=0xFF;
P2=M[donvi];
P0=~0x08;
delay(10);
P0=~0;
P2=0xFF;
}
////////////////////////////////////////////////////////////////////////////////
/* chuong trinh chinh*/
void main()
{
TMOD=0x25;//timer 0 lam bo dem,che do 1 dem xung o chan T0; Timer 1
//lam bo dinh thoi mode 2
IE=0x88;//cho phep ngat va ngat tu timer 1
IP=0x08;//uu tien ngat timer 1
TH1=TL1=-100;//nap gia tri dau cho timer 1
TH0=TL0=0;//xoa timer 1
dem=0;
f=0;
while(1)
{
TR0=TR1=1;
while(dem<1000);//cho het khoang thoi gian 0.1 giay
n=TH0*256+TL0;//doi gia tri dem duoc thanh so thap phan
f=n*10;//don vi Hz.nhan 10 vi dem trong 0.1s
nghin=f/1000;
tram= (f%1000)/100;
chuc= ((f%1000)%100)/10;
donvi= ((f%1000)%100)%10;
ht_tocdo_dc();
}
}
void ngatt1 (void) interrupt 3
{
dem++;
TF1=0;//xoa co ngat de timer 0 tiep tuc dem
TR1=1;
}
do toc do dongco.rar
Comment