?? serialtest.lst
字號:
C51 COMPILER V7.07 SERIALTEST 05/20/2004 14:52:29 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE SERIALTEST
OBJECT MODULE PLACED IN serialtest.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE serialtest.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "reg52.h"
2 #define LenTxBuf 16
3 #define LenRxBuf 16
4 #define MaxLenStr 40
5 #define TABNum 4
6
7 unsigned char TxBuf[16],RxBuf[16];//收發緩沖區實體
8 unsigned char *inTxBuf,*outTxBuf,*inRxBuf,*outRxBuf;//收發緩沖區讀寫指針
9 bit TIflag=1;//Note:It must be 1.
10 /*
11 void InitSerial()//串口初始化
12 {
13 TMOD=TMOD&0x0F;
14 TMOD=TMOD|0x20;
15 TL1=0xF3,TH1=0xF3;//19200 , 22.1184MHz //4800 ,12, 0xf9 //2400 ,12,0xf3
16 SCON=0x50;PCON=0x00;
17 TR1=1;
18 }
19 */
20
21 void init_comm()
22 {
23 1 RCAP2H=0XFF;
24 1 RCAP2L=0XDC; //;ffb2 12m, 4800
25 1 // ;ffb8 11.0592 4800; ffdch 11.0592 9600
26 1
27 1
28 1 SCON=0x50;
29 1 T2CON=T2CON|0X30;
30 1 TR2=1;
31 1
32 1 }
33 /************************************************
34 串口緩沖區初始化
35 ************************************************/
36 void InitSerialBuffer(void)
37 {
38 1 inTxBuf=TxBuf;outTxBuf=TxBuf;
39 1 inRxBuf=RxBuf;outRxBuf=RxBuf;
40 1 EA=1;ES=1;
41 1 }
42
43 void serial(void) interrupt 4{//串口中斷服務子程序
44 1 unsigned char *t;
45 1 //發送時處理的是TxBuf緩沖區的outTxBuf指針
46 1 if(TI){
47 2 TI=0;
48 2 if(outTxBuf==inTxBuf) {TIflag=1;return;}//TxBuf Empty
49 2 SBUF=*outTxBuf; outTxBuf++;
50 2 if(outTxBuf==TxBuf+LenTxBuf) outTxBuf=TxBuf;
51 2 }
52 1 //接收時處理的是RxBuf緩沖區的inRxBuf指針
53 1 if(RI){
54 2 RI=0;
55 2 t=inRxBuf;t++;
C51 COMPILER V7.07 SERIALTEST 05/20/2004 14:52:29 PAGE 2
56 2 if(t==RxBuf+LenRxBuf) t=RxBuf;
57 2 if(t==outRxBuf) return; //RxBuf Full
58 2 *inRxBuf=SBUF;
59 2 inRxBuf=t;
60 2 }
61 1 }
62 /************************************************
63 從串口接收緩沖區讀1字節數據
64 ************************************************/
65 bit getchar(unsigned char *ch)
66 {
67 1 ES=0;
68 1 if(outRxBuf==inRxBuf) {ES=1;return 0;} //RxBuf Empty
69 1 *ch=*outRxBuf; outRxBuf++;
70 1 if(outRxBuf==RxBuf+LenRxBuf) outRxBuf=RxBuf;
71 1 ES=1;
72 1 return 1;
73 1 }
74 /************************************************
75 顯示字符
76 ************************************************/
77 void PrintChar(unsigned char ch)
78 {
79 1 unsigned char *t;
80 1
81 1 ES=0;
82 1 if(TIflag){
83 2 TIflag=0;
84 2 TI=1;
85 2 }
86 1 t=inTxBuf;t++;
87 1 if(t==TxBuf+LenTxBuf) t=TxBuf;
88 1 if(t==outTxBuf) {ES=1;return;} //TxBuf Full
89 1 *inTxBuf=ch;
90 1 inTxBuf=t;
91 1 ES=1;
92 1 }
93
94 void PrintCh(unsigned char ch)//內部使用,不建議用戶看到。
95 {
96 1 if(ch>=0&&ch<=9) ch=ch+'0';
97 1 else if(ch>=10&&ch<=15) ch=ch+'A'-10;
98 1 PrintChar(ch);
99 1 }
100
101 void PrintByte(unsigned char Byte)//以十六進制格式顯示1個字節數據
102 {
103 1 unsigned char c;
104 1 c=Byte;
105 1 c=c>>4;PrintCh(c);
106 1 c=Byte;c=c&0x0F;PrintCh(c);
107 1 }
108
109 void PrintWord(unsigned int Word)//以十六進制格式顯示1個字數據
110 {
111 1 PrintByte(Word>>8);
112 1 PrintByte(Word&0xFF);
113 1 }
114
115 void PrintLong(unsigned long LongWord)//以十六進制格式顯示1個長字數據
116 {
117 1 PrintWord(LongWord>>16);
C51 COMPILER V7.07 SERIALTEST 05/20/2004 14:52:29 PAGE 3
118 1 PrintWord(LongWord&0xFFFF);
119 1 }
120
121 void PrintStr(unsigned char *str)//顯示字符串
122 {
123 1 int i;
124 1 unsigned char j;
125 1 unsigned char ch;
126 1 for(i=0;i<MaxLenStr;i++){
127 2 ch=*(str+i);
128 2 if(ch=='\0') break;
129 2 else if(ch=='\n'){PrintChar(10);PrintChar(13);}
130 2 else if(ch=='\t'){
131 3 for(j=0;j<TABNum;j++)
132 3 PrintChar(' ');
133 3 }
134 2 else PrintChar(ch);
135 2 }
136 1 }
137
138 void clrscr()//清屏
139 {
140 1 int i;
141 1 for(i=0;i<25;i++)
142 1 PrintStr("\n");
143 1 }
144
145 main()
146 { unsigned char *var="I am Guo Zhixue",*var2="test! test! test!";
147 1 init_comm();
148 1
149 1 InitSerialBuffer();
150 1
151 1 while(1)
152 1 {
153 2 PrintStr(var);
154 2 PrintStr(var2);
155 2 }
156 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 715 ----
CONSTANT SIZE = 36 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 44 25
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 + -