8G1K08串口2无法进中断,麻烦大神给看下什么问题
void InitUart2(uint BAUD) //9600bps@11.0592MHz
{
P_SW2 &= ~0x01; //UART2/USART2: RxD2(P1.0), TxD2(P1.1)
S2CON = 0x10; //8位数据,可变波特率
AUXR |= 0x04; //定时器时钟1T模式
T2L = (65536 - (FOSC/4/BAUD)); //设定定时初值
T2H = (65536 - (FOSC/4/BAUD))>>8; //设定定时初值
AUXR |= 0x10; //定时器2开始计时
IE2 = 0x01; //使能串口中断
EA = 1;
b485Send2 = 0; //处于接收
}
void Uart2() interrupt 8
{
//接收
if (S2CON & 0x02)
{
S2CON &= ~0x02; //清除S2RI位
receTimeOut2 = 10; //通讯超时值这个地方很重要 10ms
receBuf2 = S2BUF; //把接收到的数据送往接收缓冲区
receCount2++; //接收地址偏移寄存器加1
}
//发送
if (S2CON & 0x01)
{
S2CON &= ~0x01; //清除S2TI位
busy2 = 0; //清忙标志
}
}
void uartsends2(uchar buff[],uchar len)
{
uchar i;
for(i=0;i<len;i++)
{
S2BUF = buff;
busy2 = 1;
while (busy2); 一直卡到这里
}
}
void Begin_send2(void)
{
b485Send2 = 1; //处于发送
Delay1ms();
Delay1ms();
uartsends2(sendBuf2,sendCount2);
b485Send2 = 0; //处于接收
Delay1ms();
Delay1ms();
receCount2 = 0; //清接收地址偏移寄存器
}
从正确开始,不要从错误开始
STC8系列4组串口同时通信的程序,Modbus 演示程序;可共享T2做波特率发生器 - 串行口,DMA支持的4组串口,RS232,RS485 国芯技术交流网站 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
有些型号没有串口2
我这个是TSSOP20,有串口2的,发送数据串只能发出去第一个字节,然后就卡到检测忙标志的那里了,就是进不了中断一直在那卡着, suhouli 发表于 2024-6-14 17:38
我这个是TSSOP20,有串口2的,发送数据串只能发出去第一个字节,然后就卡到检测忙标志的那里了,就是进不了 ...用我们正确的程序测试
STC8系列4组串口同时通信的程序,Modbus 演示程序;可共享T2做波特率发生器 - 串行口,DMA支持的4组串口,RS232,RS485 国芯技术交流网站 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
busy2 = 1;
while (busy2); busy2赋值1了,while(1)不卡才怪 soma 发表于 2024-6-14 22:02
busy2 = 1;
while (busy2); busy2赋值1了,while(1)不卡才怪
进中断就会跳出来了,没进中断才会一直卡到这
void Uart2() interrupt 8
{
//接收
if (S2CON & 0x02)
{
S2CON &= ~0x02; //清除S2RI位
receTimeOut2 = 10; //通讯超时值这个地方很重要 10ms
receBuf2 = S2BUF; //把接收到的数据送往接收缓冲区
receCount2++; //接收地址偏移寄存器加1
}
//发送
if (S2CON & 0x01)
{
S2CON &= ~0x01; //清除S2TI位
busy2 = 0; //清忙标志
}
} 我看着像是中断函数里 接收和发送 搞反了,发送中断在第2位
页:
[1]