请帮我分析下我的定时程序有什么毛病?

2019-03-24 19:42发布

我的想法是用定时器0每0.1ms产生一个脉冲,然后用一个变量对时间计数,然后让LED(P2_0)灯亮 一秒再灭一秒。
  1. #include <reg52.h> //预处理命令
    unsigned int timeC;
    sbit P2_0 = 0xA0^0;
    sbit P2_1 = 0xA0^1;

    void initCom(){
    //SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
    TMOD|= 0x22; //定时器0,1均工作方式2
    //PCON|= 0x80;
    TH1 = 0xF3; //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)
    TL1 = 0xF3;
    TH0 = 0x9C; // 计时器0的定时值为0.1ms
    TL0 = 0x9C;
    //ES = 1; //开串口中断
    EA = 1; // 开总中断
    TR0 = 1; // 定时器0可用
    TR1 = 1; // 定时器1可用
    // IE = 0x0;
    P2 = 0xff; //关LED指示
    }

    void timer(void) interrupt 1 using 1{    // 中断程序,由定时器0产生中断
    timeC++;
    }

    void main(){ // 主程序
    initCom();
    while(1){
    if(timeC<10000){
    P2_0 = 0;               //点亮LED
    }
    if(timeC>10000){
    P2_0 = 1;               //灭LED
    }
    if(timeC>20000){
    timeC = 0;
    }
    }
    }
复制代码

程序编译下装都没有问题,就是单片机执行的时候LED常亮了,没有达到设计的效果,请帮我看一下,我的程序的问题出在哪儿,谢谢  此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
15075039ZQ
1楼-- · 2019-03-25 06:12
ET(定时中断)没有开好像
hookyy
2楼-- · 2019-03-25 07:04
TR 开中断不行吗?
hookyy
3楼-- · 2019-03-25 10:40
 精彩回答 2  元偷偷看……
小小白
4楼-- · 2019-03-25 16:29
对定时器的设置是有方法的!我感觉定时器是一个树形的结构,理清楚这种结构,然后在写程序的时候就不会忘记了,多写写就知道了.
15075039ZQ
5楼-- · 2019-03-25 20:22
这个要看数据手册寄存器和框图,这个才是最重要的

一周热门 更多>