📄 main.lst
字号:
C51 COMPILER V7.10 MAIN 04/20/2007 12:45:23 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN MAIN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MAIN.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 IO 口模拟232通讯程序
3
4 使用两种方式的C程序 占用定时器0
5
6 **********************************************/
7 #include <reg51.h>
8 #include <string.h>
9 #define byte unsigned char
10
11
12 #define GPGLL 0
13 #define GPGSA 1
14 #define GPRMC 2
15 #define GPZDA 3
16 #define GPVTG 4
17 #define GPGGA 5
18
19
20 pdata byte pData[200];
21 sbit BT_SND =P3^1;
22 sbit BT_REC =P3^0;
23
24
25 byte RxFlag=0;
26 byte RecTimeOut=0;
27 byte RecStatus=0;
28 byte RxCount=0;
29 //byte g_GPS; //GPS数据状态.
30
31 extern void putch(byte ch);
32 #define F_TM F0
33
34 #define TIMER0_ENABLE TL0=TH0; TR0=1;
35 #define TIMER0_DISABLE TR0=0;
36
37 sbit ACC0= ACC^0;
38 sbit ACC1= ACC^1;
39 sbit ACC2= ACC^2;
40 sbit ACC3= ACC^3;
41 sbit ACC4= ACC^4;
42 sbit ACC5= ACC^5;
43 sbit ACC6= ACC^6;
44 sbit ACC7= ACC^7;
45
46 //用IO模拟串口收,发数据占用定时器0
47 void IntTimer0() interrupt 1
48 {
49 1 F_TM=1;
50 1 }
51
52 //模拟串口,发送一个字符
53 void PSendChar(unsigned char inch)
54 {
55 1 ACC=inch;
C51 COMPILER V7.10 MAIN 04/20/2007 12:45:23 PAGE 2
56 1 F_TM=0;
57 1 BT_SND=0; //start bit
58 1 TIMER0_ENABLE; //启动
59 1 while(!F_TM);
60 1
61 1 BT_SND=ACC0; //先送出低位
62 1 F_TM=0;
63 1 while(!F_TM);
64 1
65 1 BT_SND=ACC1;
66 1 F_TM=0;
67 1 while(!F_TM);
68 1
69 1 BT_SND=ACC2;
70 1 F_TM=0;
71 1 while(!F_TM);
72 1
73 1 BT_SND=ACC3;
74 1 F_TM=0;
75 1 while(!F_TM);
76 1
77 1 BT_SND=ACC4;
78 1 F_TM=0;
79 1 while(!F_TM);
80 1
81 1 BT_SND=ACC5;
82 1 F_TM=0;
83 1 while(!F_TM);
84 1
85 1 BT_SND=ACC6;
86 1 F_TM=0;
87 1 while(!F_TM);
88 1
89 1 BT_SND=ACC7;
90 1 F_TM=0;
91 1 while(!F_TM);
92 1
93 1 BT_SND=1;
94 1 F_TM=0;
95 1 while(!F_TM);
96 1 TIMER0_DISABLE; //停止timer
97 1
98 1 }
99
100
101
102
103 //模拟串口,接收一个字符
104 unsigned char PGetChar()
105 {
106 1
107 1 TIMER0_ENABLE;
108 1 F_TM=0;
109 1 while(!F_TM); //等过起始位
110 1 ACC0=BT_REC;
111 1
112 1 TL0=TH0;
113 1
114 1 F_TM=0;
115 1 while(!F_TM);
116 1 ACC1=BT_REC;
117 1
C51 COMPILER V7.10 MAIN 04/20/2007 12:45:23 PAGE 3
118 1 F_TM=0;
119 1 while(!F_TM);
120 1 ACC2=BT_REC;
121 1
122 1 F_TM=0;
123 1 while(!F_TM);
124 1 ACC3=BT_REC;
125 1
126 1 F_TM=0;
127 1 while(!F_TM);
128 1 ACC4=BT_REC;
129 1
130 1 F_TM=0;
131 1 while(!F_TM);
132 1 ACC5=BT_REC;
133 1
134 1 F_TM=0;
135 1 while(!F_TM);
136 1 ACC6=BT_REC;
137 1
138 1 F_TM=0;
139 1 while(!F_TM);
140 1 ACC7=BT_REC;
141 1
142 1 F_TM=0;
143 1
144 1 while(!F_TM)
145 1 {
146 2 if(BT_REC)
147 2 {
148 3 break;
149 3 }
150 2 }
151 1 TIMER0_DISABLE; //停止timer
152 1 return ACC;
153 1
154 1
155 1 }
156
157
158 //发送字符串
159 unsigned char send_str(unsigned char *str)
160 {
161 1 unsigned char i;
162 1 i=0;
163 1 while( str[i] != 0 ){
164 2 PSendChar(str[i]);
165 2 i++;
166 2 }
167 1
168 1 return(0);
169 1 }
170
171
172 // 发送AT指令. (返回接收到的数据长度.)
173
174 unsigned char SendAT(unsigned char *command,unsigned char *ACK)
175 {
176 1 unsigned char i=0;
177 1 unsigned long m;
178 1
179 1 if(strlen(command) > 0){
C51 COMPILER V7.10 MAIN 04/20/2007 12:45:23 PAGE 4
180 2 if( strlen(command) < 2) return(0); // AT 命令格式错
181 2 while(command[i] != 0){
182 3
183 3 if( command[i] == '\n' )
184 3 {
185 4 command[i] = 0; // Remove the existing line terminating character (if any)
186 4 break;
187 4 }
188 3 if( command[i] == '\r' ) {
189 4 command[i] = 0; // Remove the existing line terminating character (if any)
190 4 break;
191 4 }
192 3 i++;
193 3 }
194 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -