EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
目标:通过串口助手发送数据后,单片机回传+1。; ?/ Y ~: \9 \& W8 R: U) J
现象:没有进入中断服务函数" H- `8 c( B7 k% U
void Uart_Init(void)
# }1 a8 H; ]$ J5 j# e0 `0 P3 L+ q{
5 b9 D; K) D) M5 u, W P_SW1 &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0 (P3.0/RxD2, P3.1/TxD2)9 D& V2 _6 e! z8 m5 q
P_SW2 &= ~S2_S0; //S2_S0=0 (P1.0/RxD2, P1.1/TxD2)! e+ a' h* X! i/ }/ ~
//串口1配置5 l4 `: r% S2 M
PCON &= 0x3f; //串口1波特率不倍频
% Q/ Y0 q! S: q' `/ `* N SCON = 0x50; //8位数据,可变波特率& Z" P4 t. N9 J7 X3 S
AUXR |= 0x01; //选择定时器2为串口1的波特率发生器
% H" x: s) B( A p 5 m7 ~7 }; j4 w: Y' y% F
//串口2配置
) `" B$ r+ S2 e& ^ S2CON = 0x50; //8位数据,可变波特率,串口2只能选择定时器2作为波特率发生器
0 b' c0 B- F0 Y) I& d& G
- e9 J7 H) t. f2 f" o AUXR |= 0x04; //T2为1T模式 }% i. J; y8 y4 L, a' O- s
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
& W3 c$ Z: p G3 P; L3 t T2H = (65536 - (FOSC/4/BAUD))>>8;# l8 o$ f3 o# ], L
AUXR |= 0x10; //启动定时器2 s8 `* s; @% W' x
% J/ n2 U( ]9 b8 l/ i
ES = 1; //允许串口1中断
7 t* c- n0 H4 w% ^ IE2 |= 0x01; //允许串口2中断
" K; J- D8 `! j. J
' I2 e8 q9 [/ L}
: @8 [& ^% g, W, I) svoid 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)
- B3 g. E& }8 a. I1 y{
" ~7 |* r% C' o% _- _7 H( I S2BUF = dat; //写数据到数据寄存器
6 r/ m% r( m0 v c while(!(S2CON&S2TI)); //停止位没有发送时,S2TI为0,一直等待+ o8 D$ P' p' a
S2CON &= ~S2TI; //清除S2TI7 V" j2 b5 f/ j/ S
8 I5 ]# _) Y8 n, b6 X- [2 L4 j8 r
}3 k2 U0 w, r1 B
|