标题: C51中怎么同时应用串口中断和两个定时器中断 [打印本页]

作者: sageliu    时间: 2017-5-7 15:49
标题: C51中怎么同时应用串口中断和两个定时器中断
大家好,我原来用两个定时器中断控制时钟显示和闹钟铃声,初始化如下:

void InitTimer0(void)
{

        unsigned long T0_temp;   
        

        T0_temp = 65536-((INT_CLOCK *CRY_FREQUENCY /1000)/12);  
        TL0_temp = T0_temp & 0xff;
        TH0_temp = T0_temp >> 8;
        TL0 = TL0_temp;
        TH0 = TH0_temp;

       TH1=0xd8;
       TL1=0xef;

        
        TMOD |= 0x11;
        
        EA = 1;                     

        
        ET0 = 1;  
        ET1=1;

        TR0 = 1;                     
        }



想增加一个蓝牙模块控制,所以需要对串口中断有以下声明:

void init()        //串口初始化  

{  

       ES=0;                                 //关中断  

       SCON = 0x50;                        // REN=1允许串行接受状态,串口工作模式1,  

                                            //10位UART(1位起始位,8位数据位,1位停止位,无奇偶校验),波特率可变  

       TMOD = 0x20;                        //定时器1工作于方式2,8位自动重载模式,用于产生波特率  

       TH1=TL1=0xFD;                       //波特率9600 (本次测试采用晶振为11.0592)  

       PCON &= 0x7f;                       //波特率不倍增  

       TR1 = 1;                            //定时器1开始工作,产生波特率  

                                           //发送标志位置0  

       TI=0;                               //接收标志位置0  

       RI=0;  

       ES=1;  

       led1=0;                                    //初始化设置3个指示灯全亮  

       led2=0;  

       led3=0;  

}  


请问怎么整合成一个声明内,或者怎么设置互不影响,谢谢!!
作者: xcoter    时间: 2017-5-7 19:37
合并在TMOD=0x20的初始化里面
作者: sageliu    时间: 2017-5-7 21:15
xcoter 发表于 2017-5-7 19:37
合并在TMOD=0x20的初始化里面

怎么个合法,你否详细点,TMOD=0X20  //方式2,两个8位计数器,初值自动装入。你觉得有什么用,定时器1和定时器2都要用16位计数器,定时器1控制数码管显示,定时器2控制闹钟铃声播放音乐。
作者: sageliu    时间: 2017-5-8 22:07
sageliu 发表于 2017-5-7 21:15
怎么个合法,你否详细点,TMOD=0X20  //方式2,两个8位计数器,初值自动装入。你觉得有什么用,定时器1和 ...

跪求大神,帮忙修改下,谢谢。
作者: 老B123    时间: 2017-5-8 22:11
这个书上有啊
作者: 123.123    时间: 2017-5-8 23:14
有中断优先级的

作者: sageliu    时间: 2017-5-8 23:23
能否共享下内容,串口和timer0一起用我就知道,但是问题是timer1我也要单独用,问题就在这里,谢谢你的回复。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1