打印

请问各位大虾单片机定时器对程序的影响??很迷惑啊,求救了

[复制链接]
1412|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kinggate|  楼主 | 2007-4-23 18:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大虾帮我看看下面的程序啊,怎么定时器对程序的运行有影响的?
程序如下:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

extern show(uchar showdata);

ulong IRcode=0x00000000;  //32位的键代码
uchar Lcustomcode=0x92;    //低八位用户码
uchar Hcustomcode=0x82;       //高---- 
uchar datacode=0xf8;       //8位键数据码
uchar Rdatacode=0x80;      //8位键数据反码

void delay()
{
 uchar i,j,k;
 for(i=200;i>0;i--)
    for(j=200;j>0;j--)
       for(k=5;k>0;k--) ;
}
  


void init()
{  
  TMOD=0x11; //定时器0,工作方式1 ;  定时器1,工作方式1
  TCON=0x01; //外中断0下降沿触发,(包括TR1=0,TR0=0)
  TH0=0x3c;  //初始化定时器0,定时50ms
  TL0=0xb0;
  TH1=0x00;  //初始化定时器1 
  TL1=0x00;
  
  EA=1;         //开全中断
  ET0=1;     //开放T0中断
  ET1=1;     //开放T1中断
  EX0=1;     //开放外中断0
  
}

void remoteint() interrupt 0 using 0    //遥控器中断处理函数
{
    
  EX0=0; 
  IRcode=code;  //code为读到的32位的值
    
  Lcustomcode=IRcode;              
  IRcode=IRcode>>8;                
  Hcustomcode=IRcode;
  IRcode=IRcode>>8;     
  datacode=IRcode;     
  IRcode=IRcode>>8;    
  Rdatacode=IRcode;            
 
  TR1=1;  //开始计时?????????    
  EX0=1;
  
}

void main()
{
   
    init();   
   
  while(1)       
  {             
        
     show(Lcustomcode);        
     delay();
     show(Hcustomcode);
     delay();      
     show(datacode);
     delay();
     show(Rdatacode);     
     delay();  
        
  }                                                            
}
问题就出在TR1=1上,有了这句之后显示的数码管就一闪一闪的了,并且数据也不正确,但删掉这句后,程序就正常,或者一开始就关闭T1(ET1=0)也没影响,程序运行也正常,难到定时器的中断对程序也有影响吗?
谢谢各位!

相关帖子

沙发
lbx_00| | 2007-4-23 19:36 | 只看该作者

你的定时器1的中断服务程序没有呀

我看不到你的定时器1中断服务程序,所以,我只能够猜了。你的显示应该是扫描的,扫猫的速度一定要比0.05s快,但是,我只看到了,你在外中断0的服务程序里启动T1,并没有看到,当T1益出后,重新装入TH1,TL1,和给F1清零,并重起T1,还有,T1中断服务时间过长,也会影响你的扫描显示。另外,用c写的东西,总是有许多东西对程序员不透明,有的时候,会出怪事,也许,你的T1不必全程关掉,所以,用汇编写程序的成功率会高一些,建议用汇编。

使用特权

评论回复
板凳
joy晴天| | 2007-4-23 20:05 | 只看该作者

计时中段服务程序呢?

在计时中段完成它应有的功能和次数后,关闭计时器,关闭计时使能

使用特权

评论回复
地板
kinggate|  楼主 | 2007-4-24 09:04 | 只看该作者

谢谢各位大虾

谢谢各位大虾,
在加入定时器中断函数后,程序正常了
我原以为没有用到定时中断服务程序,就不用写了
在加了个空的定时中断服务程序后程序就正常了
谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

37

帖子

0

粉丝