📄 serial.lst
字号:
C51 COMPILER V7.08 SERIAL 04/10/2007 14:09:20 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE SERIAL
OBJECT MODULE PLACED IN serial.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE serial.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "my51.h"
2
3 extern void delay_s(unsigned char);
4
5 bit timeout;
6 unsigned char tcount;
7 unsigned char bflw;
8
9 void timer0_init()
10 {
11 1 timer0_mode_autoreload;
12 1 TH0 = 0;
13 1 TL0 = 0;
14 1 timer0_stop;
15 1 }
16
17 void timer0() interrupt int_timer2
18 {
19 1 TF0 = 0;
20 1 TL0 = 0xf0;
21 1 TH0 = 0x58;
22 1 if (tcount < 150)
23 1 tcount++;
24 1 else
25 1 timeout = 1;
26 1 }
27
28
29
30 void serial_int() interrupt int_serial
31 {
32 1 if (RI){
33 2 RI = 0;
34 2 bflw = SBUF;
35 2 }
36 1 }
37
38 void serial_init()
39 {
40 1 serial_baud_9600;
41 1 serial_uart_8;
42 1 serial_receive_enable;
43 1 }
44
45 bit s_in(unsigned char xdata *pbuf)
46 {
47 1 timeout = 0;
48 1 tcount = 0;
49 1 timer0_run;
50 1 while(1){
51 2 if (RI){
52 3 *pbuf = SBUF;
53 3 RI = 0;
54 3 break;
55 3 }
C51 COMPILER V7.08 SERIAL 04/10/2007 14:09:20 PAGE 2
56 2 else{
57 3 if (timeout)
58 3 break;
59 3 }
60 2 }
61 1 timer0_stop;
62 1 return timeout;
63 1 }
64
65 void s_out(unsigned char ndata)
66 {
67 1 TI = 0;
68 1 timeout = 0;
69 1 tcount = 0;
70 1 timer0_run;
71 1 SBUF = ndata;
72 1 while(TI == 0){
73 2 if (timeout)
74 2 break;
75 2 }
76 1 timer0_stop;
77 1 }
78
79
80
81 //发送指令到PC
82 void serial_data_to_main(unsigned char xdata *pcmd, unsigned char nlen)
83 {
84 1 unsigned char i;
85 1 unsigned char xdata tmp;
86 1 for (i = 0; i < nlen; i++, pcmd++){
87 2 s_out(*pcmd);
88 2 if (s_in(&tmp))
89 2 return;
90 2 if (tmp != *pcmd)
91 2 return;
92 2 }
93 1 }
94
95 //返回:接收数据长度
96 unsigned char serial_data_from_main(unsigned char xdata *pcmd)
97 {
98 1 unsigned char i, cmdid;
99 1 unsigned char xdata tmp;
100 1 while(1){ //接收数据头0xff,0x00
101 2 if (s_in(&tmp))
102 2 return 0xff;
103 2 if (tmp != 0xff)
104 2 continue;
105 2 in_1:
106 2 s_out(tmp);
107 2 if (s_in(&tmp))
108 2 return 0xff;
109 2 if (tmp == 0xff)
110 2 goto in_1;
111 2 if (tmp != 0x00)
112 2 continue;
113 2 s_out(tmp);
114 2 break;
115 2 }
116 1 if (s_in(&tmp)) //接受命令ID
117 1 return 0xff;
C51 COMPILER V7.08 SERIAL 04/10/2007 14:09:20 PAGE 3
118 1 s_out(tmp);
119 1 cmdid = tmp;
120 1 if (s_in(&tmp)) //接受数据长度
121 1 return 0xff;
122 1 s_out(tmp);
123 1 for (i = 0; i < tmp; i++){
124 2 if (s_in(pcmd))
125 2 return 0xff;
126 2 s_out(*pcmd);
127 2 pcmd++;
128 2 }
129 1 return cmdid;
130 1 }
131
132
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 299 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 2
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
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 + -