📄 x5045.lst
字号:
C51 COMPILER V7.50 X5045 01/07/2008 11:13:13 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE X5045
OBJECT MODULE PLACED IN x5045.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE x5045.c LARGE BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include<intrins.h>
3 /*-------------------------------------------
4 //X5045状态字定义
5 #define WREN_INST 0x06 //写允许命令
6 #define WRDI_INST 0x04 //写禁止
7 #define WRSR_INST 0x01 //写状态寄存器命令
8 #define RDSR_INST 0x05 //读状态寄存器命令
9 #define WRITE_INST 0x02 //写存储器命令
10 #define RDAD_INST 0x03 //读存储器命令
11 #define MAX_POLL 0x99 //测试的最大次数
12 //-------------------------------------------*/
13
14 sbit CS_5045=P1^4;
15 sbit SIO=P1^1;
16 sbit CLK=P1^0;
17 sfr16 DPTR=0x82;
18 unsigned char time;
19 unsigned char eeprom_data;
20 void timer0_int(void) interrupt 1
21 {
22 1 TH0=0xdc;
23 1 TL0=0x00;
24 1 if(time--==0)
25 1 {
26 2 time=100;
27 2 }
28 1 }
29 void mDelay(unsigned int DelayTime)
30 {
31 1 unsigned char j=0;
32 1 for(;DelayTime>0;DelayTime--)
33 1 {
34 2 for(j=0;j<125;j++)
35 2 {;}
36 2 }
37 1 }
38
39 //----------------------------------------------------
40 //名称:clear_dog
41 //功能:x5045看门狗定时器复位子程序
42 //
43 //----------------------------------------------------
44 void clear_dog(void)
45 {
46 1 CS_5045=1;
47 1 _nop_();_nop_();
48 1 CS_5045=0;
49 1 _nop_();_nop_();
50 1 CS_5045=1;
51 1 }
52 //----------------------------------------------------
53 //名称:read_dog
54 //功能:读x5045,1字节数据子程序
55 //rd为读出数
C51 COMPILER V7.50 X5045 01/07/2008 11:13:13 PAGE 2
56 //----------------------------------------------------
57 unsigned char read_dog(void)
58 {
59 1 unsigned char n,rd;
60 1 for(n=0;n<8;n++){
61 2 CLK=1;
62 2 _nop_();_nop_();
63 2 CLK=0;
64 2 if(SIO==1)
65 2 rd|=0x01;
66 2 else
67 2 rd&=0xFE;
68 2 if(n<7)
69 2 rd=rd<<1;}
70 1 return rd;
71 1 }
72 //----------------------------------------------------
73 //名称:write_dog
74 //功能:写x5045,1字节数据子程序
75 //wr为写入数
76 //----------------------------------------------------
77 void write_dog(unsigned char wr)
78 {
79 1 unsigned char n;
80 1 for(n=0;n<8;n++){
81 2 CLK=0;
82 2 if(wr&0x80)
83 2 SIO=1;
84 2 else
85 2 SIO=0;
86 2 CLK=1;
87 2 wr=wr<<1;}
88 1 }
89 //----------------------------------------------------
90 //名称:write_enable
91 //功能:写x5045使能允许子程序
92 //
93 //----------------------------------------------------
94 void write_enable(void)
95 {
96 1 CLK=0;
97 1 CS_5045=0;
98 1 write_dog(0x06);/*写使能锁存器*/
99 1 CLK=0;
100 1 CS_5045=1;
101 1 }
102 //读写状态寄存器或E2PROM操作函数-----------------------
103 //-----------------------------------------------------
104 //名称:read_dogstate
105 //功能:x5045读状态寄存器子程序
106 //status为返回状态字
107 //----------------------------------------------------
108 unsigned char read_dogstate(void)
109 {
110 1 unsigned char status;
111 1 CLK=0;
112 1 CS_5045=0;
113 1 write_dog(0x05); /*RSDR,读状态寄存器*/
114 1 status=read_dog(); /*读出状态字节*/
115 1 CLK=0;
116 1 CS_5045=1;
117 1 return status;
C51 COMPILER V7.50 X5045 01/07/2008 11:13:13 PAGE 3
118 1 }
119 //----------------------------------------------------
120 //名称:write_dogstatus
121 //功能:x5045写状态寄存器子程序
122 //wr为写入状态
123 //----------------------------------------------------
124 void write_dogstate(unsigned char wr)
125 {
126 1 unsigned char status;
127 1 do{status=read_dogstate();}
128 1 while(status&0x01);
129 1 write_enable(); /*写使能允许*/
130 1 CLK=0;
131 1 CS_5045=0;
132 1 write_dog(0x01); /*WRSR,写状态寄存器*/
133 1 write_dog(wr); /*写状态字节*/
134 1 CLK=0;
135 1 CS_5045=1;
136 1 }
137 //----------------------------------------------------
138 //名称:read_dogdata
139 //功能:读x5045单元指定位置1字节数据子程序
140 //com为读出数
141 //addr为指定地址
142 //----------------------------------------------------
143 unsigned char read_dogdata(unsigned int addr)
144 {
145 1 unsigned char com;
146 1 DPTR=addr;
147 1 CLK=0;
148 1 CS_5045=0;
149 1 com=0x03;
150 1 if(DPH&0x01)
151 1 com|=0x08;
152 1 write_dog(com);
153 1 write_dog(DPL); /*写数据起始地址*/
154 1 com=read_dog(); /*读数据*/
155 1 CLK=0;
156 1 CS_5045=1;
157 1 return com;
158 1 }
159 //----------------------------------------------------
160 //名称:write_dogdata
161 //功能:向x5045单元指定位置写1字节数据子程序
162 //wr为写入数
163 //addr为指定地址
164 //----------------------------------------------------
165 void write_dogdata(unsigned int addr,unsigned char wr)
166 {
167 1 unsigned char status;
168 1 do{status=read_dogstate();}
169 1 while(status&0x01);
170 1 write_enable(); /*WREN,写使能允许*/
171 1 DPTR=addr;
172 1 CLK=0;
173 1 CS_5045=0;
174 1 status=0x02;
175 1 if(DPH&0x01)
176 1 status|=0x08;
177 1 write_dog(status); /*WRITE,写数据命令*/
178 1 write_dog(DPL); /*写数据起始地址*/
179 1 write_dog(wr); /*写数据*/
C51 COMPILER V7.50 X5045 01/07/2008 11:13:13 PAGE 4
180 1 CLK=0;
181 1 CS_5045=1;
182 1 }
183
184 main()
185 {
186 1 // CKCON=0x00; //时钟控制
187 1 // AUXR=0x01; // 禁止ALE输出
188 1 P0=0xff;
189 1 P1=0xff;
190 1 P2=0xff;
191 1 // P3=0xff;
192 1 /* 设置t0 */
193 1 mDelay(1000);
194 1 TMOD=0x21;
195 1 TH0=0xdc;
196 1 TL0=0x00;
197 1
198 1 IE=0x82;
199 1 IP=0x02;
200 1 TR0=1;
201 1 EA=1;
202 1
203 1 time=100;
204 1 clear_dog();
205 1 mDelay(1000);
206 1 write_dogstate(0x00);
207 1
208 1 while(1)
209 1 {
210 2 write_dogdata(0x0001,0xaa);
211 2 eeprom_data=read_dogdata(0x0001);
212 2 mDelay(1000);
213 2 write_dogdata(0x0003,0x55);
214 2 eeprom_data=read_dogdata(0x0003);
215 2 mDelay(1000); //1s
216 2 // LED=!LED;
217 2 }
218 1 }
219
220
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 384 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 2 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -