微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求大神帮忙改改程序!

求大神帮忙改改程序!

时间:10-02 整理:3721RD 点击:
/* ******************************
晶振频率为6MHz。
使用T0和T1两个计时器产生方波,
T0产生10Hz的方波,T1产生5Hz的
方波。
分别通过P2.0和P2.1两个引脚输出。
首先,输出T0产生的10Hz方波,2分
钟后输出T1产生的5Hz方波。于此同
时关闭T0中断,停止输出10Hz方波。
****************************** */
#include <reg51.h>
sbit P20=P2^0;       
sbit P21=P2^1;       
unsigned char i;
unsigned char z;  
unsigned char counter1;       
void main (void)
{
  TR0=0;          // 禁止T0
  TMOD=0x11;  // T0和T1均选择工作方式1,16位定时器
  TL0=0x58;          // T0和T1均定时50ms
  TH0=0x9e;          
  TL1=0x58;          
  TH1=0x9e;         
  i=1;                 //计数变量i赋初值
  z=2;                //计数变量z赋初值
  P20=0;        // P2.0输出低电平
  counter1=0; //中断次数为0
  ET0=1;          // 使能T0溢出中断
  ET1=1;          //  使能T1溢出中断
  EA=1;                  // 使能CPU中断
  TR0=1;         //T0开始运行
  while(1)          // 等待中断
  {;}
}
void T0_ISR (void) interrupt 1         //T0中断服务函数
{
  i--;                          //计数变量减1
  counter1++;          //中断次数加1
  if(i==0)                 
  {                                 
    P20=!P20;        //将P2.0取反
        i=1;           // 重新给计数变量赋值
  }
  if(counter1==2400)
  {
     TR1=1;                  //开启T1中断
   }
}
void T1_ISR (void) interrupt 2 // T1中断服务函数
{
  TR0=0;                                         //关闭T0中断
  z--;                                          //计数变量减1                          
  P21=0;                                  //P2.1输出低电平
  if(z==0)                                 
  {                                                 
    P21=!P21;                        //P2.1输出高电平
        z=2;                                //重新给计数变量赋值
  }
}
求大神看看这段程序,现在我只能由T0产生信号,T1的信号无法产生,希望大神们能帮我改一改,使代码的功能完全实现。小弟在此谢过了!


已退回10积分

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top