標(biāo)題:
STC15W4K56S2串口3 4收發(fā)問題討論
[打印本頁]
作者:
tembo09
時(shí)間:
2018-6-10 21:43
標(biāo)題:
STC15W4K56S2串口3 4收發(fā)問題討論
本帖最后由 tembo09 于 2018-6-10 21:45 編輯
現(xiàn)在STC15W4K56S2串口3 串口4都能發(fā)數(shù)據(jù),就是接收中斷不響應(yīng),求解,有例程借鑒下。謝謝
void Uart1234_Init(void)
{
P_SW1=0X00; //選擇P30 P31為串口1
P_SW2=0X00; //選擇P10 P11為串口2,選擇P00 P01為串口3,選擇P02 P03為串口4
//串口1配置
9600bps@11.0592MHz
SCON = 0x50; //8位數(shù)據(jù),可變波特率
AUXR |= 0x40; //定時(shí)器1時(shí)鐘為Fosc,即1T
AUXR &= 0xFE; //串口1選擇定時(shí)器1為波特率發(fā)生器
TMOD &= 0x0F; //設(shè)定定時(shí)器1為16位自動(dòng)重裝方式
TL1 = 0xE0; //設(shè)定定時(shí)初值
TH1 = 0xFE; //設(shè)定定時(shí)初值
ET1 = 0; //禁止定時(shí)器1中斷
TR1 = 1; //啟動(dòng)定時(shí)器1
//串口2配置
115200bps@11.0592MHz
S2CON = 0x50; //串口2的8位數(shù)據(jù),可變波特率
//串口3配置
115200bps@11.0592MHz
S3CON |= 0x10; //串口3啟動(dòng)串行接收器
S3CON &= 0xBF; //串口3選擇定時(shí)器2為波特率發(fā)生器,8位數(shù)據(jù),可變波特率
AUXR |= 0x04; //定時(shí)器2時(shí)鐘為Fosc,即1T
T2L = 0xE8; //設(shè)定定時(shí)初值0xE0
T2H = 0xFF; //設(shè)定定時(shí)初值0xFE
AUXR |= 0x10; //啟動(dòng)定時(shí)器2
//串口4配置
9600bps@11.0592MHz
S4CON = 0x10; //8位數(shù)據(jù),可變波特率
S4CON |= 0x40; //串口4選擇定時(shí)器4為波特率發(fā)生器
T4T3M |= 0x20; //定時(shí)器4時(shí)鐘為Fosc,即1T
T4L = 0xE0; //設(shè)定定時(shí)初值
T4H = 0xFE; //設(shè)定定時(shí)初值
T4T3M |= 0x80; //啟動(dòng)定時(shí)器4
ES = 1; // 串口1中斷打開
IE2 |= 0x01; // 串口2中斷打開
IE2 |= 0x08; // 串口3中斷打開
IE2 |= 0x10; // 串口4中斷打開
}
void Uart4() interrupt 18 using 1
{
IE2 &= 0xEF; // 串口4中斷關(guān)閉
if(S4CON & S4RI) //串行接收到停止位的中間時(shí)刻時(shí),該位置1
{
S4CON &= ~S4RI; //清除S4CON寄存器對應(yīng)S4RI位(該位必須軟件清零)
uart_count=0;
rev_buff4[uart_count] = S4BUF; //把串口4緩存SBUF寄存器數(shù)據(jù)依次存放到數(shù)組Rec_Buf4中
uart_count++;
if(uart_count>buff_max) //接收數(shù)大于定義接收數(shù)組最大個(gè)數(shù)時(shí),覆蓋接收數(shù)組之前值
{
uart_count = 0;
}
}
if(S4CON & S4TI) //在停止位開始發(fā)送時(shí),該位置1
{
S4CON &= ~S4TI; //清除S4CON寄存器對應(yīng)S4TI位(該位必須軟件清零)
}
IE2 |= 0x10; // 串口4中斷打開
}
作者:
tembo09
時(shí)間:
2018-6-10 21:44
void Uart1234_Init(void)
{
P_SW1=0X00; //選擇P30 P31為串口1
P_SW2=0X00; //選擇P10 P11為串口2,選擇P00 P01為串口3,選擇P02 P03為串口4
//串口1配置
9600bps@11.0592MHz
SCON = 0x50; //8位數(shù)據(jù),可變波特率
AUXR |= 0x40; //定時(shí)器1時(shí)鐘為Fosc,即1T
AUXR &= 0xFE; //串口1選擇定時(shí)器1為波特率發(fā)生器
TMOD &= 0x0F; //設(shè)定定時(shí)器1為16位自動(dòng)重裝方式
TL1 = 0xE0; //設(shè)定定時(shí)初值
TH1 = 0xFE; //設(shè)定定時(shí)初值
ET1 = 0; //禁止定時(shí)器1中斷
TR1 = 1; //啟動(dòng)定時(shí)器1
//串口2配置
115200bps@11.0592MHz
S2CON = 0x50; //串口2的8位數(shù)據(jù),可變波特率
//串口3配置
115200bps@11.0592MHz
S3CON |= 0x10; //串口3啟動(dòng)串行接收器
S3CON &= 0xBF; //串口3選擇定時(shí)器2為波特率發(fā)生器,8位數(shù)據(jù),可變波特率
AUXR |= 0x04; //定時(shí)器2時(shí)鐘為Fosc,即1T
T2L = 0xE8; //設(shè)定定時(shí)初值0xE0
T2H = 0xFF; //設(shè)定定時(shí)初值0xFE
AUXR |= 0x10; //啟動(dòng)定時(shí)器2
//串口4配置
9600bps@11.0592MHz
S4CON = 0x10; //8位數(shù)據(jù),可變波特率
S4CON |= 0x40; //串口4選擇定時(shí)器4為波特率發(fā)生器
T4T3M |= 0x20; //定時(shí)器4時(shí)鐘為Fosc,即1T
T4L = 0xE0; //設(shè)定定時(shí)初值
T4H = 0xFE; //設(shè)定定時(shí)初值
T4T3M |= 0x80; //啟動(dòng)定時(shí)器4
ES = 1; // 串口1中斷打開
IE2 |= 0x01; // 串口2中斷打開
IE2 |= 0x08; // 串口3中斷打開
IE2 |= 0x10; // 串口4中斷打開
}
void Uart4() interrupt 18 using 1
{
IE2 &= 0xEF; // 串口4中斷關(guān)閉
if(S4CON & S4RI) //串行接收到停止位的中間時(shí)刻時(shí),該位置1
{
S4CON &= ~S4RI; //清除S4CON寄存器對應(yīng)S4RI位(該位必須軟件清零)
uart_count=0;
rev_buff4[uart_count] = S4BUF; //把串口4緩存SBUF寄存器數(shù)據(jù)依次存放到數(shù)組Rec_Buf4中
uart_count++;
if(uart_count>buff_max) //接收數(shù)大于定義接收數(shù)組最大個(gè)數(shù)時(shí),覆蓋接收數(shù)組之前值
{
uart_count = 0;
}
}
if(S4CON & S4TI) //在停止位開始發(fā)送時(shí),該位置1
{
S4CON &= ~S4TI; //清除S4CON寄存器對應(yīng)S4TI位(該位必須軟件清零)
}
IE2 |= 0x10; // 串口4中斷打開
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1