本帖最后由 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");
- }
- }
|