QuakeGod
2024-11-25 9aed5d7e7b3c7bf09da712e9c272ece401a7acc9
提交 | 用户 | 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 }