EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
目标:通过串口助手发送数据后,单片机回传+1。0 d. `) ]' F4 Y3 P4 b9 q- s" T$ b
现象:没有进入中断服务函数" V* j2 d' [/ G$ d) I
void Uart_Init(void)0 T7 w1 M" t% _9 y! q! }2 ^% b
{
) ?4 W0 t; k J$ r9 ~: n% z P_SW1 &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0 (P3.0/RxD2, P3.1/TxD2)
) w6 r& }! _! { P_SW2 &= ~S2_S0; //S2_S0=0 (P1.0/RxD2, P1.1/TxD2)
1 y b9 T6 Q( o! X; J8 f- o //串口1配置
* c4 o2 N2 r3 V$ y PCON &= 0x3f; //串口1波特率不倍频- V% i* \! m3 ^+ D3 D
SCON = 0x50; //8位数据,可变波特率3 v) s! l! |; j! g" g7 J; U
AUXR |= 0x01; //选择定时器2为串口1的波特率发生器3 l4 @$ u7 ?8 D p' k- Y$ X
: n7 _: x2 _" [9 V; {& u //串口2配置
* L! Z9 Y0 s+ h5 u S2CON = 0x50; //8位数据,可变波特率,串口2只能选择定时器2作为波特率发生器
8 A4 S% F+ _, f $ a( r- f) B2 h( n
AUXR |= 0x04; //T2为1T模式' [/ L% m+ j7 k5 v% k3 g6 K4 W
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
0 i* @; G5 t3 U5 K2 w }/ |; G T2H = (65536 - (FOSC/4/BAUD))>>8;2 Y8 ~, x2 }2 E. m' | P; \
AUXR |= 0x10; //启动定时器2
% a9 {, E$ S1 h9 D/ ~
/ j% p0 P8 I6 O ES = 1; //允许串口1中断) A: k9 ? K: d, t' b- ?
IE2 |= 0x01; //允许串口2中断 * V. f- C; [9 W
# ]+ g' w& J0 o% Z+ E}5 }: R" Z, E0 K" a/ {/ T2 P; a
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)% Z' `! W7 d; t
{# \: C, ?! D" m7 {3 ], r& K9 _. r8 A
S2BUF = dat; //写数据到数据寄存器) C. K& L8 N! J! Q. F- H1 L
while(!(S2CON&S2TI)); //停止位没有发送时,S2TI为0,一直等待
2 @- b1 I- ?$ r6 o2 k# n* A S2CON &= ~S2TI; //清除S2TI
. Z3 L% ~, M0 \3 o4 U) |
$ J v9 v: J: e, g" i/ T1 K3 o}
. Z! o0 g1 ? N! |/ ]' C3 a |