定时器0在模式1时(16位定时器)的疑问

[复制链接]
1028|2
 楼主| spl928 发表于 2016-12-16 21:58 | 显示全部楼层 |阅读模式
本帖最后由 spl928 于 2016-12-16 22:02 编辑

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



autooy 发表于 2016-12-16 22:58 | 显示全部楼层
if(count=72)
你本意应该要写成:   if(cunt == 72)
一个是赋值,一个是比较!完全不同的表达式!
从理论上讲,==72也是没有问题的,严格来说>=肯定更好!
sunlin0316 发表于 2016-12-17 18:51 | 显示全部楼层
你的 T0设置吧TR0开启的过早,还没有对TH0赋值,就启动了,你把TR0开启放到初始化最后。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

44

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部