📄 main.lst
字号:
C51 COMPILER V8.01 MAIN 12/13/2008 17:52:30 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND CODE SYMBOLS
line level source
1 /*---------------------------------
2 记住调整ID时键盘发的码和PELCO有点相同,程序要加识别处理的
3
4 -----------------------------------*/
5 /*-----------------------------------------------
6
7 明景的键盘PELCO-P球机ID为实际球机ID少1,程序要进行处理
8 PELCO-D上下两代码颠倒了,UP为000 DOWN 为00108 与公布的相反
9 ------------------------------------------------*/
10 #include <general.h> //定义外部的函数
11 struct structSwitchStatus
12 {
13 unsigned char id;
14 unsigned char protocol;
15 unsigned char rxdBaud;
16 unsigned char cameraBaud;
17 unsigned char cameraType;
18 };
19 volatile unsigned char programFlyOff;
20 volatile unsigned char flagTxd;
21 volatile unsigned long comTxd;
22 volatile unsigned char countTxd;
23 volatile unsigned char bdata bflag; //通用位变量
24 sbit bflag_0=bflag^0; sbit bflag_1=bflag^1; sbit bflag_2=bflag^2;
25 sbit bflag_3=bflag^3; sbit bflag_4=bflag^4; sbit bflag_5=bflag^5;
26 sbit bflag_6=bflag^6;sbit bflag_7=bflag^7;
27 volatile unsigned char cProtocol;
28 volatile unsigned char id;
29 volatile unsigned char cameraType; //通用位变量
30 unsigned char idata sKeyCode[20]={""}; //目前只用一组来表示,并且为0值 接收键盘码用
31 volatile unsigned char idata cKeyCodeReceiveState; //初值处于无串口码接收到状态有值用1表示
32 volatile unsigned char idata cKeyCodeReceive;
33 volatile unsigned char idata *pKeyCode;
34 struct structSwitchStatus GetSwitchStatus();
35 volatile struct structSwitchStatus struSwitchTemp;
36 void TxdString(unsigned long com);
37 void main()
38 {
39 1
40 1 volatile unsigned int x;
41 1 volatile unsigned long y;
42 1
43 1
44 1 ERRor:
45 1 WdtCls();
46 1 GlobalSet();
47 1 IntDisable();
48 1 T0Stop();
49 1 T1Stop();
50 1 T2Stop();
51 1 IntSet();
52 1 TimerSet();
53 1 SciSet();
54 1 IntEnable();
55 1 for(x=0;y<0xffff;x++)
C51 COMPILER V8.01 MAIN 12/13/2008 17:52:30 PAGE 2
56 1 WdtCls();
57 1 flagTxd=0xee; //初始化发送器状态变量
58 1 countTxd=0;
59 1 T1Start(); //默认的发送
60 1 if(programFlyOff)
61 1 {
62 2 TxdBaud9600();
63 2 programFlyOff=1;
64 2 TxdString(0); //接口传递
65 2 }
66 1 struSwitchTemp=GetSwitchStatus();
67 1 switch(struSwitchTemp.rxdBaud)
68 1 {
69 2 case 0: TxdBaud2400();break;
70 2 case 1: TxdBaud9600();break;
71 2 case 2: TxdBaud4800();break;
72 2 case 3: TxdBaud19200();break;
73 2 }
74 1 switch(struSwitchTemp.cameraBaud)
75 1 {
76 2 case 0: RxdBaud2400();break;
77 2 case 1: RxdBaud9600();break;
78 2 case 2: RxdBaud4800();break;
79 2 case 3: RxdBaud19200();break;
80 2 }
81 1 T2Start();
82 1 id=struSwitchTemp.id;
83 1 cProtocol=struSwitchTemp.protocol;
84 1 cameraType=struSwitchTemp.cameraType;
85 1 cKeyCodeReceiveState=0; //复位接收状态
86 1 pKeyCode=sKeyCode; //接收码清零程序
87 1 for(x=0;x<20;x++) //预设20个字符
88 1 {
89 2 *pKeyCode =0;
90 2 ++pKeyCode ;
91 2 }
92 1 pKeyCode=sKeyCode; //重新指向代码
93 1
94 1
95 1 switch(cProtocol) //与说明手册上控制位一致
96 1
97 1 {
98 2 default: goto ERRor;
99 2
100 2 case PELCOD:
101 2 while(1)
102 2 {
103 3
104 3 WdtCls();
105 3 if(PELCOD!=cProtocol) // 利用协议出错处理
106 3 goto ERRor;
107 3 if(!cKeyCodeReceiveState) continue;
108 3
109 3 if(0xff!=cKeyCodeReceive)
110 3 {
111 4 cKeyCodeReceiveState=0;
112 4 continue; //首码错则结束 进 入 循 环
113 4 }
114 3
115 3 cKeyCodeReceiveState=0;
116 3 while(!cKeyCodeReceiveState)
117 3 {
C51 COMPILER V8.01 MAIN 12/13/2008 17:52:30 PAGE 3
118 4 WdtCls();
119 4
120 4 }
121 3
122 3
123 3 if( cKeyCodeReceive!=id) //说明是正确的键盘码转入处理程序
124 3
125 3 { //不是本球机的接收码ID不正确或者是一误码都必须会结束
126 4 cKeyCodeReceiveState=0;
127 4 continue; //处理并且清除接收标志
128 4 }
129 3
130 3
131 3
132 3 x=2;
133 3 pKeyCode=sKeyCode;
134 3 *pKeyCode=0xff; //起始同步码
135 3
136 3 ++pKeyCode;
137 3 *pKeyCode=id; //ID码
138 3
139 3 cKeyCodeReceiveState=0;//已取走第2个码
140 3 do
141 3 {
142 4 // x=x+*pKeyCode ; //从第二个开始累加校验
143 4 while(!cKeyCodeReceiveState) //读码等待
144 4 {
145 5 _nop_();
146 5 }
147 4 ++pKeyCode;
148 4 *pKeyCode=cKeyCodeReceive;
149 4
150 4 cKeyCodeReceiveState=0; //取走键盘码
151 4 ++x;
152 4 }while(x!=7); //读码结束标志
153 3
154 3
155 3 if( sKeyCode[3]==0x55) continue;
156 3 y= (sKeyCode[2]<<24)+(sKeyCode[3]<<16)+(sKeyCode[4]<<8)+sKeyCode[5];
157 3 //构造一译码关键字
158 3 WdtCls();
159 3
160 3
161 3
162 3
163 3
164 3
165 3
166 3 } //end case while rotate
167 2 break; //finish case
168 2
169 2 case SUMSUNG: //三星协议
170 2
171 2 while(1)
172 2 {
173 3
174 3 WdtCls();
175 3 if(SUMSUNG!=cProtocol) // 利用协议出错处理
176 3 goto ERRor;
177 3 if(!cKeyCodeReceiveState) continue;
178 3
179 3 if(0xa0!=cKeyCodeReceive)
C51 COMPILER V8.01 MAIN 12/13/2008 17:52:30 PAGE 4
180 3 {
181 4 cKeyCodeReceiveState=0;
182 4 continue; //首码错则结束 进 入 循 环
183 4 }
184 3
185 3 cKeyCodeReceiveState=0;
186 3 while(!cKeyCodeReceiveState)
187 3 {
188 4 WdtCls();
189 4
190 4 }
191 3 cKeyCodeReceiveState=0;
192 3 while(!cKeyCodeReceiveState)
193 3 {
194 4 WdtCls();
195 4
196 4 }
197 3
198 3
199 3
200 3 if( cKeyCodeReceive!=id) //说明是正确的键盘码转入处理程序
201 3
202 3 { //不是本球机的接收码ID不正确或者是一误码都必须会结束
203 4 cKeyCodeReceiveState=0;
204 4 continue; //处理并且清除接收标志
205 4 }
206 3
207 3
208 3
209 3 x=3;
210 3 pKeyCode=sKeyCode;
211 3 *pKeyCode=0xa0; //起始同步码
212 3
213 3 ++pKeyCode; //跳过发送地址
214 3 ++pKeyCode;
215 3 *pKeyCode=id; //ID码
216 3
217 3 cKeyCodeReceiveState=0;//已取走第3个码
218 3 do
219 3 {
220 4 // x=x+*pKeyCode ; //从第二个开始累加校验
221 4 while(!cKeyCodeReceiveState) //读码等待
222 4 {
223 5 _nop_();
224 5 }
225 4 ++pKeyCode;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -