OpenEdv-开源电子网

标题: STC12C单片机定时器0中断无法启动(50金币) [打印本页]

作者: 南有乔木    时间: 2017-6-2 16:39
标题: STC12C单片机定时器0中断无法启动(50金币)
定时器的初始化代码和中断代码如下
[mw_shl_code=c,true]/* Timer0 interrupt routine */
void tm0_isr() interrupt 1 using 1
{

    number++;
    Uart1SendChar(number>>8);
    Uart1SendChar(number);
  
}

/* main program */
void Timer0Init(void)
{
    AUXR|=0x80;                   //???0?1T??
    TMOD=0x00;
    TL0 = T1MS;                     //??????
    TH0 = T1MS >> 8;
    EA =  1;
    TR0 = 1;                        //???0????
    ET0 = 1;                        //?????0??
}
[/mw_shl_code]

串口1的初始化代码及发送字节函数如下,因为没用到接收函数所以就没写串口中断服务函数程序
[mw_shl_code=c,true]void UART1_Init(unsigned short usBaud)
{
    SCON = 0x50;            //8-bit variable UART
//    TMOD |= 0x20;                        //¶¨Ê±Æ÷1¹¤×÷ÔÚģʽ2,8λ×Ô¶¯ÖØ×°
//    TH1 = TL1 = -(FOSC/12/32/usBaud); //Set auto-reload vaule
//    TR1 = 1;                //Timer1 start run
    AUXR=0X11;
    BRT=-(FOSC/32/12/usBaud);
    ES = 1;                 //Enable UART interrupt
    EA = 1;  
    TI = 1;  
}


void Uart1SendChar(unsigned char ucSendChar)//·¢ËÍÒ»¸ö×Ö·û
{
    SBUF = ucSendChar;             //Send data to UART buffer
    while(!TI);
    TI = 0;
}[/mw_shl_code]
在主程序中测试时 Uart1SendChar可以正常发送数据,但是在定时器服务中断函数的发送函数却没用。。
请帮忙看看是哪里出的问题。。。


作者: metatron    时间: 2017-6-2 16:39
首先,主函数测试时传送过去的数据是否正确。
其次,看定时器的中断是否可以正常运行。
最后,如果都没问题,查看上位机和下位机的波特率是否一致。
以及波特率的速度传送完数据的时间是否在定时器的中断时间内。
作者: 正点原子    时间: 2017-6-2 18:12
帮顶
作者: 南有乔木    时间: 2017-6-2 20:58
https://zhidao.baidu.com/question/535271599.html
作者: 南有乔木    时间: 2017-6-28 15:02
metatron 发表于 2017-6-12 22:37
首先,主函数测试时传送过去的数据是否正确。
其次,看定时器的中断是否可以正常运行。
最后,如果都没问 ...

是因为 中断函数的问题,已经解决,谢谢~
作者: zhxzhx    时间: 2017-7-1 01:10
   AUXR=0X11;
不能这样写
可以先初始化串口,再初始化 Timer0




欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4