EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
目标:通过串口助手发送数据后,单片机回传+1。; h; M, j& V9 R0 ^, P
现象:没有进入中断服务函数8 E* S7 U5 g# f" ^6 s% J
void Uart_Init(void)
0 }- U' O8 S/ z# a, Q{
) y5 A8 t) V/ y! `6 D, Q% o$ j ]; s P_SW1 &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0 (P3.0/RxD2, P3.1/TxD2)
- V& {( W* g0 U7 s# y P_SW2 &= ~S2_S0; //S2_S0=0 (P1.0/RxD2, P1.1/TxD2)5 M* [2 K6 n4 w( }7 W! K
//串口1配置
n. C) T7 F; u9 u" b, I/ s" Y PCON &= 0x3f; //串口1波特率不倍频
' d x: e7 @1 |' I1 @8 R8 i SCON = 0x50; //8位数据,可变波特率" H8 [: t6 J3 E9 Z
AUXR |= 0x01; //选择定时器2为串口1的波特率发生器; D, N+ }" d$ B( k3 k( F
1 t3 l7 E+ \" s' e4 Y9 y
//串口2配置
* c. G' F3 c* N0 e1 ~' v S2CON = 0x50; //8位数据,可变波特率,串口2只能选择定时器2作为波特率发生器( c( K+ c; Z4 {
% O) L9 ]& l( O3 Q7 T AUXR |= 0x04; //T2为1T模式
( L8 ?. ~4 o+ F5 S T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
# Y6 \; X2 Q8 e7 Q( E T2H = (65536 - (FOSC/4/BAUD))>>8;$ H7 [' u8 L1 F# X/ G$ s. ~
AUXR |= 0x10; //启动定时器2
# A: W! ?; G2 F$ n4 f 9 ] y5 b4 e& ?2 R# D. W/ b
ES = 1; //允许串口1中断; b6 y7 T1 u' ?: y$ l6 h
IE2 |= 0x01; //允许串口2中断 8 P' y3 o( K7 P" a' w' ^
6 }% z. g! }4 `( B" \2 x}- q9 X3 }9 Q) P7 v
void Uart2() interrupt 8 using 1 { if (S2CON & S2RI) //接收标志 { S2CON &= ~S2RI; //清除S2RI位 recvdata = S2BUF; if(recvdata == 0x0A) { Uart2_SendData(0x0A+1); } if(recvdata == 0x0C) { Uart2_SendData(0x0C+1); } } if (S2CON & S2ti) //发送标志 { S2CON &= ~S2TI; //清除S2TI位 B_TX2_Busy = 0; } } void Uart2_SendData(u8 dat)
5 o. e. u5 E% K9 i{
# F2 T- ?$ T: ]; b5 E S2BUF = dat; //写数据到数据寄存器
6 M9 `! D9 M- f. ^0 ]- k- c% r while(!(S2CON&S2TI)); //停止位没有发送时,S2TI为0,一直等待
* |* N9 V' i6 r/ |7 V! f, ?9 f7 { S2CON &= ~S2TI; //清除S2TI+ F6 s* z' F6 D1 v8 k
. |9 ~1 u9 e. v; |9 z# [}% u; \1 ]+ f6 ^! R( F% [
|