📄 uart.lst
字号:
C51 COMPILER V6.23a UART 09/09/2007 15:51:26 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN uart.OBJ
COMPILER INVOKED BY: e:\my_soft\keil\C51\Bin\c51.exe uart.c DB OE SMALL ROM(LARGE)
stmt level source
1 //*************************************************************************
2 #include <reg52.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 #define OLEN 3 /* size of serial transmission buffer */
6 unsigned char idata outbuf[OLEN]; /* storage for transmission buffer */
7 unsigned char idata *outlast=outbuf; //最后由中断传输出去的字节位置
8 unsigned char idata *putlast=outbuf; //最后放入发送缓冲区的字节位置
9 #define ILEN 40 //* size of serial receiving buffer */
10 unsigned char idata inbuf[ILEN];
11 unsigned char idata *inlast=inbuf; //最后由中断进入接收缓冲区的字节位置
12 unsigned char idata *getlast=inbuf; //最后取走的字节位置
13 bit outbufsign0; //最后一个数据覵BUF发完标志 发完=0
14 bit outbufsign; //输出缓冲区非空标志 有=1
15 bit inbufsign; //接收缓冲区非空标志 有=1
16 bit inbufful; //输入缓冲区满标志 满=1
17 sbit SW=P3^2; //串口收发控
18 extern char data InKey;
19 extern bit OKFlag;
20 //*****************************
21 //放入一个字节到发送缓冲区
22 PutByte(char c)
23 { ES=0; //暂停串行中断,以免数据比较时出错?
24 1 while ( (((outlast-putlast)==2) && (outlast > putlast )) || ((outlast < putlast) && (OLEN-(putlast-ou
-tlast)==2)))
25 1 { ES=1;
26 2 c++;c--;
27 2 ES=0;
28 2 }
29 1 *putlast=c; //放字节进入缓冲区
30 1 putlast++; //发送缓冲区指针加一
31 1 if (putlast==outbuf+OLEN) putlast=outbuf; //指针到了顶部换到底部
32 1 if (!outbufsign0) {outbufsign=1;outbufsign0=1;TI=1; } //缓冲区开始为空置为有,启动发送
33 1 ES=1;
34 1 }
35 //*************************************
36 //从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。
37 uchar GetByte (void)
38 { char idata c ;
39 1 while (!inbufsign); //缓冲区空等待
40 1 ES=0;
41 1 c= *getlast; //取数据
42 1 getlast++; //最后取走的数据位置加一
43 1 inbufful=0; //输入缓冲区的满标志清零
44 1 if (getlast==inbuf+ILEN) getlast=inbuf; //地址到顶部回到底部
45 1 if (getlast==inlast) inbufsign=0; //地址相等置接收缓冲区空空标志,再取数前要检该标志
46 1 ES=1;
47 1 return (c); //取回数据
48 1 }
49 //*****************************************
50 //串口中断处理
51 Serial () interrupt 4
52 { if (TI )
53 1 { TI = 0;
54 2 if (outbufsign)
C51 COMPILER V6.23a UART 09/09/2007 15:51:26 PAGE 2
55 2 { SBUF=*outlast; //未发送完继续发送
56 3 outlast++; //最后传出去的字节位置加一
57 3 if (outlast==outbuf+OLEN) outlast=outbuf;//地址到顶部回到底部
58 3 if (putlast==outlast) outbufsign=0; //数据发送完置发送缓冲区空标志
59 3 }
60 2 else outbufsign0=0;
61 2 }
62 1 if (RI)
63 1 { RI = 0;
64 2 if(!inbufful)
65 2 { *inlast= SBUF; //放入数据
66 3 inlast++; //最后放入的位置加一
67 3 inbufsign=1;
68 3 if (inlast==inbuf+ILEN) inlast=inbuf;//地址到顶部回到底部
69 3 if (inlast==getlast) inbufful=1; //接收缓冲区满置满标志
70 3 }
71 2 }
72 1 }
73 //串口初始化 0xfd=19200,0xfa=9600,0xf4=4800,0xe8=2400,0xd0=1200,0xff=57600
74 SerialInit () {
75 1 SCON = 0x50; /* mode 1: 8-bit UART, enable receiver */
76 1 TMOD |= 0x20; /* timer 1 mode 2: 8-Bit reload */
77 1 PCON &= 0x7f;
78 1 TH1 = 0xe8;TL1=0xe8; //速率*2 /* reload value 115200 baud */
79 1 TR1 = 1; /* timer 1 run */
80 1 ES = 1; REN=1; EA=1;// SM2=1; //SM2=1时收到的第9位为1才置位RI标志
81 1 //P1_7=0;
82 1 }
83
84
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 238 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = 43 1
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -