EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
目标:通过串口助手发送数据后,单片机回传+1。
, Y2 |9 {3 e l$ ?4 q' X现象:没有进入中断服务函数" W, O" o8 Y8 s m( p+ p h
void Uart_Init(void)
% X4 h% V4 D6 c{. e9 Y4 q$ } S) c9 x! Y
P_SW1 &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0 (P3.0/RxD2, P3.1/TxD2)
E p/ f5 X3 Y P_SW2 &= ~S2_S0; //S2_S0=0 (P1.0/RxD2, P1.1/TxD2)6 m w) n* k/ S8 v. p0 g) W
//串口1配置
8 ]8 l: {3 V. N# [% p6 g% { PCON &= 0x3f; //串口1波特率不倍频
& J6 d/ `( ^; F1 v5 Z o SCON = 0x50; //8位数据,可变波特率' B. r& y/ c) J' g
AUXR |= 0x01; //选择定时器2为串口1的波特率发生器! G; d# Q9 q# }9 H, }( @
8 M) _. h4 _6 ]/ L( r& y //串口2配置
2 d9 w$ k6 R7 C- a& k, I1 Y. b4 N S2CON = 0x50; //8位数据,可变波特率,串口2只能选择定时器2作为波特率发生器9 ^9 r3 e6 j& z2 |! h" o3 o, | l
: w5 b/ x7 D0 j; ?
AUXR |= 0x04; //T2为1T模式
' x( Z( w+ j1 Y. L( \: X8 `5 n9 z# c T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
/ \% q& f. j" F3 b* W T2H = (65536 - (FOSC/4/BAUD))>>8;
. [/ V* X3 @: Z9 z. y/ r AUXR |= 0x10; //启动定时器24 h7 y9 q. s+ q7 o
2 k0 {/ x2 c/ @' G! | ES = 1; //允许串口1中断
2 ?- {0 L8 G4 K7 k) t& r) K IE2 |= 0x01; //允许串口2中断 ' s) t: i9 Z, g5 b/ L
+ H% V/ t* ~! `}" ~7 g( g/ c, n6 i# ?! V% P1 Z
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): x) E( y J/ I, B, P& ?: s
{
- d: P1 E1 C( s) P2 m S2BUF = dat; //写数据到数据寄存器
4 \$ S% B% h0 H while(!(S2CON&S2TI)); //停止位没有发送时,S2TI为0,一直等待
) M; P2 a5 @1 m' Z S2CON &= ~S2TI; //清除S2TI
6 }) ^' f, C+ e
! k0 {! G, B' j}
: t) v" E- n' Z2 ]# | |