提交 | 用户 | age
|
5dd1b7
|
1 |
#include "STC15F2K60S2.H" |
Q |
2 |
|
|
3 |
void UartInit(void) //115200bps@22.1184MHz |
|
4 |
{ |
|
5 |
SCON = 0x50; //8位数据,可变波特率 |
|
6 |
AUXR |= 0x40; //定时器时钟1T模式 |
|
7 |
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器 |
|
8 |
TMOD &= 0x0F; //设置定时器模式 |
|
9 |
TL1 = 0xD0; //设置定时初始值 |
|
10 |
TH1 = 0xFF; //设置定时初始值 |
|
11 |
ET1 = 0; //禁止定时器中断 |
|
12 |
TR1 = 1; //定时器1开始计时 |
|
13 |
} |
|
14 |
|
|
15 |
|
|
16 |
void UART1_Isr() interrupt 4 |
|
17 |
{ |
|
18 |
if(TI) //若传输中断标志'TI'被设置,即发送缓冲区为空且发送寄存器可以接收新数据 |
|
19 |
{ |
|
20 |
TI = 0; //'TI'被清零,准备发送下一个字节 |
|
21 |
if(sendPosi < sendCount) //若发送位置小于发送计数 |
|
22 |
{ |
|
23 |
sendPosi++; |
|
24 |
//ACC = sendBuf[sendPosi]; |
|
25 |
//TB8 = P; |
|
26 |
SBUF = sendBuf[sendPosi]; //串口发送缓存寄存器'SBUF'被写入,以进行发送 |
|
27 |
} |
|
28 |
else |
|
29 |
{ |
|
30 |
// b485Send = 0; |
|
31 |
receCount = 0; |
|
32 |
checkoutError = 0; |
|
33 |
} |
|
34 |
} |
|
35 |
else if(RI) //若接收中断标志'RI'被设置,即接收寄存器收到新数据 |
|
36 |
{ |
|
37 |
RI = 0; |
|
38 |
|
|
39 |
receBuf[receCount] = SBUF; //接收寄存器 SBUF 的值存储到接收缓冲区 receBuf[receCount] 中 |
|
40 |
|
|
41 |
receCount++; |
|
42 |
//receCount &= 0x1f; |
|
43 |
|
|
44 |
} |
|
45 |
} |