📄 serial.lst
字号:
C51 COMPILER V7.50 SERIAL 08/22/2008 20:40:12 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE serial.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>//Note:It must be added.必须在serial.c之前
2 #include <serial.h>
3
4
5 unsigned char TxBuf[LenTxBuf],RxBuf[LenRxBuf];//收发缓冲区实体
6 unsigned char *inTxBuf,*outTxBuf,*inRxBuf,*outRxBuf;//收发缓冲区读写指针
7 bit TIflag=1;//Note:It must be 1.
8
9 void InitSerial() //串口初始化
10 {
11 1 TMOD=TMOD&0x0F;
12 1 TMOD=TMOD|0x20;
13 1 //TL1=0xFD,TH1=0xFD;//9600 , 11.5200MHz
14 1 TL1=0xFE,TH1=0xFE;//9600 , 11.5200MHz
15 1 SCON=0x50;PCON=0x00;
16 1 TR1=1;
17 1 }
18
19 void InitSerialBuffer(void) //串口缓冲区初始化
20 {
21 1 inTxBuf=TxBuf;outTxBuf=TxBuf;
22 1 inRxBuf=RxBuf;outRxBuf=RxBuf;
23 1 ES=1;
24 1 //EA=1;
25 1 }
26
27 void serial(void) interrupt 4
28 { //中断在汇编中实现,去掉interrupt 4{//串口中断服务子程序
29 1 unsigned char *t;
30 1
31 1 if(TI){
32 2 TI=0;
33 2 if(inTxBuf==outTxBuf) {TIflag=1;return;}//TxBuf Empty
34 2 SBUF=*outTxBuf; outTxBuf++;
35 2 if(outTxBuf==TxBuf+LenTxBuf) outTxBuf=TxBuf;
36 2 }
37 1 if(RI){
38 2 RI=0;
39 2 t=inRxBuf;t++;
40 2 if(t==RxBuf+LenRxBuf) t=RxBuf;
41 2 if(t==outRxBuf) return; //RxBuf Full
42 2 *inRxBuf=SBUF;
43 2 inRxBuf=t;
44 2 }
45 1 }
46
47 bit yygetch(unsigned char *ch) //从串口缓冲区读1字节数据
48 {
49 1 //ES=0;
50 1 if(inRxBuf==outRxBuf) {ES=1;return 0;} //RxBuf Empty
51 1 *ch=*outRxBuf; outRxBuf++;
52 1 if(outRxBuf==RxBuf+LenRxBuf) outRxBuf=RxBuf;
53 1 //ES=1;
54 1 return 1;
55 1 }
C51 COMPILER V7.50 SERIAL 08/22/2008 20:40:12 PAGE 2
56
57 void PrintChar(unsigned char ch)//显示字符
58 {
59 1 unsigned char *t;
60 1
61 1 //ES=0;
62 1 if(TIflag){
63 2 TIflag=0;
64 2 TI=1;
65 2 }
66 1 t=inTxBuf;t++;
67 1 if(t==TxBuf+LenTxBuf) t=TxBuf;
68 1 if(t==outTxBuf) {/*ES=1;*/return;} //TxBuf Full
69 1 *inTxBuf=ch;
70 1 inTxBuf=t;
71 1 //ES=1;
72 1 }
73
74 void PrintCh(unsigned char ch) //内部使用,不建议用户看到。
75 {
76 1 if(ch>=0&&ch<=9) ch=ch+'0';
77 1 else ch=ch+'A'-10;
78 1 PrintChar(ch);
79 1 }
80
81 void insidePrintByte(unsigned char Byte) //内部使用,以十六进制格式显示1个字节数据
82 {
83 1 unsigned char c;
84 1 c=Byte;
85 1 c=c>>4;
86 1 PrintCh(c);
87 1 c=Byte;c=c&0x0F;PrintCh(c);
88 1 }
89
90 void PrintByte(unsigned char Byte) //以十六进制格式显示1个字节数据
91 {
92 1 EA=0;
93 1 insidePrintByte(Byte);
94 1 EA=1;
95 1 }
96
97 void insidePrintWord(unsigned int Word) //内部使用,以十六进制格式显示1个字数据
98 {
99 1 insidePrintByte(Word>>8);
100 1 insidePrintByte(Word&0xFF);
101 1 }
102
103 void PrintWord(unsigned int Word) //以十六进制格式显示1个字数据
104 {
105 1 EA=0;
106 1 insidePrintWord(Word);
107 1 EA=1;
108 1 }
109
110 void PrintLong(unsigned long LongWord) //以十六进制格式显示1个长字数据
111 {
112 1 EA=0;
113 1 insidePrintWord(LongWord>>16);
114 1 insidePrintWord(LongWord&0xFFFF);
115 1 EA=1;
116 1 }
117
C51 COMPILER V7.50 SERIAL 08/22/2008 20:40:12 PAGE 3
118 void PrintStr(unsigned char *str)//显示字符串
119 {
120 1 int i;
121 1 unsigned char j;
122 1 unsigned char ch;
123 1
124 1 EA=0;
125 1 for(i=0;i<MaxLenStr;i++){
126 2 ch=*(str+i);
127 2 if(ch=='\0') break;
128 2 else if(ch=='\n'){PrintChar(10);PrintChar(13);}
129 2 else if(ch=='\t'){
130 3 for(j=0;j<TABNum;j++)
131 3 PrintChar(' ');
132 3 }
133 2 else PrintChar(ch);
134 2 }
135 1 EA=1;
136 1 }
137
138 void clrscr() //清屏
139 {
140 1 PrintStr("\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个回车换行清屏幕。
141 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 946 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = 612 17
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 + -