本帖最后由 spl928 于 2016-12-16 22:02 编辑
程序大概含义:AD芯片采集电压数据,然后送到串口调试助手上显示,用的STC12系列的单片机
波特率设置的是9600bps,程序没什么问题;
但是串口调试助手的接收区显示太快了,想用定时器0延时一下,
可是在定时的时候如果写成 if(count=72),则接收区显示的速度还是很快,基本上没什么变化。可我改成 if(count>=72)的时候,就可以了,显示的速度立马变慢了。
网上找了下,说是=太严格了,要改成>=,
哪位前辈能说下原因吗?
延时程序如下所示,别的没贴出来,但是不影响的:
//定时器中断程序
void Timer0_init()
{
TMOD=0x01; //定时器0,模式1,16位定时器
TR0=1;
TH0=(65535-50000)/256; //高8位,=60
TL0=(65536-50000)%256; //低8位
ET0=1; //使能定时器0中断
EA=1; //开总中断
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65535-50000)%256; //50000*(11.0592/12)ms定时,若晶振为12MHz,则为50ms
count++;
if(count>=72) //特别注意,此处若写成=时,收发速度还是非常快,why???
{
count=0;
ADFlag=1;
}
}
void main()
{
unsigned char str[3];
long AD_temp,kk;
Timer0_init();
uart_init();
while(1)
{
EA=0;
AD_temp=Read_PCF8591_ADC();
EA=1;
kk=AD_temp*5*100/256;
bai=kk/100+0x30;
shi=kk%100/10+0x30;
ge=kk%10+0x30;
str[0]=bai;
str[1]=shi;
str[2]=ge;
if(ADFlag)
{
ADFlag=0;
uart_printf(str);
uart_printf(" \r\n");
}
}
|