请教大哥大姐们51单片机一个定时器,多处程序怎么用

2019-07-15 23:03发布

一个定时器,多个程序用,(如主程序中让每进20次定时中断(1秒),让灯亮一下,这样循环着,当触发外部中断时,可以是1秒也可以大于1秒,响应另一个触发事件)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
auqyygtj
2019-07-17 02:39
上面的问题解决了,触发外部中断后把while(1) 死循环换成for就可以了
//……………………以下是外部中断中循环子程序……………………………………
void zhongduan()
{
init();//初始化程序
        ptemp=0;  //给加累数初值0
        while(1)   //这个循环是让它在满足条件的情况下循环累加数显示,关系量ptemp
//        for(ptemp=0;ptemp<101;ptemp++)         //如果这里启用for,而禁用while,执行完后会返回到主函数
                {  
                if(tt>=1)//判断tt是否大于等于1,这里tt就是主程序里dd=20,tt自加1
                tt=0; //置0重新计时
                ptemp++;//初值自加1
                if(ptemp==101) //给累加数定一个最大数
        {
                ptemp=0;
                if(ptemp==0)
                {
                wela=1;  //打开位选
                P1=0xff; //将P1口置数11111111全部高电平, 打开8个数码管
                wela=0;  //关闭位选
                dula=1;//打开段选
                temp=0xfe;        //赋temp值为11111110 ,也就是数码管的a段
                P1=temp; //将temp的值赋予给P1口
                delay(10);        //调用延时程序
           for(rr=0;rr<61;rr++)
        //        while(1) //这个循环是让它满足条件下循环小口字关系量rr
                {         
                temp=_crol_(temp,1);  //左移一位
                P1=temp;          //移位后的值赋予给P1口
                delay(8);          //调用延碧
                rr++;//自加1,便于下面调用(rr=6刚好循环一次口字)
        if(temp==0xdf) /*检测temp是否等于(高位11011111低位),因为数码管七段加一个DP点
                我们不要DP(P1.7)点和G段(P1.6)亮*/
                temp=0x7f; //置位到DP(P1.7)点,也就是P1.6和P1.7跳过(高位0111 1111低位)
                if(rr>=60)//就是循环5个口字
                 {
                for(ee=0;ee<10;ee++)   //这里要是用while(1)就会死循环
        //        while(1) //这个循环是让它满足条件下循环大口字 ,关系量ee
                        {
                 xunhuankou();//调用循环8位数码管组成的口子子程序
                 ee++;//每循环一次自加1
                 }
                 }
        }       
        }       
                }       
                qian=ptemp/1000;
                bai=ptemp%1000/100;
                shi=ptemp%1000%100/10;
                ge=ptemp%10;
                display(qian,bai,shi,ge);
                }   

}   
//……………………以上是外部中断中循环子程序……………………………………

一周热门 更多>