📄 serial.lst
字号:
C51 COMPILER V8.02 SERIAL 07/09/2008 11:10:59 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN .\temp\Serial.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\common\serial\Serial.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\temp\Seri
-al.lst) OBJECT(.\temp\Serial.obj)
line level source
1 /*
2 *****************************************************************************************
3 * 电赛
4 *
5 * 基于中断的串口驱动及显示程序
6 *
7 * (c) Copyright 2007, yyw, hbut
8 * All Rights Reserved
9 *
10 * V1.00
11 *
12 * File : Serial.c
13 * By :
14 *****************************************************************************************
15 */
16
17 //**********************************************************************************
18 // 程序特点:
19 // 1.基于中断,可并发执行
20 // 2.参数可配置(收发缓冲区大小,最大字符串长度,TAB键移动距离)
21 //**********************************************************************************
22 // 使用方法:(此范例自包含,独立于其他程序。)
23 // 先配制收发缓冲区大小等可变参数(在serial.h中的宏定义)
24 // 1.初始化串口 InitSerial();
25 // 2.初始化串口缓冲区 InitSerialBuffer();
26 // 3.使用显示字节,字,长字,字符,字符串,清屏函数。
27 //
28 //**********************************************************************************
29 // 波特率计算公式:
30 // TH1=256-(2^SMOD/32*Fosc/12*1/Bound)
31 // 其中:SMOD=0,1;Fosc=晶体或晶振频率;Bound=波特率
32 // 几个经典值
33 //
34 //
35 //**********************************************************************************
36
37 #include "common.h"
38
39 uint8 SerialOutData[MAX_OUT_SIZE]; //收发缓冲区实体
40 uint8 SerialInData[MAX_IN_SIZE];
41 uint8 *OutRear,*OutFront,*InRear,*InFront; //收发缓冲区读写指针
42 bit SerialCanSend=1; //Note:It must be 1.
43
44 void SerialInit() reentrant//串口初始化
45 {
46 1 SCON = 0x50;
47 1 PCON = 0x80;
48 1 TMOD = TMOD & 0x0f;
49 1 TMOD = TMOD | 0x20;
50 1 TH1 = 0xff; // 晶振22.1184,波特率115200bps
51 1 TL1 = 0xff;
52 1 TR1 = 1;
53 1 ES = 1;
54 1 EA = 1;
C51 COMPILER V8.02 SERIAL 07/09/2008 11:10:59 PAGE 2
55 1 }
56
57 // 串口缓冲区初始化
58 void SerialBufferInit(void) reentrant
59 {
60 1 OutRear=SerialOutData;
61 1 OutFront=SerialOutData;
62 1 InRear=SerialInData;
63 1 InFront=SerialInData;
64 1 }
65
66 // 串口中断处理
67 void SerialInt(void) reentrant interrupt 4
68 {
69 1 uint8 *t;
70 1
71 1 if (TI)
72 1 {
73 2 TI=0;
74 2 if(OutRear==OutFront) {SerialCanSend=1;return;}//SerialOutData Empty
75 2 SBUF=*OutFront; OutFront++;
76 2 if(OutFront==SerialOutData+MAX_OUT_SIZE) OutFront=SerialOutData;
77 2 }
78 1 if (RI)
79 1 {
80 2 RI=0;
81 2 t=InRear;t++;
82 2 if(t==SerialInData+MAX_IN_SIZE) t=SerialInData;
83 2 if(t==InFront) return; //SerialInData Full
84 2 *InRear=SBUF;
85 2 InRear=t;
86 2 }
87 1 }
88
89 // 从串口缓冲区读1字节数据
90 uint8 SerialGetChar(uint8 *ch) reentrant
91 {
92 1 // ES=0;
93 1 if(InRear==InFront)
94 1 {
95 2 ES=1;
96 2 return 0; //SerialInData Empty
97 2 }
98 1 *ch=*InFront;
99 1 InFront++;
100 1 if(InFront==SerialInData+MAX_IN_SIZE)
101 1 InFront=SerialInData;
102 1 // ES=1;
103 1 return 1;
104 1 }
105
106 void SerialPrintChar(uint8 ch) reentrant //显示字符
107 {
108 1 uint8 *t;
109 1
110 1 //ES=0;
111 1 if(SerialCanSend)
112 1 {
113 2 SerialCanSend=0;
114 2 TI=1;
115 2 }
116 1 t=OutRear;t++;
C51 COMPILER V8.02 SERIAL 07/09/2008 11:10:59 PAGE 3
117 1 if(t==SerialOutData+MAX_OUT_SIZE)
118 1 t=SerialOutData;
119 1 if(t==OutFront)
120 1 {/*ES=1;*/return;} //SerialOutData Full
121 1 *OutRear=ch;
122 1 OutRear=t;
123 1 //ES=1;
124 1 }
125
126 void PrintCh(uint8 ch) reentrant //内部使用,不建议用户看到。
127 {
128 1 if(ch>=0&&ch<=9) ch=ch+'0';
129 1 else ch=ch+'A'-10;
130 1 SerialPrintChar(ch);
131 1 }
132
133 void SerialPrintStr(uint8 *str) reentrant//显示字符串
134 {
135 1 EA=0;
136 1 while (*str)
137 1 {
138 2 SerialPrintChar(*str);
139 2 str++;
140 2 }
141 1 EA=1;
142 1 }
143
144 void SerialClear() reentrant //清屏
145 {
146 1 SerialPrintStr("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");//25个回车换行清屏幕。
147 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 960 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = 60 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -