📄 x5045.lst
字号:
C51 COMPILER V7.50 X5045 06/06/2005 09:07:48 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE X5045
OBJECT MODULE PLACED IN x5045.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE x5045.c OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 /*-------------------------------------------------------
2 X5045源程序
3
4 --------------------------------------------------------*/
5 #include "regx52.h"
6 #include "x5045.h"
7
8 sbit SO=P2^5;
9 sbit SI=P2^4;
10 sbit SCK=P2^3;
11
12 //片选择信号定义
13 #define RAMCS 0x00
14 #define LCDCS1 0x01
15 #define LCDCS2 0x02
16 #define LCDCS3 0x03
17 #define EEPCS 0x04//DOGCS
18 #define ROMCS 0x05
19 #define KEYCS 0x06
20 #define NOSET 0x07
21
22 //25045可编程看门狗监控EEPROM指令集
23 #define WREN 0x06 //00000110 //设置写使能锁存器(允许写操作)
24 #define WRDI 0x04 //00000100 //复位写使能锁存器(禁止写操作)
25 #define RDSR 0x05 //00000101 //读状态寄存器
26 #define WRSR 0x01 //00000001 //写状态寄存器(块锁定)
27 #define READ 0x03 //00000011 //从开始于所选地址的存储器列阵中读出数据
28 #define WRTE 0x02 //00000010 //把数据写入开始于所选地址的存储器阵列中,1至4字节
29
30 extern void p1tune(unsigned char temp);
31 //#pragma save
32 //#pragma OT(8,size)
33 //写使能子程序
34 void wren_dog(void)
35 {
36 1
37 1 SCK=0;//
38 1 p1tune(EEPCS);//CS=0
39 1 Write8(WREN);//
40 1 SCK=0;//for debug
41 1 p1tune(RAMCS);//CS=1
42 1 }
43 /*
44 //写禁止子程序
45 void wrdi_dog(void)
46 {
47 unsigned char data i;
48 SCK=0;
49 p1tune(EEPCS);
50 i++;
51 Write8(WRDI);
52 SCK=0;
53 p1tune(RAMCS);
54
55 }
C51 COMPILER V7.50 X5045 06/06/2005 09:07:48 PAGE 2
56 */
57 //写状态寄存器
58 void wrsr_dog(unsigned char status_reg)
59 {
60 1
61 1 while(rdsr_dog()&0x01==1) ;
62 1 wren_dog();//使能“写”
63 1
64 1 p1tune(EEPCS);
65 1
66 1 Write8(WRSR);
67 1 Write8(status_reg);
68 1
69 1 p1tune(RAMCS);
70 1 wip_poll();
71 1 }
72
73
74 //读状态寄存器
75 unsigned char rdsr_dog(void)
76 {
77 1 // unsigned char com=0x05;//RDSR;
78 1 unsigned char data cTemp;
79 1
80 1 SCK=0;
81 1 p1tune(EEPCS);
82 1 Write8(RDSR);
83 1 cTemp=Read8();
84 1
85 1 SCK=0;
86 1 p1tune(RAMCS);
87 1 return(cTemp);
88 1 }
89
90 //字节读
91 unsigned char byte_read(bit HiHalf,unsigned char Addr)
92 {
93 1 unsigned char data EepromData,ReadInstruct=0x00;
94 1 //while(rdsr_dog()&0x01==1) {}
95 1 wren_dog();
96 1
97 1 SCK=0;
98 1 p1tune(EEPCS);
99 1 SO=1;
100 1 SI=1;
101 1 if(HiHalf)
102 1 ReadInstruct=0x08;
103 1 //
104 1 ReadInstruct|=READ;//READ;
105 1 Write8(ReadInstruct);
106 1 Write8(Addr);
107 1 EepromData=Read8();
108 1 SCK=0;
109 1 p1tune(RAMCS);
110 1 return(EepromData);
111 1 }
112 //字节写
113
114 void byte_write(bit HiHalf,unsigned char Addr,unsigned char Data)
115 {
116 1 unsigned char data WriteInstuct=0x00;
117 1 //while(rdsr_dog()&0x01==1) {}
C51 COMPILER V7.50 X5045 06/06/2005 09:07:48 PAGE 3
118 1 wren_dog();
119 1 SCK=0;
120 1 p1tune(EEPCS);
121 1 //SO=1;
122 1 //SI=1;
123 1 if(HiHalf)
124 1 WriteInstuct=0x08;
125 1 WriteInstuct|=WRTE;//WRTE;
126 1 Write8(WriteInstuct);
127 1 Write8(Addr);
128 1 Write8(Data);
129 1 p1tune(RAMCS);
130 1 wip_poll();
131 1 }
132
133 //检验写操作是否结束。
134 unsigned char wip_poll(void)
135 {
136 1 unsigned int i;
137 1 unsigned char wip;
138 1 for(i=0x1ff;i>0;i--)
139 1 {
140 2 wip=rdsr_dog();
141 2 wip&=0x01;
142 2 if(wip==0) break;
143 2 }
144 1 return(wip);
145 1
146 1 }
147
148 //单字节指令或数据写入X25045
149 //在SI线上输入的数据在SCK的上升沿被锁存。
150 void Write8(unsigned char byt)
151 {
152 1 unsigned char data i;
153 1
154 1 for(i=0;i<8;i++)
155 1 { if((byt&0x80)==0)//
156 2 SI=0;//
157 2 else//
158 2 SI=1;// //
159 2 SCK=0;
160 2 SCK=1;
161 2 byt=byt<<1;
162 2 }
163 1
164 1 }
165 //单字节数据从X25045读到单片机
166 //数据由SCK的下降沿输出到SO线上。
167 unsigned char Read8(void)
168 {
169 1 unsigned char i,j;
170 1 unsigned char byt;
171 1 bit bTemp;
172 1
173 1 for(i=0;i<8;i++)
174 1 {
175 2 SCK=1;
176 2 j++;
177 2 SCK=0;
178 2
179 2 bTemp=SO;
C51 COMPILER V7.50 X5045 06/06/2005 09:07:48 PAGE 4
180 2
181 2 if(bTemp)
182 2 byt|=0x01;
183 2 if(i<7)
184 2 byt=byt<<1;
185 2
186 2 }
187 1
188 1 return (byt);
189 1 }
190
191 //#pragma restore
192
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 275 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 12
IDATA SIZE = ---- ----
BIT SIZE = ---- 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -