设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 746|回复: 1
收起左侧

C51/STC 单片机 8位自动重装载定时器 250uS 中断输出最高精度1Hz方波(秒信号)的方法

[复制链接]
发表于 2022-9-3 16:45:22 | 显示全部楼层 |阅读模式
1.png
逻辑分析仪实测:1.00010925秒,每秒慢109.25us。
  1. #include "STC12C5A60S2.h"                                        //单片机型号:STC任意 (根据型号更改对应的头文件)
  2. #include "intrins.h"
  3. #define feed_dog()        WDT_CONTR |= 0x10        //看门狗喂狗               
  4. #define T250us 0x06                                                //250us 8位自动重装定时器初值
  5. sbit hz1 = P1 ^ 0;                                                //1HZ信号输出 (连接示波器或逻辑分析仪测量)
  6. void InitTimer0(){
  7.         TMOD = 0x02;                //定时器0模式2:溢出后自动将TH0的值装入TL0
  8.         TH0 = T250us;                //装入定时器高8位初值
  9.         TL0 = T250us;                //装入定时器低8位初值
  10.         PT0 = 1;                        //定时器0中断高优先级
  11.         EA = 1;                                //开总中断
  12.         ET0 = 1;                        //开定时器0中断
  13.         TR0 = 1;                        //开定时器0计数
  14. }

  15. void main(){
  16.         WDT_CONTR = 0x27;        //开看门狗
  17.     InitTimer0();
  18.         while (1) {
  19.                 _nop_();_nop_();
  20.                 feed_dog();
  21.                 _nop_();_nop_();
  22.         }
  23. }

  24. void Timer0Interrupt() interrupt 1{                //12Mhz@250us 定时器0中断 (高优先级,高精度)
  25.         //TH0 = T250us;                //定时器0溢出后自动重装初值,高精度定时器中断必须自动重装。
  26.         //TL0 = T250us;                //中断触发后向量处有一条LJMP指令,然后手动重装初值需要时间,这样会导致计时不准。
  27.         static unsigned int i = 0;
  28.         if(++i >= 2000){                                        //2000*250us=0.5s
  29.                 i = 0;
  30.                 hz1 = !hz1;
  31.         }

  32.         if(_testbit_(TF0)){                                        //以上代码执行时间超过250uS,定时器0溢出无法进入同一个中断,这样会导致计时不准、程序出错。
  33.                 hz1 = 1;
  34.                 while(1);
  35.         }
  36. }
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-20 04:22 , Processed in 0.430024 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表