📄 hand_serial_all.lst
字号:
C51 COMPILER V7.02a HAND_SERIAL_ALL 07/08/2003 15:36:23 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE HAND_SERIAL_ALL
OBJECT MODULE PLACED IN hand_serial_all.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE hand_serial_all.c LARGE OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND TABS(2)
stmt level source
1
2 #include "hand_serial_all_h.h"
3
4 BYTE code hex_[]={"0123456789ABCDEF"};
5
6 //串口0全局变量
7 type_of_ring_buffer send_buff_com_0;
8 type_of_ring_buffer recv_buff_com_0;
9 xdata BYTE send_buff_com_0_array[SERIAL_BUFF_LEN];
10 xdata BYTE recv_buff_com_0_array[SERIAL_BUFF_LEN];
11 bit send_idle_com_0;
12
13 //串口1全局变量
14 type_of_ring_buffer send_buff_com_1;
15 type_of_ring_buffer recv_buff_com_1;
16 xdata BYTE send_buff_com_1_array[SERIAL_BUFF_LEN];
17 xdata BYTE recv_buff_com_1_array[SERIAL_BUFF_LEN];
18 bit send_idle_com_1;
19
20 idata BYTE Count10ms; //延迟10ms的变量
21
22
23 //ring_buff begin:
24 void init_ring_buffer(type_of_ring_buffer *ring_buffer, BYTE data_buffer_len,BYTE *data_buff_array)
25 {
26 1
27 1 ring_buffer->ring_buffer_len = data_buffer_len;
28 1 ring_buffer->read_index = 0;
29 1 ring_buffer->write_index = 0;
30 1 ring_buffer->empty=1;
31 1 ring_buffer->buffer_ptr =data_buff_array;
32 1 }
33
34 BYTE get_char_from_buff(type_of_ring_buffer *ring_buffer)
35 {
36 1 BYTE t_data;
37 1 t_data=ring_buffer->buffer_ptr[ring_buffer->read_index];
38 1 ring_buffer->buffer_ptr[ring_buffer->read_index++]=0;//读完后清空
39 1 ring_buffer->read_index = ring_buffer->read_index%ring_buffer->ring_buffer_len;
40 1 if(ring_buffer->read_index==ring_buffer->write_index)
41 1 ring_buffer->empty=1;
42 1 else ring_buffer->empty=0;
43 1 return(t_data);
44 1 }
45
46 void put_char_to_buff(type_of_ring_buffer *ring_buffer,BYTE t_data)
47 {
48 1 ring_buffer->buffer_ptr[ring_buffer->write_index++] = t_data;
49 1 ring_buffer->write_index = ring_buffer->write_index%ring_buffer->ring_buffer_len;
50 1 if(ring_buffer->read_index==ring_buffer->write_index)
51 1 ring_buffer->empty=1;
52 1 else ring_buffer->empty=0;
53 1
54 1 }
55
C51 COMPILER V7.02a HAND_SERIAL_ALL 07/08/2003 15:36:23 PAGE 2
56 //ring buff end.
57
58
59
60 /*串口初始化a
61 fosc=40MHZ; SMOD=0时 (256-11)=9600,(256-22)=4800,(256-43)=2400,(256-87)=1200*/
62 void serial_init(void)
63 {
64 1 //初始化串口变量
65 1 init_ring_buffer(&send_buff_com_0,SERIAL_BUFF_LEN,send_buff_com_0_array);
66 1 init_ring_buffer(&recv_buff_com_0,SERIAL_BUFF_LEN,recv_buff_com_0_array);
67 1
68 1 init_ring_buffer(&send_buff_com_1,SERIAL_BUFF_LEN,send_buff_com_1_array);
69 1 init_ring_buffer(&recv_buff_com_1,SERIAL_BUFF_LEN,recv_buff_com_1_array);
70 1
71 1
72 1
73 1 //串口0,1用定时器1作为波特率发生器
74 1 TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload
75 1 TH1 = BAUD_TIMER; // set Timer1 reload value for baudrate
76 1 TR1 = 1; // start Timer1
77 1
78 1 PCON |= 0x80; // SMOD00 = 1
79 1 PCON |= 0x10; // SMOD01 = 1
80 1
81 1 /*
82 1
83 1 T2CON = 0x30; //串口0用定时器2
84 1 TH2 =(65536-BAUD_TIMER2)/256; //波特率
85 1 TL2 =(65536-BAUD_TIMER2)%256;
86 1 RCAP2H=(65536-BAUD_TIMER2)/256;
87 1 RCAP2L=(65536-BAUD_TIMER2)%256;
88 1 TR2=1;
89 1
90 1 T4CON = 0x30; //串口1用定时器4
91 1 TH4 =(65536-BAUD_TIMER4)/256; //波特率
92 1 TL4 =(65536-BAUD_TIMER4)%256;
93 1 RCAP4H=(65536-BAUD_TIMER4)/256;
94 1 RCAP4L=(65536-BAUD_TIMER4)%256;
95 1 TR4_ON;
96 1 */
97 1 SCON0 = 0x50; // SCON0: mode 1, 8-bit UART, enable RX
98 1 TI0 = 1; // Indicate TX0 ready
99 1 ES0=1;
100 1 send_idle_com_0=1;
101 1
102 1 //串口1
103 1 SCON1=0x50;
104 1 TI1_ON;
105 1 ES1_ON;
106 1 send_idle_com_1=1;
107 1
108 1
109 1 }
110
111 //*****************************************
112 //串口0中断处理
113 serial0() interrupt 4 using 1
114 {
115 1 BYTE idata t_data;
116 1 if (TI0 )
117 1 {
C51 COMPILER V7.02a HAND_SERIAL_ALL 07/08/2003 15:36:23 PAGE 3
118 2 TI0 = 0;
119 2 if (!send_buff_com_0.empty)
120 2 {
121 3 // SBUF=get_char_from_buff(&send_buff_com_0);
122 3 SBUF0=send_buff_com_0.buffer_ptr[send_buff_com_0.read_index++];
123 3 send_buff_com_0.read_index = send_buff_com_0.read_index%send_buff_com_0.ring_buffer_len;
124 3 if(send_buff_com_0.read_index==send_buff_com_0.write_index)
125 3 send_buff_com_0.empty=1;
126 3 else send_buff_com_0.empty=0;
127 3 }
128 2 else send_idle_com_0=1;
129 2 }
130 1 if (RI0)
131 1 {
132 2 RI0 = 0;
133 2 t_data = SBUF0;
134 2 // put_char_to_buff(&recv_buff_com_0,t_data);
135 2 recv_buff_com_0.buffer_ptr[recv_buff_com_0.write_index++] = t_data;
136 2 recv_buff_com_0.write_index = recv_buff_com_0.write_index%recv_buff_com_0.ring_buffer_len;
137 2 if(recv_buff_com_0.read_index==recv_buff_com_0.write_index)
138 2 recv_buff_com_0.empty=1;
139 2 else recv_buff_com_0.empty=0;
140 2
141 2 }
142 1 }
143
144 //串口1中断处理
145 serial1() interrupt 20 using 1
146 {
147 1 BYTE idata t_data;
148 1 if (TI1 )
149 1 {
150 2 TI1_OFF;
151 2 if (!send_buff_com_1.empty)
152 2 {
153 3 SBUF1=send_buff_com_1.buffer_ptr[send_buff_com_1.read_index++];
154 3 send_buff_com_1.read_index = send_buff_com_1.read_index%send_buff_com_1.ring_buffer_len;
155 3 if(send_buff_com_1.read_index==send_buff_com_1.write_index)
156 3 send_buff_com_1.empty=1;
157 3 else send_buff_com_1.empty=0;
158 3 }
159 2 else
160 2 send_idle_com_1=1;
161 2 }
162 1 if(RI1)
163 1 {
164 2 RI1_OFF;
165 2 t_data = SBUF1;
166 2 recv_buff_com_1.buffer_ptr[recv_buff_com_1.write_index++] = t_data;
167 2 recv_buff_com_1.write_index = recv_buff_com_1.write_index%recv_buff_com_1.ring_buffer_len;
168 2 if(recv_buff_com_1.read_index==recv_buff_com_1.write_index)
169 2 recv_buff_com_1.empty=1;
170 2 else recv_buff_com_1.empty=0;
171 2 }
172 1 }
173
174 BYTE if_empty_com_0(void)
175 {
176 1 return(recv_buff_com_0.empty);
177 1 }
178
179 BYTE if_empty_com_1(void)
C51 COMPILER V7.02a HAND_SERIAL_ALL 07/08/2003 15:36:23 PAGE 4
180 {
181 1 return(recv_buff_com_1.empty);
182 1 }
183
184
185 void putbyte_com_0(char c)
186 {
187 1 ES0=0;
188 1 // put_char_to_buff(&send_buff_com_0,c);
189 1 send_buff_com_0.buffer_ptr[send_buff_com_0.write_index++] = c;
190 1 send_buff_com_0.write_index = send_buff_com_0.write_index%send_buff_com_0.ring_buffer_len;
191 1 if(send_buff_com_0.read_index==send_buff_com_0.write_index)
192 1 send_buff_com_0.empty=1;
193 1 else send_buff_com_0.empty=0;
194 1
195 1 if(send_idle_com_0==1)
196 1 {
197 2 TI0=1;
198 2 send_idle_com_0=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -