📄 serial.lst
字号:
C51 COMPILER V7.50 SERIAL 04/11/2006 17:04:55 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.OBJ
COMPILER INVOKED BY: D:\Keil C\C51\BIN\C51.EXE serial.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 *********************************************************************************************************
3 * uC/OS-II
4 * 实时内核
5 *
6 * (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
7 * 版权所有
8 *
9 * 8051处理器代码
10 * KEIL C51大模式编译
11 *
12 * 文件名 : SERIAL.C
13 * 功能:基于中断的串口驱动及显示程序
14 *********************************************************************************************************
15 */
16
17 //**********************************************************************************
18 //波特率计算公式:
19 // TH1=256-(2^SMOD/32*Fosc/12*1/Baud)
20 // 其中:SMOD=0,1;Fosc=晶体或晶振频率;Bound=波特率
21 // 本例中,SMOD=0;Fosc=22.1184*10E6;Bound=19200bps,所以TH1=0xFD
22 //Baud rate(@22.1184Mhz)
23 //300(52);1200(D5);2400(EA);4800(F5);9600(FB);19200(FD);38400(FF);
24 //**********************************************************************************
25
26 #ifndef OS_MASTER_FILE
27 #include "includes.h"
28 #endif
29
30 #include <serial.h>
31
32 unsigned char TxBuf[LenTxBuf],RxBuf[LenRxBuf]; //收发缓冲区
33 unsigned int inTxBuf,outTxBuf,inRxBuf,outRxBuf; //收发缓冲区读写指针
34 bit TIflag=1;
35
36 void InitSerial() reentrant //串口初始化
37 {
38 1 TMOD=TMOD&0x0F;
39 1 TMOD=TMOD|0x20;
40 1 TH1=0xFD; //19200bps@22.1184MHz
41 1 SCON=0x50;PCON=0x00;
42 1 TR1=1;
43 1 }
44
45 void InitSerialBuffer(void) reentrant//串口缓冲区初始化
46 {
47 1 inTxBuf=outTxBuf=0;
48 1 inRxBuf=outRxBuf=0;
49 1 ES=1;
50 1 }
51
52 void serial(void) reentrant
53 { //注:中断服务程序在汇编中实现
54 1 if(TI){
55 2 TI=0;
C51 COMPILER V7.50 SERIAL 04/11/2006 17:04:55 PAGE 2
56 2 if(inTxBuf==outTxBuf){
57 3 TIflag=1;
58 3 return;
59 3 } //TxBuf已空
60 2 SBUF=TxBuf[outTxBuf]; outTxBuf=(outTxBuf+1)%LenTxBuf;
61 2 }
62 1 if(RI){
63 2 RI=0;
64 2 inRxBuf=(inRxBuf+1)%LenTxBuf;
65 2 if(inRxBuf==outRxBuf)
66 2 return; //RxBuf已满
67 2 RxBuf[inRxBuf]=SBUF;
68 2 }
69 1 }
70
71 void PrintChar(unsigned char ch) reentrant//显示字符
72 {
73 1 if(TIflag){
74 2 TIflag=0;
75 2 TI=1;
76 2 }
77 1 inTxBuf=(inTxBuf+1)%LenTxBuf;
78 1 if(inTxBuf==outTxBuf)
79 1 return; //TxBuf已满
80 1 TxBuf[inTxBuf]=ch;
81 1 }
82
83 void PrintStr(unsigned char *str) reentrant//显示字符串
84 {
85 1 int i;
86 1 unsigned char ch;
87 1
88 1 OS_ENTER_CRITICAL();
89 1 for(i=0;i<MaxLenStr;i++){
90 2 ch=*(str+i);
91 2 if(ch=='\0')
92 2 break;
93 2 else if(ch=='\n'){
94 3 PrintChar('\n');
95 3 PrintChar('\r');
96 3 }
97 2 else
98 2 PrintChar(ch);
99 2 }
100 1 OS_EXIT_CRITICAL();
101 1 }
102
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 402 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 2058 ----
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 + -