📄 keil00.lst
字号:
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE KEIL00
OBJECT MODULE PLACED IN keil00.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE keil00.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*********************************************************
2 2007.4.03
3 **********************************************************
4 A3986步进驱动控制板硬件定义
5 P00~~~P07--------方位I1~~~I8 P11---出牌计数
6 P10---有无牌检测 P12---LED灯 P14---出牌电机
7 P13---传动电机 P32---RS485cs P33---传感器电源控制
8 P34---按键 P36---A3986_Vref P35---A3986时钟输入
9 P37---转动方向 P23---A3986_EN P23---A3986_EN
10 P21---A3986_SR(衰减有效) P24.P25---A3986_PFD1.PFD2(衰减选择)
11 P22---A3986_RST P24.P25---A3986_MS1.MS2(细分选择)
12 ***************************************************************
13 计数传感器有牌为H.无牌为L----有牌检测传感器有牌为L.无牌为H
14 ***************************************************************
15 通信协议:前导码RB+接收编号+发送编号+命令+参数1+参数2+结束码0D
16 编号:A---A仓板 B---B1板 C---B2板 M---主板
17 命令号:0x01---发牌 0x20---接收出错
18 0x02---过渡轮转 0x21---收到命令
19 0x03---过渡轮停 0x22---执行完毕
20 0x04---清牌 0x23---状态返回
21 0x07---状态查询 0x24---少牌报警
22 0x25---卡牌报警
23 *********************************************************/
24 #include <stdio.h>
25 #include <AT89x52.h>
26 #include <absacc.h>
27 #include <intrins.h>
28
29 #define Back_OPTO P1_0 /*左有无牌 */
30 #define Count_OPTO P1_1 /*出牌计数*/
31 #define LED P1_2
32 #define Back_motor P1_3 /*传动电机2*/
33 #define Front_motor P1_4 /*出牌电机2*/
34 #define TEST P1_5
35 #define R485cs P3_2
36 #define OPTOV P3_3 /*传感器电源控制端*/
37 #define KEY P3_4
38 #define Step P3_5 /*脉冲*/
39 #define ConVref P3_6 /*功率控制*/
40 #define DIR P3_7 /*方向控制*/
41 #define A3986_SR P2_1 //A3986
42 #define A3986_RST P2_2 //A3986
43 #define A3986_EN P2_3 //A3986
44 #define A3986_PFD1 P2_4 //A3986
45 #define A3986_PFD2 P2_5 //A3986
46 #define A3986_MS1 P2_6 //A3986
47 #define A3986_MS2 P2_7 //A3986
48 #define azimuth P0 /*方位*/
49
50 void Init(void); /*初始化*/
51 void Rs232int(void); /*串口中断*/
52 void Receive(void); /*串口接收*/
53 void Transmit(void); /*串口发射*/
54 void Delay50ms(void); /*延时50ms*/
55 void OutCard(void); /*发牌子程序*/
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 2
56 void StateB(void); /*B状态查询*/
57 void BboxState(void); /*Bbox状态查询*/
58 void Test1(void); /*测试程序*/
59 void Test2(void); /*测试程序*/
60 void Turn(void); /*转动程序*/
61 void Riffle1(void); /*A洗牌程序*/
62 void Out1(void); /*A出牌程序*/
63 void ShaoCar(void); /*少牌处理*/
64 void TXok(void); /*任务发出及反馈处理*/
65 void ClrCard(void); /*清牌程序*/
66 void OUTremnantCard(void); /*发底牌子程序*/
67
68 /************************************************************************
69 TX[8]---发送数组 ReceivePack[8]---接收数组
70 BoxNO----当前接牌盒编号变量 Azidata----出牌口方位变量
71 Box1data----牌盒1内牌数变量 Box2data---牌盒2内牌数变量
72 Box3data----牌盒3内牌数变量 Box4data---牌盒4内牌数变量
73 Card_data----每次发牌数变量 Count0-----临时变量
74 AllCard,Mandata,SingleCard,RemnantCard---总牌数,人数,每人牌数,底牌数
75 State----工作状态变量(0-闲、1-忙、2-任务完成、3-错误1、4-错误2、5-错误3)
76 *************************************************************************/
77 unsigned char TX[8]={'R','B',0x0,'A',0x0,0x0,0x0,0x0D};
78 unsigned char ReceivePack[10];
79 unsigned char Card_data,BoxNO,Box1data,Box2data,Box3data,Box4data,CarBak;
80 unsigned char AllCard,Mandata,SingleCard,RemnantCard,RemnantBox,firstOUT;
81 unsigned char Place,Command,ErrorNO,State,Count0,Count1,Count2; //Busy,
82
83 bit ShaoCardBit,RxdOKBit,OutBit,BboxErr,PanErr,OUTmodeBit,ClrBit;
84 /*ShaoCardBit:少牌标志 RxdOKbit:接收OK*/
85 /*SingleCard,Place--位置变量*/
86 unsigned char bdata Wupaidata;
87 sbit Wupai1=Wupaidata^0;
88 sbit Wupai2=Wupaidata^1;
89 sbit Wupai3=Wupaidata^2;
90 sbit Wupai4=Wupaidata^3;
91
92 void main(void)
93 {
94 1 _nop_();
95 1 _nop_();
96 1 _nop_();
97 1 _nop_();
98 1 _nop_();
99 1 _nop_();
100 1 _nop_();
101 1 _nop_();
102 1 _nop_();
103 1 LED=0; //*正常进入程序,亮LED灯0.2'*/
104 1 Delay50ms();
105 1 Delay50ms();
106 1 LED=1;
107 1 ConVref=0; /*步进电机小功率*/
108 1
109 1 Init(); /*初始化*/
110 1
111 1 while(!A3986_SR)
112 1 {
113 2 Test1();
114 2 } /*TEST测试有效,进入测试程序*/
115 1
116 1 DIR=0; /*顺时针转动定位*/
117 1 A3986_EN=0;
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 3
118 1 Delay50ms();
119 1 ConVref=1; /*步进电机大功率*/
120 1 while(azimuth==0xff)
121 1 {
122 2 for(Count0=0;Count0<255;Count0++)
123 2 {
124 3 _nop_();
125 3 _nop_();
126 3 }
127 2 Step=!Step;
128 2 }
129 1 ConVref=0; /*小功率*/
130 1 switch(azimuth)
131 1 {
132 2 case 0x7f: Place=1; break; /*当前接牌盒位置判断*/
133 2 case 0xef: Place=2; break; /*Place--位置变量*/
134 2 case 0xbf: Place=3; break; //
135 2 case 0xdf: Place=4; break; //
136 2 default: break;
137 2 }
138 1 if(!KEY)
139 1 {
140 2 while(1) /*测试有效进入测试程序*/
141 2 {
142 3 Test2();
143 3 }
144 2 }
145 1 ClrBit=0;
146 1 State=0;
147 1 ErrorNO=0;
148 1 TR2=1;
149 1 while(1)
150 1 {
151 2 if(ErrorNO)
152 2 {
153 3 TX[2]='M';
154 3 TX[4]=0x55;
155 3 TX[5]=ErrorNO;
156 3 Transmit();
157 3 ErrorNO=0;
158 3 Command=0;
159 3 }
160 2 //if(Command==0x11||Command==0x12||Command==0x13||Command==0x14||Command==0x04||Command==0x07)
161 2 if(ClrBit)
162 2 Command=0x04;
163 2 if(Command)
164 2 { //TX[2]='M';
165 3 //TX[4]=0x21;
166 3 //TX[5]=Command;
167 3 //Transmit();
168 3 switch(Command)
169 3 {
170 4 case 0x11: Command=0;
171 4 AllCard=ReceivePack[5]; /*0x11--设置游戏参数*/
172 4 Mandata=ReceivePack[6];
173 4 SingleCard=ReceivePack[7];
174 4 RemnantCard=ReceivePack[8];
175 4 break;
176 4 case 0x12: State=Command; /*0x12--洗牌*/
177 4 Riffle1(); /*A类游戏洗牌*/
178 4 break;
179 4 case 0x13: State=Command; /*0x13--发牌*/
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 4
180 4 firstOUT=ReceivePack[6]; /*第一个出牌口(出牌盒)选择*/
181 4 Out1(); /*A类出牌*/
182 4 break;
183 4 case 0x14: State=Command; /*0x13--发底牌*/
184 4 Count0=ReceivePack[5]; /*0x13--底牌出口*/
185 4 OUTremnantCard();
186 4 break;
187 4 case 0x04: State=Command; /*0x13--清牌*/
188 4 ClrBit=0;
189 4 ClrCard();
190 4 break;
191 4 case 0x07: State=Command; /*0x13--有无牌检测*/
192 4 StateB();
193 4 break;
194 4 default: Command=0;
195 4 break;
196 4 }
197 3 if(!ClrBit&&State)
198 3 {
199 4 if(ErrorNO)
200 4 {
201 5 TX[2]='M'; /*返回错误类型*/
202 5 TX[4]=0x22; //TX[4]=0x55;
203 5 TX[5]=State; //TX[5]=0x13;
204 5 Transmit();
205 5 }
206 4 else /*执行完成后返回*/
207 4 {
208 5 TX[2]='M';
209 5 TX[4]=0x22;
210 5 TX[5]=State;
211 5 Transmit();
212 5 }
213 4 State=0;
214 4 Command=0;
215 4 }
216 3 }
217 2 }
218 1 }
219 /***********************************
220 *-------发底牌程序--------------*
221 ***********************************/
222 void OUTremnantCard(void)
223 {
224 1 unsigned char x;
225 1
226 1 BoxNO=Count0+2; /*底牌出口确定*/
227 1 if(BoxNO>4)
228 1 BoxNO=BoxNO-4;
229 1 if(0<BoxNO&&BoxNO<5)
230 1 {
231 2 Turn();
232 2 }
233 1 if(PanErr)
234 1 goto OUTremnantexit; /*转盘错误退出*/
235 1 TX[4]=1; /*无错B仓发牌*/
236 1 switch(RemnantBox)
237 1 {
238 2 case 1: TX[2]='B'; TX[5]=RemnantCard;TX[6]=0; break;
239 2 case 2: TX[2]='B'; TX[5]=0;TX[6]=RemnantCard; break;
240 2 case 3: TX[2]='C'; TX[5]=RemnantCard;TX[6]=0; break;
241 2 case 4: TX[2]='C'; TX[5]=0;TX[6]=RemnantCard; break;
C51 COMPILER V7.10 KEIL00 09/13/2007 23:16:12 PAGE 5
242 2 default: break;
243 2 }
244 1 Transmit();
245 1 TXok();
246 1 if(ErrorNO)
247 1 goto OUTremnantexit;
248 1 Command=0;
249 1 x=0;
250 1 while(Command==0) /*等待B仓返回信息*/
251 1 {
252 2 Delay50ms();
253 2 if(x>50)
254 2 {
255 3 break;
256 3 }
257 2 x++;
258 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -