标题: 51初学小白~请问定时器为什么不能触发 [打印本页]

作者: zjm001    时间: 2022-8-25 11:30
标题: 51初学小白~请问定时器为什么不能触发
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){
复制代码




作者: Hephaestus    时间: 2022-8-25 12:39
用手甩一下电路板,如果看到一条连续的亮线,说明没闪。如果看到的是不连续的亮点,那就是已经闪了,但是你的眼睛无法分辨50ms这么快的速度。
作者: hhh402    时间: 2022-8-25 12:57
你确定可以分辨出50ms闪烁?改成500ms闪烁吧

作者: robinsonlin    时间: 2022-8-25 13:01
1,int类型的i,能够累加到65534么?
2,定时器中断是50ms的间隔,50ms翻转一次P22口的状态,你确定你的肉眼能否分辨100ms以内的闪烁?
作者: 188610329    时间: 2022-8-25 13:02
时间太短,闪了你也看不出来,500ms翻转一次比较好,这是其1,其二,stc89系列,模式0是13位定时器方式,那么,你所以为的50ms,其实只有6ms出头,那么等于就是常亮了。
作者: zjm001    时间: 2022-8-25 13:10
解决了,是89c52没有16位定时器重载,选择16位就好了
作者: sttt300    时间: 2022-8-25 13:16
这50ms已经超出了正常人能看到的范围了,改1秒试试
作者: lkc8210    时间: 2022-8-25 13:19
就算你有钛合金氪石眼你也看不到50MS的闪灯闪烁
作者: xxxevery    时间: 2022-8-25 13:48
如果你用的是stc89c5x的芯片,哪有16位自动重载这个模式,那么TMOD &= 0XF0这一句设定肯定不合适,在应用前还是先搞清楚用的是啥芯片,再研究一下对应的pdf
作者: Tuier    时间: 2022-8-25 14:31
定时器模式设置不对。将TMOD &=0xf0改为TMOD =0X01试试。建议不要用ISP中的定时器设置程序,很多错误




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