EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
目标:通过串口助手发送数据后,单片机回传+1。" h+ D, a5 K! Y6 F, K
现象:没有进入中断服务函数2 B' x0 p) s( Q8 _
void Uart_Init(void)
! A0 _, N* W& H' H. f3 s) N{
# v" _2 S r' N8 z P_SW1 &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0 (P3.0/RxD2, P3.1/TxD2)
# {* Z. [5 }/ a/ K( z: K" h+ J- A P_SW2 &= ~S2_S0; //S2_S0=0 (P1.0/RxD2, P1.1/TxD2)
: z9 d; |$ c+ Z) ~ //串口1配置4 e' l7 `2 I4 x' c( j
PCON &= 0x3f; //串口1波特率不倍频$ k! ~! Q' |0 t* w3 h1 P
SCON = 0x50; //8位数据,可变波特率
; r. X9 ~# k& W% c4 G& i+ L+ u8 F AUXR |= 0x01; //选择定时器2为串口1的波特率发生器
* o8 z& a: d2 h$ L
& y6 ^' p! V# y/ q8 I7 a$ W+ X //串口2配置 2 p2 h" F# p$ ^
S2CON = 0x50; //8位数据,可变波特率,串口2只能选择定时器2作为波特率发生器
3 L( A; H6 Z' I0 D0 @7 Y
* y5 M; o2 Z e- C: y' I AUXR |= 0x04; //T2为1T模式, k* }! h9 x+ E: w
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
( O% A' v. ~9 d3 o1 F9 z T2H = (65536 - (FOSC/4/BAUD))>>8;
$ c6 |9 u/ f& x* [% E2 U5 s AUXR |= 0x10; //启动定时器22 W7 u/ M* M F3 k0 A& i- w4 B: U
! f7 }, N( U3 v b ES = 1; //允许串口1中断8 E$ |3 @0 u& P0 g
IE2 |= 0x01; //允许串口2中断 9 Y# z; i2 y- P. s) d3 l
, Q- T- I% h# \( _4 E. t. h. Y
}
' ^: ~/ T/ O4 [1 l8 Hvoid 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)( R* l0 T1 h& E8 f6 ]
{
" C D9 v( O) ^# o S2BUF = dat; //写数据到数据寄存器
' B; Z) N0 Z0 L; R) G- p while(!(S2CON&S2TI)); //停止位没有发送时,S2TI为0,一直等待8 B5 ?' ]( S! B# b4 `: `& ]) S+ G. B
S2CON &= ~S2TI; //清除S2TI! u5 V7 k$ R1 x
8 ^& e3 e: E2 p, w6 a7 f" Q}
3 ]8 Z$ F: h! N2 \ |