我用串口中断发送数据,开始
单片机发送正常,也能接受!当我再次将程序烧录到单片机就发现单片机不能正常工作了!我的单片机晶振是11.0592M的。波特率9600!单片机工作不正常的表现为:单片机运行熟读变得相当相当慢,比以前慢了许多!不知道是怎么回事,还请各位高手帮帮忙,看看我的程序哪里出了问题!在此谢过了!
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code ptrData[] ={0x7e,0x04,0xa1,0x00,0x00,0x7e}; //命令
sbit djz = P2^4; //电机正转
uint txbuffer[]; //串口发送缓存区
uint bufferhead,bufferCt; //发送状态标志
void init()
{
TMOD = 0x21; //定时器1工作方式2,定时器0工作方式1(用于延迟)
SCON = 0x50;
TH1 = 0xfd; //串口9600波特率初值
TL1 = 0xfd;
TR1=1;
EA =1;
ES =1;
bufferhead=bufferCt=0;
}
void delay(uint i)
{
uchar j;
while(i--)
{
for(j=0;j<115;j++) //1ms基准延时程序
{ ; }
}
}
void uart_senddata(uchar j)
{
uint i;
for(i=0;i<6;i++)
{
if(i!=4)
{
txbuffer[bufferCt]=ptrData[i];//循环添加待发送数据
bufferCt++;
}
if(i==4)
{
txbuffer[i]=j;
bufferCt++;
}
}
ti=1; //命令数据存缓存期完毕后,立刻触发串口发送中断
}
void main()
{
init();
delay(200);
uart_senddata(4);
delay(100);
while(1)
{
djz=0;
delay(500);
djz=1;
delay(500);
}
}
void uart_int(void) interrupt 4
{
if(TI) //等待中断触发
{
TI=0;
if(bufferCt)
{
SBUF=txbuffer[bufferhead++];
bufferCt--;
if(bufferCt==0)
{
bufferhead = 0; //当发送数据个数大于16时,bufferhead清零
}
}
}
}
单片机变慢有可能是程序运行的时候不断进入中断,中断函数不断打断主函数的运行,因此看上去好像单片机速度变慢了。
一周热门 更多>