📄 serial.lst
字号:
C51 COMPILER V8.05a SERIAL 11/09/2008 23:18:21 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE serial.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include "typedef.h"
3 #include "ExtDef.h"
4
5 #define LenTxBuf 2000
6 #define LenRxBuf 50
7 #define MaxLenStr 100
8 #define TABNum 8
9
10 uchar xdata TxBuf[LenTxBuf],RxBuf[LenRxBuf]; // buffer entities,缓冲区实体
11 uchar xdata *inTxBuf,*outTxBuf,*inRxBuf,*outRxBuf; // buffer pointers,缓冲区指针
12 uchar TIflag;
13 uchar RIflag;
14
15
16 void InitSerialBuffer(void)
17 {
18 1 inTxBuf = TxBuf;
19 1 outTxBuf = TxBuf;
20 1 inRxBuf = RxBuf;
21 1 outRxBuf = RxBuf+LenRxBuf-1;
22 1 }
23
24 void InitSerial(unsigned char BaudRate)
25 {
26 1 unsigned char THTL;
27 1 switch (BaudRate)
28 1 {
29 2 case 1: THTL = 64; break; //波特率300
30 2 case 2: THTL = 160; break; //600
31 2 case 3: THTL = 208; break; //1200
32 2 case 4: THTL = 232; break; //2400
33 2 case 5: THTL = 244; break; //4800
34 2 case 6: THTL = 250; break; //9600
35 2 case 7: THTL = 253; break; //19200
36 2 case 8: THTL = 255; break; //57600
37 2 default: THTL = 208;
38 2 }
39 1 /* SCON = 0x52; set TI to 1, this is important for printf();if SCON=0x50,printf() function doesn't work!*
-/
40 1 SCON = 0x52; //串口方式1,允许接收 ; SM0|SM1|SM2|REN|TB8|RB8|TI|RI ,
41 1 // SM0|SM1 used to define work mode; 00:Mode0(SPI);
42 1 // 01:Mode1,8bit URAT(T1 Band Generator);
43 1 // 10:Mode2,9bit URAT(Bandrate fsoc/64,fsoc/32;
44 1 // 11:Mode3,9bit URAT(T1 Bandrate Generator);
45 1 // SM2=1:multi machines communication;
46 1 // REN=1: Receive enable;
47 1 // TB8: the TX nineth bit; RB8: the RX nineth bit
48 1 TMOD = 0x20; //定时器1定时方式2; Gate | C/T | M1 | M0 | Gate | C/T | M1 | M0
49 1 // Gate:external start/stop control , controlled by P3.2(INT0) or P3.3(INT1)
50 1 // C/T: =0:internal timer ; =1:external counter;
51 1 // M1|M0: 00: 13bits counter/timer;
52 1 // 01: 16bits counter/timer;
53 1 // 10: auto reload 8bits counter/timer;
54 1 // 11: only fits to T0;two 8bits counter/timer;
C51 COMPILER V8.05a SERIAL 11/09/2008 23:18:21 PAGE 2
55 1 TCON = 0x00;
56 1 TH1 = THTL;
57 1 TL1 = THTL;
58 1 PCON = 0x80; //波特率加倍控制,SMOD位
59 1 ES = 1; // enable URAT interrupt.
60 1 TR1 = 1; //启动定时器
61 1 }
62
63
64 void PrintChar(uchar ch)
65 {
66 1 uchar *t;
67 1 t=inTxBuf; t++;
68 1 if(t==TxBuf+LenTxBuf)
69 1 t=TxBuf; //Rotate pointer
70 1 if(t==outTxBuf)
71 1 return; //Tx Buffer is full
72 1 *inTxBuf = ch;
73 1 inTxBuf = t;
*** WARNING C259 IN LINE 73 OF SERIAL.C: '=': pointer: different mspace
74 1 if(TIflag)
75 1 {
76 2 TIflag = 0;
77 2 TI=1;
78 2 }
79 1 }
80
81 void PrintStr(uchar *str)
82 {
83 1 uchar i;
84 1 uchar j;
85 1 uchar ch;
86 1 for(i=0;i<MaxLenStr;i++)
87 1 {
88 2 ch=*(str+i);
89 2 if(ch=='\0')
90 2 break;
91 2 else
92 2 if(ch=='\n')
93 2 {
94 3 PrintChar(10);
95 3 PrintChar(13);
96 3 }
97 2 else
98 2 if(ch=='\t')
99 2 {
100 3 for(j=0;j<TABNum;j++)
101 3 PrintChar(' ');
102 3 }
103 2 else
104 2 PrintChar(ch);
105 2 }
106 1 }
107
108 void clrscr()
109 {
110 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");
111 1 }
112
113 void serial()
114 {
115 1 uchar *t;
C51 COMPILER V8.05a SERIAL 11/09/2008 23:18:21 PAGE 3
116 1 if(TI)
117 1 {
118 2 TI=0;
119 2 if(inTxBuf==outTxBuf)
120 2 {
121 3 TIflag=1;
122 3 return;
123 3 } // Tx buffer is empty.
124 2 SBUF = *outTxBuf;
125 2 outTxBuf++;
126 2 if(outTxBuf==TxBuf+LenTxBuf)
127 2 outTxBuf=TxBuf;
128 2 }
129 1 if(RI)
130 1 {
131 2 RI=0;
132 2 if(!RIflag)
133 2 RIflag=1;
134 2 t=inRxBuf;
135 2 t++;
136 2 if(t==RxBuf+LenRxBuf) t=RxBuf;
137 2 if(t==outRxBuf) return; // Rx buffer is full.
138 2 *inRxBuf=SBUF;
139 2 inRxBuf=t;
140 2 }
141 1 }
142
143 void URAT_ISR() interrupt 4
144 {
145 1 serial();
146 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 531 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = 2050 ----
PDATA SIZE = ---- ----
DATA SIZE = 13 9
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -