找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 232|回复: 4
打印 上一主题 下一主题
收起左侧

程序这样写是单片机定时器不工作还是写得有问题?

[复制链接]
跳转到指定楼层
楼主
ID:706724 发表于 2024-4-24 22:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用STC8G1K08A单片机的定时器0 写了定时亮灯的程序,但发觉不产生定时作用。以下是定时器0的程序。请各位大佬指导一下。
  1. bit FLAG = 0;       //计数完成标志位
  2. sbit led=P5^4;
  3. uint count;     //计数变量1
  4. uint count2;    //计数变量2
  5. uint count3;    //计数变量3


  6. /*****************定时器0函数*******************/
  7. void Timer0_Init(void)                //50毫秒@12.000MHz
  8. {
  9.         AUXR &= 0x7F;                        //定时器时钟12T模式
  10.         TMOD &= 0xF0;                        //设置定时器模式
  11.         TL0 = 0xB0;                                //设置定时初始值  
  12.         TH0 = 0x3C;                                //设置定时初始值
  13.         TF0 = 0;                                //清除TF0标志
  14.         ET0 = 1;
  15.         TR0 = 1;                                //定时器0开始计时
  16.         
  17. }


  18. void led0()
  19. {
  20.         led=0;        //灯亮
  21.          count  = 0;
  22.    count2 = 1;
  23.    count3 = 11;      //定时1分钟
  24.    TR0 = 1;  //启动定时器0
  25.         
  26. }


  27. void led1()
  28. {
  29.         led=0;//灯亮
  30.          count  = 0;
  31.    count2 = 30;        //
  32.    count3 = 11;      //定时0.5小时
  33.     TR0 = 1;  //启动定时器0
  34.         
  35. }


  36. void led2()
  37. {
  38.         led=0;//灯亮
  39.          count  = 0;
  40.    count2 = 0;        //
  41.    count3 = 11;      //定时1小时
  42.     TR0 = 1;  //启动定时器0
  43.         
  44.                
  45. }


  46. void led3()
  47. {
  48.           led=0;//灯亮
  49.                 EA=0;//关闭外部中断,
  50.          count  = 0;
  51.    count2 = 0;        //
  52.    count3 = 8;      //定时4小时
  53.     TR0 = 1;  //启动定时器
  54.         
  55. }




  56. /********************** Timer0中断函数************************/
  57. void Timer0_Isr()interrupt 1 using 1
  58. {
  59.         TL0   =        0xB0;
  60.         TH0  =        0x3C;            //50MS
  61.         count++;
  62.         if(count==1200)            //60S 1200
  63.         {
  64.                 count=0;
  65.                 count2++;
  66.                 if(count2==60)        //60分钟  60
  67.                 {
  68.                         count2=0;
  69.                         count3++;
  70.                         if(count3==12)// 12小时
  71.                         {
  72.                             count3=0;
  73.                                                                                                           led=1;
  74.                                                                                                            EA=1;
  75.                              FLAG = 1;          //计数时间到标志  可重新检测外围的是否有中断
  76.                         }
  77.                 }
  78.         }               
  79. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:619259 发表于 2024-4-25 00:25 | 只看该作者
"EA=1"放进中断函数里不对呵
回复

使用道具 举报

板凳
ID:1109793 发表于 2024-4-25 07:23 | 只看该作者
EA要先打开,否则任何中断都进不去吧
回复

使用道具 举报

地板
ID:11804 发表于 2024-4-25 09:20 | 只看该作者
单片机一开机上电要打开中断,后面的中断才能响应,
void Timer0_Isr()interrupt 1 using 1
{EA=0;
.....
.....
EA=1;

}
.....
EA=1;
void main()
{
while(1){};
}
或者
void main()
{EA=1;
while(1){};
}
回复

使用道具 举报

5#
ID:161164 发表于 2024-4-25 10:21 | 只看该作者
main()函数呢?被吞了?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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