金牌会员
- 积分
- 1010
- 金钱
- 1010
- 注册时间
- 2016-11-8
- 在线时间
- 233 小时
|
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可以正常发送数据,但是在定时器服务中断函数的发送函数却没用。。
请帮忙看看是哪里出的问题。。。
|
最佳答案
查看完整内容[请看2#楼]
首先,主函数测试时传送过去的数据是否正确。
其次,看定时器的中断是否可以正常运行。
最后,如果都没问题,查看上位机和下位机的波特率是否一致。
以及波特率的速度传送完数据的时间是否在定时器的中断时间内。
|