📄 cfctrlv10.lst
字号:
C51 COMPILER V7.06 CFCTRLV10 10/27/2004 11:26:40 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE CFCTRLV10
OBJECT MODULE PLACED IN cfctrlv10.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE cfctrlv10.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*############################################################################
2 鼎立照明 16级灰度护栏灯控制器程序
3 创建时间:2004-10-21
4 硬件资源:
5 RAM ADDRESS :0000H---7FFFH
6 CF card ADDRESS:8000H---8FFFH
7 CPLD ADDRESS:9000H---FFFFH
8 RAM SIZE :32K FLASH SIZE:8MBYTE = 4K*512PAGE*4PCS
9 PCB:V10
10 */
11 #include <reg52.h>
12 #include <intrins.h>
13 //#include <ctype.h>//字符函数
14 #include <string.h>//字符串函数
15 #include <stdio.h>//一般I/O函数
16 #include <stdlib.h>//标准函数
17 //#include <math.h>//数学函数
18 #include <absacc.h>//绝对地址
19 #include <intrins.h>//内部函数
20 #include <setjmp.h>
21 #define uchar unsigned char
22 #define uint unsigned int
23 #define byte unsigned char
24 #define word unsigned
25 #define bool bit
26 #define TRUE 1
27 #define FALSE 0
28 #define V_TH0 0xff /* 时间常数高8位 (65536-500)/256 */
29 #define V_TL0 0xff /* 时间常数低8位 (65536-500)%256 11.0592*/
30 //#define V_TH0 (65536-1536)/256
31 //#define V_TL0 (65536-1536)%256
32 #define V_TMOD 0x01 /* 定时器T0方式控制字 */
33 #define WriteDeviceAddress 0xa0
34 #define ReadDviceAddress 0xa1
35 /* 定义定时器T0的时间常数值和方式控制字 */
36
37 #define REGL XBYTE[0x9003] //控制寄存器护栏管的长度
38 #define FPGH XBYTE[0x9001] //闪存页高位
39 #define FPGL XBYTE[0x9002] //闪存页低位
40 //-------- CF CARD REG ADDRESS
41 #define EVEN_Data XBYTE[0xa400]
42 #define ODD_Data XBYTE[0xa400]
43 #define Data_Reg XBYTE[0xa000] //DATA REGISTER(R/W)
44 #define Error_Reg XBYTE[0xa001] //ERROR REGISTER(READ)
45 #define Features XBYTE[0xa001] //FEATURE REGISTER(WRITE)
46 #define Sectr_Cnt XBYTE[0xa002]//SECTOR COUNT REGISTER(R/W)
47 #define Sectr_No XBYTE[0xa003] //SECTOR NUMBER REGISTER(R/W)
48 #define Cylinder_Low XBYTE[0xa004] //CYLINDER LOW REGISTER(R/W)
49 #define Cylinder_Hi XBYTE[0xa005] //CYLINDER HIGH REGISTER(R/W)
50 #define Drv_Head XBYTE[0xa006] //DIRVE/HEAD REGISTER(R/W)
51 #define Status XBYTE[0xa007] //STATUS REGISTER(READ)
52 #define Command XBYTE[0xa007] //COMMAND REGISTER(WRITE)
53 #define Alt_Status XBYTE[0xa00e] //Alternate Status Regiter(read only)
54 #define Device_Ctrl XBYTE[0xa00e] //Device Control Register(Write only)
55 #define Device_Addrs XBYTE[0xa00f] //Drive Address Register(read only).Not used in this demo
C51 COMPILER V7.06 CFCTRLV10 10/27/2004 11:26:40 PAGE 2
56 #define Config XBYTE[0x8200] //Configuration Option Register
57 #define Socket XBYTE[0x8206] //Socket and copy Register
58 //CF card All command code
59 #define ChkPwr 0xe5
60 #define Diagnostic 0x90
61 #define EraseSctr 0x0c
62 #define Format 0x50
63 #define Identify 0xec
64 #define Idle 0xe3
65 #define Idlelmm 0xe1
66 #define Initialize 0x91
67 #define ReadBuf 0xe4
68 #define ReadLong 0x22
69 #define ReadMulti 0xc4
70 #define ReadSctr 0x20
71 #define ReadVerify 0x40
72 #define Recalibrate 0x10
73 #define ReadSense 0x03
74 #define Seek 0x70
75 #define SetFeature 0xef
76 #define SetMulti 0xc6
77 #define Sleep 0xe6
78 #define Standby 0xe2
79 #define Standbylmm 0xe0
80 #define Translate 0x87
81 #define WearLevel 0xf5
82 #define WriteBuf 0xe8
83 #define WriteLong 0x32
84 #define WriteMulti 0xc5
85 #define WriteSctr 0x30
86 #define WriteVerify 0x3c
87 #define WrtMwoErase 0xcd
88 #define WrtSwoErase 0x38
89
90 //**********************************************
91 sbit senden=P3^2;
92 sbit SDA=P3^3;
93 sbit SCL=P3^5;
94 sbit wdgclr=P1^7;
95 //*************************************************
96 uchar Select;
97 uchar LBA[6]; //Sets up sector ,CF Card Address
98 uint zhepe; //帧频
99 uint ms; //毫秒定时
100 uchar ADD; //地址
101 uchar idata iic_buf[96]; //接收缓冲区
102 uint pointer;
103 uchar xdata *bufp;
104 uchar subchk; //接收指针 和校验
105 uchar paklen; //包长
106 uint page_sta,page_end; //显示的开始帧和结束帧
107 uint dis_page; //当前显示的帧号
108 uint page; //扇区号
109 uchar bdata flag;
110 sbit frameok=flag^0; //rece ok
111 sbit color=flag^1; //0 sing red color 1 red green color
112 sbit rec_sta=flag^2; //1 进入接状态,不显示
113 sbit rec_end=flag^3;
114 sbit timout=flag^4;
115 //jmp_buf env;
116 //int retval;
117 /***************************************************************************/
C51 COMPILER V7.06 CFCTRLV10 10/27/2004 11:26:40 PAGE 3
118 void I2cDelay(unsigned int number) {
119 1 unsigned char temp;
120 1 for(;number!=0;number--,wdgclr=!wdgclr) {
121 2 for(temp=112;temp!=0;temp--) {
122 3 }
123 2 }
124 1 }
125 //*******************************
126 void SomeNOP(void)
127 {
128 1 uchar i;
129 1 i=5;
130 1 while(i--);
131 1 }
132
133 /***************************************************************************/
134 void Start() {
135 1 SDA=1;SomeNOP();
136 1 SCL=1;SomeNOP();
137 1 SDA=0;SomeNOP();
138 1 SCL=0;SomeNOP();
139 1 }
140
141 /***************************************************************************/
142 void Stop() {
143 1 SCL=0;SomeNOP();
144 1 SDA=0;SomeNOP();
145 1 SCL=1;SomeNOP();
146 1 SDA=1;SomeNOP();
147 1 }
148
149 /***************************************************************************/
150 void Ack() {
151 1 SDA=0;SomeNOP();
152 1 SCL=1;SomeNOP();
153 1 SCL=0;SomeNOP();
154 1 SDA=1;SomeNOP();
155 1 }
156
157 /***************************************************************************/
158 void NoAck() {
159 1 SDA=1;SomeNOP();
160 1 SCL=1;SomeNOP();
161 1 SCL=0;SomeNOP();
162 1 }
163
164 /***************************************************************************/
165 bit TestAck() {
166 1 bit ErrorBit;
167 1 SDA=1;SomeNOP();
168 1 SCL=1;SomeNOP();
169 1 ErrorBit=SDA;
170 1 SCL=0;
171 1 return(ErrorBit);
172 1 }
173
174 /***************************************************************************/
175 Write8Bit(unsigned char input)
176 {
177 1 unsigned char temp;
178 1 for(temp=8;temp!=0;temp--) {
179 2 SDA=(bit)(input&0x80);
C51 COMPILER V7.06 CFCTRLV10 10/27/2004 11:26:40 PAGE 4
180 2 SCL=1;SomeNOP();
181 2 SCL=0;SomeNOP();
182 2 input=input<<1;
183 2 }
184 1 }
185
186 /***************************************************************************/
187 void Write24c02(unsigned char xdata *Wdata,unsigned char RomAddress,unsigned char number) {
188 1 wdgclr=!wdgclr;
189 1 Start();
190 1 Write8Bit(WriteDeviceAddress);
191 1 TestAck();
192 1 Write8Bit(RomAddress);
193 1 TestAck();
194 1 for(;number!=0;number--) {
195 2 Write8Bit(*Wdata);
196 2 TestAck();
197 2 Wdata++;
198 2 }
199 1 Stop();
200 1 I2cDelay(10);
201 1 }
202
203 /***************************************************************************/
204 unsigned char Read8Bit() {
205 1 unsigned char temp,rbyte=0;
206 1 for(temp=8;temp!=0;temp--) {
207 2 SCL=1;
208 2 rbyte=rbyte<<1;
209 2 rbyte=rbyte|((unsigned char)(SDA));
210 2 SCL=0;
211 2 }
212 1 return(rbyte);
213 1 }
214
215 /***************************************************************************/
216 void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes) {
217 1 // unsigned char temp,rbyte;
218 1 wdgclr=!wdgclr;
219 1 Start();
220 1 Write8Bit(WriteDeviceAddress);
221 1 TestAck();
222 1 Write8Bit(RomAddress);
223 1 TestAck();
224 1 Start();
225 1 Write8Bit(ReadDviceAddress);
226 1 TestAck();
227 1 while(bytes!=1) {
228 2 *RamAddress=Read8Bit();
229 2 Ack();
230 2 RamAddress++;
231 2 bytes--;
232 2 }
233 1 *RamAddress=Read8Bit();
234 1 NoAck();
235 1 Stop();
236 1 }
237
238 /***************************************************************************/
239 //*******************************************
240 //从FLASH加载数据到RAM, flash -> ram 000
241 //入口参数:帧号 取值范围:0--8095
C51 COMPILER V7.06 CFCTRLV10 10/27/2004 11:26:40 PAGE 5
242 //******************************************
243 //#pragma NOMODDP2
244 void load_data(uint page)
245 {
246 1 uchar xdata *s;
247 1 uchar xdata *sp;
248 1 uchar xdata *rp;
249 1 sp=((page<<10)&0x0fff)|0x8000;
250 1 FPGH=(page>>2)/256;FPGL=(page>>2)%256;
251 1 s=0x000;
252 1 //for(i=0;i<1024;i++)*s++=*sp++;
253 1 rp=memcpy(s,sp,1024);
254 1 }
255 /*************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -