📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 08/05/2005 21:41:52 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe main.c DB OE SMALL ROM(LARGE)
stmt level source
1 #include <intrins.h>
2 #include <ctype.h>
3 #include <absacc.h>
4 #include <reg52.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8
9
10 sbit P1_0=P1^0;
11 sbit P1_1=P1^1;
12 sbit P1_6=P1^6;
13 sbit P1_7=P1^7;
14 sbit P3_4=P3^4;
15 sbit P3_3=P3^3;
16 sbit T_CLK = P1^4; /*实时时钟时钟线引脚 */
17 sbit T_IO = P1^3; /*实时时钟数据线引脚 */
18 sbit T_RST = P1^2; /*实时时钟复位线引脚 */
19 sbit ACC0 = ACC^0;
20 sbit ACC7 = ACC^7;
21 #define uchar unsigned char
22 #define WriteIO(addr,value) XBYTE[addr]=value
23 #define STORAGE_LEN 65536
24
25 uchar b[7]={0x10,0x10,0x10,0x10,0x10,0x10,0x10};
26 uchar CmdBuff[10];
27 uchar CmdPointer = 0;
28 uchar RcvCmd = 0;
29 unsigned int g_UartFlag = 0x4FFF;
30
31 //sbit P1_0 = P1^0;
32 sbit P3_5 = P3^5;
33 unsigned char count = 0;
34 unsigned long HeadL = 0;
35 unsigned char finding = 0, findhead = 0,finded = 0;
36 unsigned int cardid[11]={0,0,0,0,0,0,0,0,0,0,0};
37 unsigned int data1 = 0;
38 unsigned char pointer = 0;
39 unsigned char counter = 0;
40
41 unsigned int show = 0,showtimecounter = 0;
42 unsigned char showflag = 1;
43 uchar h0,h1,m0,m1;
44 unsigned long g_ReadAddr = STORAGE_LEN - 8,g_WriteAddr = 0;
45
46
47
48 void Uart_Send(unsigned char data1)
49 {
50 1 SBUF = data1;
51 1 while(!TI);
52 1 TI = 0;
53 1 }
54
55 /********************************************
C51 COMPILER V7.06 MAIN 08/05/2005 21:41:52 PAGE 2
56 * flash 读
57 *********************************************/
58 uchar Flash_Byte_Read( unsigned int byteaddr )
59 {
60 1 uchar value;
61 1 P1_7 = 0;
62 1 value = XBYTE[byteaddr];
63 1 P1_7 = 1;
64 1 return value;
65 1 }
66
67 /********************************************
68 * flash 擦除
69 *********************************************/
70 void Flash_Sec_Erase( unsigned int secaddr )
71 {
72 1 uchar temp1, temp2;
73 1
74 1 EA = 0;
75 1 P1_7 = 0;
76 1 WriteIO( 0x5555 , 0xAA );
77 1 WriteIO( 0x2AAA , 0x55 );
78 1 WriteIO( 0x5555 , 0x80 );
79 1 WriteIO( 0x5555 , 0xAA );
80 1 WriteIO( 0x2AAA , 0x55 );
81 1 WriteIO( secaddr ,0x30 );
82 1 P1_7 = 1;
83 1 EA = 1;
84 1
85 1 do
86 1 {
87 2 temp1 = Flash_Byte_Read( secaddr );
88 2 temp2 = Flash_Byte_Read( secaddr );
89 2 }
90 1 while( (temp1 & 0x40) != (temp2 & 0x40) );
91 1 /*
92 1 for( temp2 = 0 ; temp2 < 100 ; temp2 ++ )
93 1 {
94 1 _nop_( );
95 1 }
96 1 */
97 1 }
98
99
100 /********************************************
101 * flash 写
102 *********************************************/
103 void Flash_Byte_Program( unsigned int byteaddr , uchar value )
104 {
105 1 uchar temp1;
106 1 uchar temp2;
107 1
108 1 EA = 0;
109 1 P1_7 = 0;
110 1 WriteIO( 0x5555 , 0xAA );
111 1 WriteIO( 0x2AAA , 0x55 );
112 1 WriteIO( 0x5555 , 0xA0 );
113 1 WriteIO( byteaddr , value );
114 1 P1_7 = 1;
115 1 EA = 1;
116 1 //*
117 1 do
C51 COMPILER V7.06 MAIN 08/05/2005 21:41:52 PAGE 3
118 1 {
119 2 temp1 = Flash_Byte_Read( byteaddr );
120 2 temp2 = Flash_Byte_Read( byteaddr );
121 2 }
122 1 while( (temp1 & 0x40) != (temp2 & 0x40) );
123 1 //*/
124 1
125 1 /*
126 1
127 1 do
128 1 {
129 1 temp1 = Flash_Byte_Read( byteaddr );
130 1 }while( !(temp1 & 0x80) );
131 1 //*/
132 1 /*
133 1 for( temp2 = 0 ; temp2 < 5 ; temp2 ++ )
134 1 {
135 1 _nop_( );
136 1 }
137 1 */
138 1 //*/
139 1 }
140
141
142
143 /********************************************
144 * 读取一条记录
145 *********************************************/
146 void Get_Record( unsigned int startaddr , unsigned char *record )
147 {
148 1 uchar i = 0;
149 1
150 1 startaddr += 8192; //0-8K用于和程序空间是重复的。
151 1
152 1 for( i = 0 ; i < 8 ; i ++ )
153 1 {
154 2 record[i] = Flash_Byte_Read( startaddr + i );
155 2 }
156 1 }
157
158 /********************************************
159 * 写入一条记录
160 *********************************************/
161 void Put_Record( unsigned int startaddr , unsigned char *record )
162 {
163 1 uchar i = 0;
164 1
165 1 startaddr += 8192; //0-8K用于和程序空间是重复的。
166 1
167 1 if( !(startaddr & 0xFFF) )
168 1 {//一个新的sector
169 2 Flash_Sec_Erase( startaddr );
170 2 }
171 1
172 1 for( i = 0 ; i < 8 ; i ++ )
173 1 {
174 2 /*
175 2 if( (startaddr+i) & 0xFFF )
176 2 {//一个新的sector
177 2 Flash_Sec_Erase( (startaddr+i)>>12 );
178 2 }
179 2 */
C51 COMPILER V7.06 MAIN 08/05/2005 21:41:52 PAGE 4
180 2 Flash_Byte_Program( startaddr + i , record[i] );
181 2 }
182 1 }
183
184 /********************************************
185 * 组成一条记录
186 *********************************************/
187 void Build_Record( unsigned int *Id , unsigned char *Time , unsigned char *record )
188 {
189 1 uchar i = 0 , j = 0;
190 1 unsigned int * pointer = NULL;
191 1
192 1 //组织ID号
193 1 for( i = 0 ; i < 10 ; i ++ )
194 1 {
195 2 if( i & 0x01 )
196 2 {
197 3 record[j] |= Id[i] & 0x0F;
198 3 j ++;
199 3 }
200 2 else
201 2 {
202 3 record[j] = Id[i] << 4 ;
203 3 }
204 2
205 2 }
206 1
207 1 //组织时间
208 1 //秒 分 时 日 月 星期 年
209 1 record[5] = ( (Time[6]>>4)*10 + (Time[6]&0x0F) ) << 4;
210 1 record[5] |= ( (Time[4]>>4)*10 + (Time[4]&0x0F) )&0x0F;
211 1 pointer = (unsigned int * )&record[6];
212 1 *(pointer) = 0;
213 1 *(pointer) |= ( (Time[3]>>4)*10 + (Time[3]&0x0F) ) << 11;
214 1 *(pointer) |= ( (Time[2]>>4)*10 + (Time[2]&0x0F) ) << 6;
215 1 *(pointer) |= (Time[1]>>4)*10 + (Time[1]&0x0F);
216 1 }
217
218
219 /********************************************
220 * 发送一条记录
221 *********************************************/
222 void Send_Record( uchar* record , uchar retvalue)
223 {
224 1 uchar i = 0;
225 1 uchar verify = 0xff ;
226 1 Uart_Send( 0x5A );
227 1 Uart_Send( 0xA5 );
228 1 Uart_Send( retvalue );
229 1 for( i = 0 ; i < 8 ; i ++ )
230 1 {
231 2 Uart_Send( (uchar)record[i] );
232 2 verify ^= record[i];
233 2 }
234 1 Uart_Send( verify );
235 1 }
236
237
238 changdata(uchar c)
239 {
240 1 uchar d;
241 1 switch(c)
C51 COMPILER V7.06 MAIN 08/05/2005 21:41:52 PAGE 5
242 1 {
243 2 case 0: d=0Xfc;break;
244 2 case 1: d=0X60;break;
245 2 case 2: d=0Xda;break;
246 2 case 3: d=0Xf2;break;
247 2 case 4: d=0X66;break;
248 2 case 5: d=0Xb6;break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -