📄 x5045.lst
字号:
C51 COMPILER V7.50 X5045 06/10/2006 08:26:04 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE X5045
OBJECT MODULE PLACED IN X5045.OBJ
COMPILER INVOKED BY: D:\ExpertTools\Keil\C51\BIN\C51.EXE X5045.c OPTIMIZE(5,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 #define X5045_H
2 #include "config.h"
3 //--------------------------------------------------------------------------------------
4 void flash() //延时子程序
5 {
6 1 _NOP_();
7 1 _NOP_();
8 1 }
9
10 //基本操作函数
11 void STAX(void)//;启动X25045指令
12 { cs5045=1;
13 1 flash();
14 1 sck=0;
15 1 flash();
16 1 cs5045=0;
17 1 flash();
18 1 }
19 void ENDX(void)//;结束X25045指令
20 { sck=0;
21 1 flash();
22 1 cs5045=1;
23 1 flash();
24 1 sck=1;
25 1 flash();
26 1 }
27
28 #ifdef MYUSE
//2)写状态寄存器子程序
void write_dogstate(uint8 wr)
{
WrReady();
write_enable(); /*写使能允许*/
sck=0;
cs5045=1;
flash();
cs5045=0;
write_dog(WRSR); /*WRSR,写状态寄存器*/
write_dog(wr); /*写状态字节*/
sck=0;
cs5045=1;
}
void clear_dog(void)//1)看门狗定时器复位子程序
{
cs5045=1;
flash();
cs5045=0;
flash();
cs5045=1;
}
#endif
53 //2)读1字节数据子程序
54 uint8 read_dog(void)
55 {
C51 COMPILER V7.50 X5045 06/10/2006 08:26:04 PAGE 2
56 1 uint8 n;
57 1 uint8 rd;
58 1
59 1 for(n=8;n>0;n--)
60 1 {
61 2 sck=1;
62 2 flash();
63 2 sck=0;
64 2
65 2 if(so==1)
66 2 rd|=0x01;
67 2 else
68 2 rd&=0xFE;
69 2
70 2 if(n>1)rd=rd<<1;
71 2 }
72 1
73 1 return rd;
74 1 }
75
76 //3)写1字节数据子程序
77 void write_dog(uint8 wr)
78 {
79 1 uint8 n;
80 1 for(n=8;n>0;n--)
81 1 {
82 2 sck=0;
83 2
84 2 if(wr&0x80)
85 2 si=1;
86 2 else
87 2 si=0;
88 2
89 2 sck=1;
90 2 wr=wr<<1;
91 2 }
92 1 }
93
94 //4)写使能允许子程序
95 void write_enable(void)
96 {
97 1 STAX();
98 1 sck=0;
99 1 cs5045=0;
100 1 write_dog(WREN);/*写使能锁存器*/
101 1 sck=0;
102 1 cs5045=1;
103 1 ENDX();
104 1 }
105
106 //读写状态寄存器或E2PROM操作函数
107 //1)读状态寄存器子程序
108 uint8 read_dogstate(void)
109 {
110 1 uint8 status;
111 1
112 1 sck=0;
113 1 cs5045=0;
114 1 write_dog(RSDR); /*RSDR,读状态寄存器*/
115 1 status=read_dog(); /*读出状态字节*/
116 1 sck=0;
117 1 cs5045=1;
C51 COMPILER V7.50 X5045 06/10/2006 08:26:04 PAGE 3
118 1
119 1 return status;
120 1 }
121
122 void WrReady()
123 {
124 1 uint16 i=0;
125 1 uint8 status;
126 1
127 1 do
128 1 {
129 2 status=read_dogstate();
130 2 i++;
131 2 }while(status&0x01 && i<MAX_POLL);
132 1 }
133
134
135
136 //3)读单元指定位置1字节数据子程序
137 uint8 EepromRead(uint16 addr)
138 {
139 1 uint8 com;
140 1
141 1 STAX();
142 1
143 1 DPTR=addr;
144 1 sck=0;
145 1 cs5045=0;
146 1 com=0x03;
147 1
148 1 if(DPH&0x01)com|=0x08;
149 1
150 1 write_dog(com); /*READ,读数据命令*/
151 1 write_dog(DPL); /*写数据起始地址*/
152 1 com=read_dog(); /*读数据*/
153 1 sck=0;
154 1 cs5045=1;
155 1 ENDX();
156 1 return com;
157 1 }
158
159 //4)向单元指定位置写1字节数据子程序
160 void EepromWrite(uint16 addr,uint8 wr)
161 {
162 1 uint8 status;
163 1
164 1 WrReady();
165 1
166 1 write_enable(); /*WREN,写使能允许*/
167 1
168 1 DPTR=addr;
169 1 sck=0;
170 1 cs5045=0;
171 1 status=0x02;
172 1
173 1 if(DPH&0x01)status|=0x08;
174 1
175 1 write_dog(status); /*WRITE,写数据命令*/
176 1
177 1 write_dog(DPL); /*写数据起始地址*/
178 1
179 1 write_dog(wr); /*写数据*/
C51 COMPILER V7.50 X5045 06/10/2006 08:26:04 PAGE 4
180 1
181 1 sck=0;
182 1
183 1 cs5045=1;
184 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 261 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 2
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 + -