求助一个关于51单片机的C语言程序
求助一个程序程序要求是,一个用AT89x51单片机控制利用霍尔传感器测电机转速,然后将数据发送给
数码管。大体程序已经完成,但是,一直用KEIL调试不成,烧到单片机里无法操作。可能其中有些许错误,希望有这方面的大神对小弟小小的指导一下。
#include"at89x51.h"
#define uint unsigned int
#define uchar unsigned char
uchar code duanma[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管
uchar code zifu[9]={"zhuansu= "}; //转速字符空格
uchar code enter[] = {"/n"}; //换行字符
uint fan100;//转速值
uchar fan[3];//存转速的百十个位
uint count;
uint T0count;//进入T0的中断次数
void delay_ms(uint z)
{
uint x,y; //延时程序
for(x=z;x>0;x--)
for(y=240;y>0;y--);
}
void init_es (void)//初始化串口
{
SCON=0x40; //方式1
TH1 = 0xfd; //晶振11.059 波特率9600
TL1 = 0xfd;
TMOD= 0X20;
TR1 =1;
}
void init_T0(void) //初始化定时器
{
TMOD = 0x21;
TH0 = 0X3c;
TL0 = 0Xb0;
}
void display_LED(void) //数码管动态显示
{
P0=0x01;
P1=duanma[fan[0]];
delay_ms(100);
P0= 0x20;
P1=duanma[fan[1]];
delay_ms(100);
P0=0x40;
P1=duanma[fan[2]];
delay_ms(100);
}
void sent_es(void) //串口发送函数
{
uchar ii;
for(ii=0;ii<9;ii++)
{ SBUF =zifu[ii];
while(RI==0);
RI=0;
}
for(ii=0;ii<3;ii++) //再发送百位
{ SBUF =fan[ii]+0x30;
while(RI==0);
RI=0;
} //等待发送完毕
for(ii=0;ii<2;ii++) //再发送十位
{ SBUF =fan[ii]+0x30;
while(RI==0);
RI=0;
} //等待发送完毕
for(ii=0;ii<1;ii++) //再发送个位
{ SBUF =fan[ii]+0x30;
while(RI==0);
RI=0;
} //等待发送完毕
for(ii=0;ii<2;ii++) //发送换行
{ SBUF =enter[ii];
while(RI==0);
RI=0;
} //等待发送完毕
}
/* 主函数*/
void main()
{ count =0; //初始化
init_es ();
init_T0();
T0count=0;
IP= 2 ; //INT0的优先级最低
IE = 0X83; //开中断
IT0=1;
while(1)
{ display_LED(); // 无限循坏数码管 等待中断发生
}
}
/*串口*/
void int0interrupt(void) interrupt 0
{
count++;
}
void T0interrupt(void) interrupt 1
{
TH0 = 0x3c ;
TL0 = 0xb0 ;
T0count++;
if(T0count>20 )
{ T0count=0;
fan100=count;
count=0;
fan[0] = fan100/100;
fan[1] = (fan100%100)/10;
fan[2] = fan100%10;
sent_es();
}
}