📄 fm1702.lst
字号:
C51 COMPILER V7.50 FM1702 10/16/2007 16:33:32 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE FM1702
OBJECT MODULE PLACED IN FM1702.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE FM1702.c BROWSE DEBUG OBJECTEXTEND CODE
line level source
1 /****************************************************************************
2 * File : main.c *
3 * COPYRIGHT BY HUOYAN LTD.COMPANY *
4 * Version: V1.3 *
5 * *
6 * Created: 18.10.2005 *
7 * Last Change: 21.10.2005 *
8 * *
9 * Author: NIL *
10 * *
11 * Compiler: KEIL C51 V7.10 *
12 * *
13 * Description: AT89S52-Firmware for FM1702 Demo Serial Reader *
14 * *
15 ****************************************************************************/
16 #define __SRC
17 #include "main.h"
18 #undef __SRC
19
20 #include <string.h>
21 #include <stdio.h>
22 #include <absacc.h>
23 #include <intrins.h>
24
25 #include "sm5964.h"
26 #include "FM1702.h"
27
28
29 #define uchar unsigned char
30 #define uint unsigned int
31 //pin define mcu控制管脚定义
32
33
34
35 sbit RF_NSS = P1^4;
36 sbit RF_MISO = P1^3;
37 sbit RF_MOSI = P1^2;
38 sbit RF_SCK = P1^1;
39
40 sbit RF_RST = P3^5; //由高变低时启动内部复位程序
41
42 sbit CARD_LED = P3^3;
43 sbit SPEAKER = P3^4;
44
45 sbit LCD_CS = P2^4;
46 sbit LCD_RD = P2^5;
47 sbit LCD_WR = P2^6;
48 sbit LCD_DATA = P2^7;
49
50 //sfr P4 = 0xD8;
51 sbit key = P4^3;
52 // Release Number of the Firmware
53 //uchar code HY_Rel[] = "\n\r HUO YAN V1.3 21.Oct.05 \n\r";
54 // Module address
55 // uchar code addr[]="0xff";
C51 COMPILER V7.50 FM1702 10/16/2007 16:33:32 PAGE 2
56
57 ///////////////////////////////////////////////////////////////////////
58 // 主函数
59 ///////////////////////////////////////////////////////////////////////
60 void main(void)
61 { //设置变量
62 1 uchar baud;
63 1 if(!P2_0) //P2.0=0则进入ISP服务程序
64 1 {
65 2 SPEAKER = 0;
66 2 GoToIsp();
67 2 }
68 1
69 1 InitSystem(); //初始化系统
70 1 while (1)
71 1 {
72 2
73 2 //检查命令标志
74 2 if (CmdValid) //if LEVEL 1
75 2 {
76 3 CmdValid = FALSE;
77 3 if(RevBuffer[0]==11) //if LEVEL 2
78 3 {
79 4 RevBuffer[2]=RevBuffer[1];
80 4 RevBuffer[0]=1;
81 4 RevBuffer[1]=0;
82 4 CALL_isr_UART(); //equal to 'SETB TI', defined in main.h
83 4 SPEAKER=0; //开蜂鸣器和指示灯
84 4 CARD_LED=ON;
85 4 delay_10ms(RevBuffer[2]);
86 4 SPEAKER=1;
87 4 CARD_LED=OFF;
88 4 }
89 3 else if(RevBuffer[0]==13) //设置通讯波特率 //if LEVEL 2
90 3 {
91 4 switch(RevBuffer[1])
92 4 {
93 5 case 0:
94 5 baud=BAUD_9600;
95 5 break;
96 5 case 1:
97 5 baud=BAUD_14400;
98 5 break;
99 5 case 2:
100 5 baud=BAUD_19200;
101 5 break;
102 5 case 3:
103 5 baud=BAUD_28800;
104 5 break;
105 5 case 4:
106 5 baud=BAUD_38400;
107 5 break;
108 5 case 5:
109 5 baud=BAUD_57600;
110 5 break;
111 5 case 6:
112 5 baud=BAUD_115200;
113 5 break;
114 5 default:
115 5 baud=BAUD_19200;
116 5 break;
117 5 } //switch body
C51 COMPILER V7.50 FM1702 10/16/2007 16:33:32 PAGE 3
118 4 RevBuffer[0]=1; //contact
119 4 RevBuffer[1]=0;
120 4 CALL_isr_UART();
121 4 delay_10ms(5);
122 4 TR1 = 0;
123 4 TH1 = baud;
124 4 TL1 = TH1;
125 4 delay_10ms(2);
126 4 TR1 = TRUE;
127 4 }//if LEVEL 2
128 3 else
129 3 {
130 4 cmd_process(); // 进入IC卡处理程序
131 4 CALL_isr_UART();
132 4 }
133 3 }
134 2 }//while循环体
135 1 }//main函数
136 ///////////////////////////////////////////////////////////////////////
137 // 系统初始化
138 ///////////////////////////////////////////////////////////////////////
139 void InitSystem(void)
140 {
141 1 RF_NSS=1;
142 1 RF_RST=0;
143 1 SCONF=0x03; //SM5964A system control register: enable on chip 1K RAM and disable ALE output
144 1 ET2 = 0; //Timer 2 disabled
145 1 T2CON = 0x04; //start Timer 2(internal timer, auto reload)
146 1 PCON = 0x00; //baud rate double
147 1 SCON = 0x70; //UART mode 1, enable receive, if No valid stop bit, RI not activated.
148 1
149 1 //TMOD = 0x22;
150 1 TMOD = 0x21; //Timer 1 8bit auto reload TR1 control
151 1 //Timer 0 16bit TR0 control
152 1
153 1 TH1 = BAUD_19200; //默认波特率
154 1 TL1 = TH1;
155 1 TR1 = TRUE; // 波特率发生器
156 1
157 1 TH0 = 0x60;
158 1 TL0 = 0x60;
159 1 TR0 = 0; //Timer 0 doesn't run
160 1
161 1 ET0=0;
162 1 ET1=0;
163 1 EA=1;
164 1 EX0=1;
165 1 IT0 = 1;
166 1 TR2=0;
167 1 ES = TRUE; //enable UART interrupt
168 1 CmdValid=0; //flag initiation
169 1 //喇叭和指示灯测试
170 1 // SPEAKER=0;
171 1 // CARD_LED=OFF;
172 1 // delay_10ms(30);
173 1 SPEAKER=0;
174 1 CARD_LED=ON;
175 1 delay_10ms(10);
176 1 SPEAKER=1;
177 1 CARD_LED=OFF;
178 1
179 1 Init_FM1702(0);
C51 COMPILER V7.50 FM1702 10/16/2007 16:33:32 PAGE 4
180 1
181 1 }
182 ///////////////////////////////////////////////////////////////////////
183 // 串口接收和发送中断
184 ///////////////////////////////////////////////////////////////////////
185 void isr_UART(void) interrupt 4 using 1
186 {
187 1 uchar len, i;
188 1 unsigned int j=0;
189 1
190 1 if(RI)
191 1 {
192 2 len=SBUF;
193 2 RI=0;
194 2 for(i=0;i<len;i++)
195 2 {
196 3 while(!RI)
197 3 {
198 4 j++;
199 4 if(j>1000)
200 4 {
201 5 break;
202 5 }
203 4 }
204 3 if(j<1000)
205 3 {
206 4 RevBuffer[i]=SBUF;
207 4 RI=0;
208 4 j=0;
209 4 }
210 3 else
211 3 {
212 4 break;
213 4 }
214 3 }
215 2 if(i==len)
216 2 {
217 3 REN=0;
218 3 CmdValid=1;
219 3 }
220 2 }
221 1 else if(!RI && TI)
222 1 {
223 2 TI=0;
224 2 len=RevBuffer[0];
225 2 for(i=0;i<len+1;i++)
226 2 {
227 3 SBUF=RevBuffer[i];
228 3 while(!TI);
229 3 TI=0;
230 3 }
231 2 REN=1;
232 2 }
233 1 }
234 ///////////////////////////////////////////////////////////////////////
235 // IC卡处理函数
236 ///////////////////////////////////////////////////////////////////////
237 void cmd_process(void)
238 {
239 1 uchar cmd;
240 1 uchar status;
241 1
C51 COMPILER V7.50 FM1702 10/16/2007 16:33:32 PAGE 5
242 1 cmd = RevBuffer[0];
243 1 switch(cmd)
244 1 {
245 2 case 1: // Halt the card //终止卡的操作
246 2 status=MIF_Halt();
247 2 RevBuffer[0]=1;
248 2 RevBuffer[1]=status;
249 2 break;
250 2 case 2:
251 2 //MIF_Halt(); //RF_CMD_REQUEST_ALL=0x52,request all
252 2 status = Request(RF_CMD_REQUEST_ALL); //RF_CMD_REQUEST_STD=0x26, request Idle
253 2 if(status != FM1702_OK)
254 2 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -