标题: 多次使用单片机定时器程序,帮我看看有没有问题 [打印本页]

作者: 51mcu学习    时间: 2021-3-6 14:28
标题: 多次使用单片机定时器程序,帮我看看有没有问题
单位电脑无法上网,只能手机拍照发帖。工程师们帮我看看练习程序,能不能用T0定时10秒 15秒

IMG_20210306_142301_edit_1431476013640948.jpg (563.76 KB, 下载次数: 147)

IMG_20210306_142301_edit_1431476013640948.jpg

IMG_20210306_142010.jpg (628.18 KB, 下载次数: 127)

IMG_20210306_142010.jpg

IMG_20210306_141806.jpg (1.23 MB, 下载次数: 131)

IMG_20210306_141806.jpg

IMG_20210306_141509.jpg (1.52 MB, 下载次数: 109)

IMG_20210306_141509.jpg

IMG_20210306_141500.jpg (1.51 MB, 下载次数: 111)

IMG_20210306_141500.jpg

作者: xianfajushi    时间: 2021-3-6 17:22
数值计算不用怀疑,仿真时间非实际时间,不过仿真时间可以通过监视变量波形测得准确时间。
作者: wulin    时间: 2021-3-6 17:43
一个定时器可以输出N个定时时间,方法有多种。举个比较简单的示例:取所有定时时间的共倍数30秒做计数周期。3个LED分别以5、10、15秒周期闪烁。
  1. #include <STC8.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char

  4. sbit led1 = P3^0;
  5. sbit led2 = P3^1;
  6. sbit led3 = P3^2;

  7. uchar num,t1s;
  8. bit t5s,t10s,t15s;

  9. void InitTimer0()//@11.0592MHz
  10. {
  11.         TMOD = 0x01;
  12.         TH0 = 0x4C;
  13.         TL0 = 0x00;
  14.         EA = 1;
  15.         ET0 = 1;
  16.         TR0 = 1;
  17. }

  18. void main(void)
  19. {
  20.     InitTimer0();
  21.         while(1)
  22.         {
  23.                 if(t5s==1)
  24.                 {
  25.                         t5s=0;
  26.                         led1=~led1;
  27.                 }
  28.                 if(t10s==1)
  29.                 {
  30.                         t10s=0;
  31.                         led2=~led2;
  32.                 }
  33.                 if(t15s==1)
  34.                 {
  35.                         t15s=0;
  36.                         led3=~led3;
  37.                 }
  38.         }
  39. }

  40. void Timer0Interrupt(void) interrupt 1
  41. {
  42.         TH0 = 0x4C;
  43.         TL0 = 0x00;
  44.         num++;
  45.         if(num>=20)//1秒
  46.         {
  47.                 num=0;
  48.                 t1s++;
  49.                 if(t1s%5==0)//5秒
  50.                 {
  51.                         t5s=1;
  52.                 }
  53.                 if(t1s%10==0)//10秒
  54.                 {
  55.                         t10s=1;
  56.                 }
  57.                 if(t1s%15==0)//15秒
  58.                 {
  59.                         t15s=1;
  60.                 }
  61.                 if(t1s==30)//30秒
  62.                 {
  63.                         t1s=0;
  64.                 }
  65.         }
  66. }
复制代码





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1