C8051F340 UART0中断接收问题
本帖最后由 mTouch 于 2012-8-18 12:22 编辑C8051F340定义 UART0允许中断(ES0=1)接收, 且设置在定时器Timer2的中断中 发送数据时,
Timer2不能正常动作.
如果关掉UART0中断允许(ES0=0),Timer2能正常动作.
出现这样的情况,是什么原因造成的,有知道的吗?
难道UART0与Timer2之间相互有约束?
void UART0Senddata(unsigned char ch)
{
SBUF0 = ch;
while(SCON0&0x02==0); //wait for TI0=1;
SCON0 = SCON0&0xfd;//TI0=0;
}
main()
{
....
设置UART0,
设置Timer2;
....
ET2 = 1;
ES0 =1;
EA=1;
while(1)
{
}
}
void UART0_Interrupt(void) interrupt 4
{
if (SCON0&0x01)
{
SCON0&=0xFE; // 清接收中断标志RI0
.....
}
}
void Timer2_ISR(void) interrupt 5
{
TF2H = 0;
UART0Senddata('A');
}
貌似串口中断优先级要高些,不知这里面有没有清TI。
如果串口中断把TI清了 UART0Senddata 里wait for TI0=1; 就等不到了。
好像是你的设置问题,我的设置是这样:/***********************************************************************************
* 函数名称:Uart1_Init;
*
* 函数功能描述:Uart1初始化;
*
* 输入参数:unsigned char类型,发送数据波特率;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void Uart1_Init (void) //Uart1初始化
{
char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page
SFRPAGE = UART1_PAGE;
SCON1 = 0x10; // UART1设置为8位模式, 允许接收
// TI1 = 1; // 开启发送
SFRPAGE = TIMER01_PAGE;
TMOD &= ~0xF0; // 定时器1设置为8为重载模式
TMOD |=0x20;
TH1 = 0xa0;
CKCON &= ~0x13; // Clear all T1 related bits
// CKCON |=0x10; // T1M = 0; SCA1:0 = 10
TL1 = TH1; // 定时器1 计数值初始化
TR1 = 1; // 打开定时器1
EIE2 &= ~0x40; // 关闭Uart1中断
EIP2 &= ~0x40; // 关闭Uart1中断优先级
SFRPAGE = SFRPAGE_SAVE; // Restore SFR page
}
可参考,。 自己解决了!
方法如下:
void UART0Senddata(unsigned char ch)
{
SBUF0 = ch;
while(SCON0&0x02==0); //wait for TI0=1;
SCON0 = SCON0&0xfd;//TI0=0;
}
main()
{
....
设置UART0,
设置Timer2;
....
ET2 = 1;
ES0 =1;
EA=1;
while(1)
{
if (read_flag) //如果接收完毕标志已置位,就将读到的数从串口发出
{
read_flag= 0 ; //接收完毕标志清0
UART0_Send_data(Byte);// 回送接收到的数据
}
}
}
void UART0_Interrupt(void) interrupt 4
{
if (SCON0&0x01)
{
SCON0&=0xFE; // 清接收中断标志RI0
.....
}
if (TI0 == 1) // Check if transmit flag is set
{
TI0 = 0; // Clear interrupt flag
}
}
void Timer2_ISR(void) interrupt 5
{
TF2H = 0;
UART0Senddata('A');
}
一组:
二块板子,相互发送与接收,连续工作了24小时,还是稳定,
正确发送与接收数据!
另一组:
板子与PC通过串口进行发送与接收,连续工作了24小时,还是稳定,
正确发送与接收数据!
页:
[1]