📄 ioserial.lst
字号:
C51 COMPILER V7.20 IOSERIAL 02/20/2006 10:14:05 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE IOSERIAL
OBJECT MODULE PLACED IN .\output\ioserial.obj
COMPILER INVOKED BY: D:\keil c51 v7.09\C51\BIN\C51.EXE ioserial.c BROWSE DEBUG OBJECTEXTEND PRINT(.\list\ioserial.lst) O
-BJECT(.\output\ioserial.obj)
line level source
1 #ifndef _IO_SERIAL_C_
2 #define _IO_SERIAL_C_
3
4 #include "ioserial.h"
5 #include "serial.h"
6
7 EMULATE_UART data giocomm;
8 static bit rcvBit;
9
10 #define TIME_HALF_BAUDTO_9600_TH2 0xff
11 #define TIME_HALF_BAUDTO_9600_TL2 0xa0
12
13 void Extern_Interrupt(void) interrupt EXTERN0_INTERRUPT_VECTOR
14 {
15 1 /* EMULATE_START_HALF_TIMER;*/
16 1 TH2 = TIME_HALF_BAUDTO_9600_TH2;
17 1 TL2 = TIME_HALF_BAUDTO_9600_TL2;
18 1
19 1 /*start timer*/
20 1 EMULATE_START_BAUD;
21 1
22 1 /*stop extern interrupt,only startbit enable interrupt.*/
23 1 EMULATE_STOP_EXT;
24 1 }
25
26 void Time1_Interrupt(void) interrupt TIME1_INTERRUPT_VECTOR using 1
27 {
28 1 EMULATE_CLEAR_PEND;
29 1
30 1 /*receive emulate UART*/
31 1 if( giocomm.status == EMULATE_RECEIVE )
32 1 {
33 2 rcvBit = RECV;
34 2
35 2 /*start bit*/
36 2 if( giocomm.bitCount == 0 )
37 2 {
38 3 giocomm.bitCount ++;
39 3 giocomm.bitTemp = 0;
40 3 return;
41 3 }
42 2
43 2 /*receive 8bits data*/
44 2 else if( giocomm.bitCount < 9 )
45 2 {
46 3 giocomm.bitCount ++;
47 3
48 3 if( rcvBit )
49 3 giocomm.bitTemp = (giocomm.bitTemp>>1) | 0x80;
50 3 else
51 3 giocomm.bitTemp >>= 1;
52 3
53 3 return;
54 3 }
C51 COMPILER V7.20 IOSERIAL 02/20/2006 10:14:05 PAGE 2
55 2
56 2 /*receive the ten bits*/
57 2 else if( giocomm.bitCount == 9 )
58 2 {
59 3 giocomm.bitCount ++;
60 3 return;
61 3 }
62 2
63 2 /*stop bit*/
64 2 else if( giocomm.bitCount == 10 )
65 2 {
66 3 /*stop timer and receive bit*/
67 3 EMULATE_STOP_BAUD;
68 3
69 3 /*use interrupt, check start bit.*/
70 3 EMULATE_START_EXT;
71 3
72 3 giocomm.bitCount = 0;
73 3 giocomm.byteTemp = giocomm.bitTemp;
74 3 if( rcvBit )
75 3 {
76 4 gIoSerial.ReceiceBuffer[gIoSerial.Iocounter ++] = giocomm.byteTemp;
77 4 gIoSerial.ReveiveOverTime = RECEIVE_TIME_START;
78 4
79 4 // emulateReceiveIsr( giocomm.byteTemp );
80 4 return;
81 4 }
82 3 else
83 3 {
84 4 emulateStartReceive();
85 4 return;
86 4 }
87 3 }
88 2 return;
89 2 }
90 1
91 1 /*send emulate UART */
92 1 if( giocomm.status == EMULATE_TRANSMIT )
93 1 {
94 2 if( giocomm.bitValid == 1 )
95 2 {
96 3 /*send the start bit,start bit is 1*/
97 3 if( giocomm.bitCount == 0 )
98 3 {
99 4 sendbit( LOW );
100 4 giocomm.bitCount ++;
101 4 }
102 3
103 3 /*send the eight bit data*/
104 3 else if( giocomm.bitCount < 9 )
105 3 {
106 4 sendbit( giocomm.bitTemp );
107 4 giocomm.bitTemp >>= 1;
108 4 giocomm.bitCount ++;
109 4 }
110 3
111 3 /*send the ten bit,is a verify but no use*/
112 3 else if(giocomm.bitCount == 9)
113 3 {
114 4 giocomm.bitCount ++;
115 4 sendbit( LOW );
116 4 }
C51 COMPILER V7.20 IOSERIAL 02/20/2006 10:14:05 PAGE 3
117 3
118 3 /*send the stop bit*/
119 3 else if(giocomm.bitCount == 10)
120 3 {
121 4 giocomm.bitCount ++;
122 4 giocomm.bitValid = 0;
123 4 sendbit( HIGH );
124 4 emulateTransmitIsr();
125 4 }
126 3 }
127 2 return;
128 2 }
129 1 }
130
131 void setEmulateTransmitByte(BYTE value)
132 {
133 1 giocomm.bitCount = 0;
134 1 giocomm.bitValid = 1;
135 1 giocomm.bitTemp = value;
136 1 return;
137 1 }
138
139
140 void emulateStopReceive(void)
141 {
142 1 DISABLE_INTERRUPT;
143 1
144 1 EMULATE_STOP_EXT;
145 1 EMULATE_STOP_BAUD;
146 1
147 1 ENABLE_INTERRUPT;
148 1 }
149
150
151
152 void emulateStartSend(void)
153 {
154 1 DISABLE_INTERRUPT;
155 1
156 1 giocomm.status = EMULATE_TRANSMIT;
157 1
158 1 giocomm.bitValid = 0;
159 1 emulateTransmitIsr(); /*get bit temp*/
160 1
161 1 EMULATE_STOP_EXT; /*disable extern interrupt*/
162 1 EMULATE_START_BAUD;
163 1
164 1 ENABLE_INTERRUPT;
165 1 }
166
167 void initIocomm( void )
168 {
169 1 IP = 0; /*clear all priority*/
170 1 EXT_IP = 1;
171 1 EXT_IE = 1;
172 1 EXT_EDGE = 1; /*down edge interrupt*/
173 1
174 1 TIMER_IP = 1; /*timer in high priority*/
175 1 TIMER_IE = 1; /*enable timer interrupt*/
176 1
177 1 T2CON = 0;
178 1 // T2MOD = 0;
C51 COMPILER V7.20 IOSERIAL 02/20/2006 10:14:05 PAGE 4
179 1 RCAP2H = EMULATE_TIMER/256;
180 1 RCAP2L = EMULATE_TIMER%256;
181 1
182 1 emulateStartReceive();
183 1 }
184
185
186 #endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 278 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
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 + -