📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 02/25/2008 12:13:54 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.C COMPACT ROM(COMPACT) REGFILE(.\HY502B_SPI.ORC) BROWSE DEBUG OBJECTEX
-TEND
line level source
1 /****************************************************************************
2 * File : main.c *
3 * COPYRIGHT BY HUOYAN LTD.COMPANY *
4 * Version: V2.0 *
5 * *
6 * Created: 07.Aug.2006 *
7 * Last Change: 25.DEC.2006 *
8 * *
9 * Author: sun ,nil *
10 * *
11 * Compiler: KEIL C51 V7.10 *
12 * *
13 * Description: AT89S52 Firmware for HY502 Serial Reader *
14 * This project is designed for HY502XX *
15 * OSC use 11.0592MHz crystal. *
16 ****************************************************************************/
17
18 /******************* www.ehuoyan.com *************************************/
19 /*-------------------------------------------------------------------------*/
20
21 #include "main.h"
22 #include "hy502.h"
23
24 // SPI 总线状态定义
25 #define SPI_RDY 0xF0; // 准备
26 #define spibusy 0xaa // 忙
27 #define spiread 0xbb // 读
28 #define spiwrite 0xcc // 写
29
30
31 /////////////////////////////////////////////////////////////////////////////////////////////////////
32 // 延时函数
33 void delay(unsigned int x)
34 {
35 1 while(x)
36 1 {
37 2 x--;
38 2 }
39 1 }
40
41 ///////////////////////////////////////////////////////////////////////
42 // Delay 50us
43 ///////////////////////////////////////////////////////////////////////
44 void delay_50us(uchar _50us)
45 {
46 1 RCAP2LH = RCAP2_50us;
47 1 T2LH = RCAP2_50us;
48 1 ET2 = 0; // Disable timer2 interrupt
49 1 T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer
50 1
51 1 while (_50us--)
52 1 {
53 2 while (!TF2);
54 2 TF2 = FALSE;
C51 COMPILER V8.02 MAIN 02/25/2008 12:13:54 PAGE 2
55 2 }
56 1
57 1 TR2 = FALSE;
58 1 }
59
60 ///////////////////////////////////////////////////////////////////////
61 // Delay 1ms
62 ///////////////////////////////////////////////////////////////////////
63 void delay_1ms (uint _1ms)
64 {
65 1
66 1 RCAP2LH = RCAP2_1ms;
67 1 T2LH = RCAP2_1ms;
68 1 ET2 = 0; // Disable timer2 interrupt
69 1 T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer
70 1
71 1 while (_1ms--)
72 1 {
73 2 while (!TF2);
74 2 TF2 = FALSE;
75 2 }
76 1 TR2 = FALSE;
77 1
78 1 }
79
80 ///////////////////////////////////////////////////////////////////////
81 // Delay 10ms
82 ///////////////////////////////////////////////////////////////////////
83 void delay_10ms(unsigned int _10ms)
84 {
85 1 RCAP2LH = RCAP2_10ms;
86 1 T2LH = RCAP2_10ms;
87 1 ET2 = 0; // Disable timer2 interrupt
88 1 T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer
89 1
90 1 while (_10ms--)
91 1 {
92 2 while (!TF2)
93 2 {
94 3 if(g_bReceCommandOk) // change by lin 2006-08-21
95 3 {
96 4 TR2 = FALSE;
97 4 TF2 = FALSE;
98 4 return;
99 4 }
100 3 }
101 2 TF2 = FALSE;
102 2 }
103 1 TR2 = FALSE;
104 1
105 1 }
106
107 /////////////////////////////////////////////////////////////////////////
108 //beep(n);n为鸣叫的声音次数
109 /////////////////////////////////////////////////////////////////////////
110 void beep(uchar n)
111 {
112 1 uchar i;
113 1 for(i=0;i<n;i++)
114 1 {
115 2 BUZ=0; //产生周期为1s的方波
116 2 delay_10ms(50); //delay 0.5s
C51 COMPILER V8.02 MAIN 02/25/2008 12:13:54 PAGE 3
117 2 BUZ=1;
118 2 delay_10ms(50);
119 2 BUZ=0;
120 2 }
121 1 }
122 /////////////////////////////////////////////////////////////////////////
123 /////////////////////////////////////////////////////////////////////////
124 //LED闪烁次数
125 ////////////////////////////////////////////////////////////////////////
126 void splash(uchar n)
127 {
128 1 uchar i;
129 1
130 1 for(i=0;i<n;i++)
131 1 {
132 2 LED_YELLOW=1;
133 2 delay_10ms(50); //delay 0.5s
134 2 LED_YELLOW=0;
135 2 delay_10ms(50);
136 2 LED_YELLOW=1;
137 2 }
138 1 }
139 /******************* SPI FUNCTION DEFINE ************************************/
140 /*****************************************************************************
141 *function: send a byte over SPI bus
142 发送一个字节
143 *****************************************************************************/
144 unsigned char SPIRWByte(unsigned char cSendByte)
145 {
146 1 unsigned char data i = 8;
147 1 unsigned char cRecByte;
148 1 while (i--)
149 1 {
150 2 cRecByte += cRecByte;
151 2 SCL = 0;
152 2 MOSI = (bit)(cSendByte & 0x80);
153 2 cSendByte += cSendByte;
154 2 cRecByte |= (unsigned char) MISO ;
155 2 SCL = 1;
156 2 }
157 1 SCL = 1;
158 1 return cRecByte;
159 1 }
160
161
162 /***** 查询SPI总线状态 *********/
163 unsigned char spi_cStatus(void)
164 {
165 1 unsigned char cStatus;
166 1 NSS=0;
167 1 cStatus=SPIRWByte(spibusy);
168 1
169 1 cStatus=SPIRWByte(0xFF);
170 1 NSS=1;
171 1
172 1 return cStatus;
173 1 }
174
175 /***** 读SPI总线数据 *********/
176 unsigned char SPI_Read(unsigned char *cP)
177 {
178 1 unsigned char cCnt,cStatus;
C51 COMPILER V8.02 MAIN 02/25/2008 12:13:54 PAGE 4
179 1 unsigned char cCheckSum = 0;
180 1
181 1 for (cCnt=0; cCnt<100; cCnt++)
182 1 {
183 2 cStatus=spi_cStatus(); //查询SPI总线状态
184 2 if(cStatus==0xF0)
185 2 {
186 3 cCnt=253;
187 3 }
188 2 delay(10);
189 2 }
190 1
191 1 if(cCnt==254) //卡操作结束,可以回传数据
192 1 {
193 2 NSS=0;
194 2 cCnt=SPIRWByte(spiread);
195 2 cP[0]=2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -