EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
目标:通过串口助手发送数据后,单片机回传+1。/ Q- z1 |! P0 T) p4 P; h0 F2 ?
现象:没有进入中断服务函数, l# j3 Z8 _7 r
void Uart_Init(void), }/ h; Q- e) @4 A" t1 v
{
; r' x3 ]0 f( C: \8 i( x P_SW1 &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0 (P3.0/RxD2, P3.1/TxD2)9 [% r8 }1 D$ m/ x X
P_SW2 &= ~S2_S0; //S2_S0=0 (P1.0/RxD2, P1.1/TxD2). {7 C- ~) N$ d5 i
//串口1配置
; h3 e% Q+ A0 O8 \/ e9 I PCON &= 0x3f; //串口1波特率不倍频
8 k! k$ W f1 B$ d* f' H SCON = 0x50; //8位数据,可变波特率& k* X% A! e$ v, V G
AUXR |= 0x01; //选择定时器2为串口1的波特率发生器5 X8 s3 k w1 o+ r9 v
: V% R& l; o2 G h# L o //串口2配置 ! Z8 r3 l' b- [! [" A* m, t
S2CON = 0x50; //8位数据,可变波特率,串口2只能选择定时器2作为波特率发生器
/ S" f, E* I' f2 y
* o2 l% a' f5 u AUXR |= 0x04; //T2为1T模式
4 X) H0 Y# ]( B5 F& z; E T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
2 O' R& n& u; U# u% ] X$ m9 c T2H = (65536 - (FOSC/4/BAUD))>>8;. b, F* m" f4 m- O# T) {
AUXR |= 0x10; //启动定时器28 u# |, ?2 i v
1 H) u1 K S* o' o# B0 i ES = 1; //允许串口1中断4 @9 B3 }9 e/ d7 I5 x
IE2 |= 0x01; //允许串口2中断 ! i8 Z( w) ?+ q5 M( z
( h8 H4 u+ G5 g* _* K2 R}
, X1 t* h9 O3 l8 vvoid 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)
j( W' a% r2 E{2 N, a, F6 m/ b$ D
S2BUF = dat; //写数据到数据寄存器3 d6 U! Z& S6 ^7 r" f
while(!(S2CON&S2TI)); //停止位没有发送时,S2TI为0,一直等待) |# o+ p$ y, N. t
S2CON &= ~S2TI; //清除S2TI
% C; t& l+ u3 q- y+ m; w& H7 R; i7 N4 d- O
}
1 R3 ]! B/ V8 I+ _9 j" C/ S" h |