打印

求助:各位大哥请帮我看看这个问题啊(定时器方面的),谢谢

[复制链接]
1469|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
星星电灯|  楼主 | 2007-5-27 18:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
是这样的:
我想用 定时器 0 来处理喂狗,
定时器1 来处理串口

现在问题是,如果我不把 TR1=1; 注释掉

 void timer0(void) interrupt 1 
运行不怎么样啊

因为 P33 是接在一个 LED 上的
LED 不闪啊


是不是不能同时开启 T0 和 T1 啊
谢谢!
水手+舟舟 18:31:10
//-------------------------------------头文件--------------------------------------
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
//-------------------------------------头文件--------------------------------------

//********定义引脚*************************************
sbit   P33      =    P3^3;    //喂狗
sbit   D0      =     P0^0;    //喂狗
//********定义引脚*************************************



//**************定义变量*************************************************
int WDogZdJs;   //喂狗中断计数
char  rece[5];      //接收的字符
int   j;
bit receive;    //接收标志置位
//**************定义变量*************************************************



void delay()
{
    int i,j;
    for(i=0;i<100;i++)
       {
           for(j=0;j<10;j++)
              {
                  ;
              }
           }
}


void Sendtex()
{
    SBUF='1';
  while(!TI);
  TI=0;
}

/*
void ComInStr() interrupt 4 //串行口中断
{
  if(RI)
  {
       if (j>4)
       {
               j=0;        
       }
       rece[j]=SBUF;
       j++;
       if(j>4)
       receive=1; //接收标志置位
       RI=0;
  }
   
}
*/


void timer0(void) interrupt 1   //喂狗中断程序
{
  TH0 = (65536-5000)/256;     //重载计数初值 每 5 ms 中断一次
  TL0 = (65536-5000)%256;     //这是手动装置,如果 T0 为模式 1 的话,必须要手动装入
                              //如果如果 T0 为模式 2 的话,只要初始化了,
                              //则在这里可以不要 TH0 = (65536-5000)/256; TL0 = (65536-5000)%256;
  WDogZdJs ++;
  if ( WDogZdJs >= 10 )
       {
       P33 =! P33;  //不停喂狗
       WDogZdJs = 0;
    }
}

void main()
{
     delay();
     P0 = 0xff;
   P1 = 0xff;
   P2 = 0xff;
   P3 = 0xff;
   P33 =! P33;
   
   EA = 1 ;                    //允许中断
   ET0 = 1;                  //T/C0 开中断(定时器0/计数器0)
   ET1 = 1;                  //T/C0 开中断(定时器1/计数器1)
   
   TMOD=0x21;                  //定时器1模式1  定时器0模式1 
   
   //---------------------------处理串口中断---------------------------------------
   ES = 1 ;                    //允许串行中断  
   SCON=0x50;                  //串行口工作方式1, 10 位异步收发,波特率由定时器控制
   PCON |= 0x00;
   TL1=0xFA; 
   TH1=0xFA;                   //22.1184M晶振 波特率9600
   TR1=1;                      //启动定时器1/计数器1
   //---------------------------处理串口中断---------------------------------------
   
   
   //------------------------------处理中断喂狗------------------------------------  
   TH0 = (65536-1000)/256;     //预置计数初值,每 5 ms 中断一次
   TL0 = (65536-1000)%256;
   TR0 = 1;                    //启动定时器0/计数器0
   //------------------------------处理中断喂狗------------------------------------ 
  
   
  
   while(1)
    {
        //if (D0==0)
        //{
            //Sendtex();
        //}
        //if(receive)
          // { 
         // receive=0;
          // }//receive
         ;
     }
}

相关帖子

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

本版积分规则

74

主题

121

帖子

1

粉丝