找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1068|回复: 9
收起左侧

51初学小白~请问定时器为什么不能触发

[复制链接]
ID:1039663 发表于 2022-8-25 11:30 | 显示全部楼层 |阅读模式
RT,刚刚学习51的定时器,想做一个每隔50MS闪灯的程序,但LED却常亮,编译是正常的,求问各位老师问题出在哪里了帮忙指点一下,谢谢定时器初始化方法是STC-ISP生成的 50MS 12T 16位自动重载

  1. #include <STC89C5xRC.H>
  2. void Timer0Init();
  3. int i=0;
  4. void main(){
  5.     Timer0Init();
  6.     P22=1;
  7.     while(1);
  8. }
  9. void Timer0Init()                //50MS@11.0592MHz{
  10.     AUXR &= 0x7F;               
  11.     TMOD &= 0xF0
  12.     TL0 = 0x00;               
  13.     TH0 = 0x4C;               
  14.     TF0 = 0;       
  15.     TR0 = 1;       
  16.     ET0=1
  17.     EA=1
  18. }
  19. void c_led() interrupt 1{
  20.     TL0 = 0x00;               
  21.     TH0 = 0x4C;       
  22.     TF0 = 0;               
  23.        
  24.     i+=1;
  25.     if(i>=65534){
复制代码
51hei截图20220825112637.png


回复

使用道具 举报

ID:883242 发表于 2022-8-25 12:39 | 显示全部楼层
用手甩一下电路板,如果看到一条连续的亮线,说明没闪。如果看到的是不连续的亮点,那就是已经闪了,但是你的眼睛无法分辨50ms这么快的速度。
回复

使用道具 举报

ID:491577 发表于 2022-8-25 12:57 | 显示全部楼层
你确定可以分辨出50ms闪烁?改成500ms闪烁吧
回复

使用道具 举报

ID:451718 发表于 2022-8-25 13:01 | 显示全部楼层
1,int类型的i,能够累加到65534么?
2,定时器中断是50ms的间隔,50ms翻转一次P22口的状态,你确定你的肉眼能否分辨100ms以内的闪烁?
回复

使用道具 举报

ID:624769 发表于 2022-8-25 13:02 来自手机 | 显示全部楼层
时间太短,闪了你也看不出来,500ms翻转一次比较好,这是其1,其二,stc89系列,模式0是13位定时器方式,那么,你所以为的50ms,其实只有6ms出头,那么等于就是常亮了。
回复

使用道具 举报

ID:1039663 发表于 2022-8-25 13:10 | 显示全部楼层
解决了,是89c52没有16位定时器重载,选择16位就好了
回复

使用道具 举报

ID:647261 发表于 2022-8-25 13:16 | 显示全部楼层
这50ms已经超出了正常人能看到的范围了,改1秒试试
回复

使用道具 举报

ID:161164 发表于 2022-8-25 13:19 | 显示全部楼层
就算你有钛合金氪石眼你也看不到50MS的闪灯闪烁
回复

使用道具 举报

ID:59202 发表于 2022-8-25 13:48 | 显示全部楼层
如果你用的是stc89c5x的芯片,哪有16位自动重载这个模式,那么TMOD &= 0XF0这一句设定肯定不合适,在应用前还是先搞清楚用的是啥芯片,再研究一下对应的pdf
回复

使用道具 举报

ID:825397 发表于 2022-8-25 14:31 | 显示全部楼层
定时器模式设置不对。将TMOD &=0xf0改为TMOD =0X01试试。建议不要用ISP中的定时器设置程序,很多错误
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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