📄 93c46.lst
字号:
C51 COMPILER V6.12 93C46 05/30/2008 14:02:14 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE 93C46
OBJECT MODULE PLACED IN .\93C46.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE .\93C46.c DEBUG OBJECTEXTEND
stmt level source
1
2
3 #include <reg51.h>
4 #include <intrins.h>
5
6 //define OP code
7 #define OP_EWEN_H 0x00 // 00 write enable
8 #define OP_EWEN_L 0x60 // 11X XXXX write enable
9 #define OP_EWDS_H 0x00 // 00 disable
10 #define OP_EWDS_L 0x00 // 00X XXXX disable
11
12 #define OP_WRITE_H 0x40 // 01 A6-A0 write data
13 #define OP_READ_H 0x80 // 10 A6-A0 read data
14
15 #define OP_ERASE_H 0xc0 // 11 A6-A0 erase a word
16
17 #define OP_ERAL_H 0x00 // 00 erase all
18 #define OP_ERAL_L 0x40 // 10X XXXX erase all
19 #define OP_WRAL_H 0x00 // 00 write all
20 #define OP_WRAL_L 0x20 // 01X XXXX write all
21
22
23 //define pin
24 sbit CS = P3^4;
25 sbit SK = P3^3;
26 sbit DI = P3^5;
27 sbit DO = P3^6;
28
29 unsigned char code dis_code[] = {0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0xff};
30
31 void start();
32 void ewen();
33 void ewds();
34 void erase();
35 void write(unsigned char addr, unsigned char indata);
36 unsigned char read(unsigned char addr);
37 void inop(unsigned char op_h, unsigned char op_l);
38 void shin(unsigned char indata);
39 unsigned char shout();
40 void delayms(unsigned char ms);
41
42 main()
43 {
44 1 unsigned char i;
45 1 CS = 0; //初始化端口
46 1 SK = 0;
47 1 DI = 1;
48 1 DO = 1;
49 1
50 1 ewen(); // 使能写入操作
51 1 erase(); // 擦除全部内容
52 1
53 1 for(i = 0 ; i < 8; i++) //写入显示代码到AT93C46
54 1 {
55 2 write(i, dis_code[i]);
C51 COMPILER V6.12 93C46 05/30/2008 14:02:14 PAGE 2
56 2 }
57 1
58 1 ewds(); // 禁止写入操作
59 1
60 1 i = 0;
61 1 while(1)
62 1 {
63 2 P0 = read(i); // 循环读取AT93C46内容,并输出到P0口
64 2 i++;
65 2 i &= 0x07; // 循环读取地址为0x00~0x07
66 2 delayms(250);
67 2 }
68 1 }
69
70
71 void write(unsigned char addr, unsigned char indata)
72 // 写入数据indata到addr
73 {
74 1 inop(OP_WRITE_H, addr); // 写入指令和地址
75 1 shin(indata);
76 1 CS = 0;
77 1 delayms(10); // Twp
78 1 }
79
80 unsigned char read(unsigned char addr)
81 // 读取addr处的数据
82 {
83 1 unsigned char out_data;
84 1 inop(OP_READ_H, addr); // 写入指令和地址
85 1 out_data = shout();
86 1 CS = 0;
87 1 return out_data;
88 1 }
89
90 void ewen()
91 {
92 1 inop(OP_EWEN_H, OP_EWEN_L);
93 1 CS= 0;
94 1 }
95
96 void ewds()
97 {
98 1 inop(OP_EWDS_H, OP_EWDS_L);
99 1 CS= 0;
100 1 }
101
102 void erase()
103 {
104 1 inop(OP_ERAL_H, OP_ERAL_L);
105 1 delayms(30);
106 1 CS = 0;
107 1 }
108
109
110 void inop(unsigned char op_h, unsigned char op_l)
111 //移入op_h的高两位和op_l的低7位
112 //op_h为指令码的高两位
113 //op_l为指令码的低7位或7位地址
114 {
115 1
116 1 unsigned char i;
117 1
C51 COMPILER V6.12 93C46 05/30/2008 14:02:14 PAGE 3
118 1 SK = 0; // 开始位
119 1 DI = 1;
120 1 CS = 1;
121 1 _nop_();
122 1 _nop_();
123 1 SK = 1;
124 1 _nop_();
125 1 _nop_();
126 1 SK = 0; // 开始位结束
127 1
128 1 DI = (bit)(op_h & 0x80); // 先移入指令码高位
129 1 SK = 1;
130 1 op_h <<= 1;
131 1 SK = 0;
132 1
133 1 DI = (bit)(op_h & 0x80); // 移入指令码次高位
134 1 SK = 1;
135 1 _nop_();
136 1 _nop_();
137 1 SK = 0;
138 1
139 1 // 移入余下的指令码或地址数据
140 1 op_l <<= 1;
141 1 for(i = 0; i < 7; i++)
142 1 {
143 2 DI = (bit)(op_l & 0x80); // 先移入高位
144 2 SK = 1;
145 2 op_l <<= 1;
146 2 SK = 0;
147 2 }
148 1 DI = 1;
149 1 }
150
151
152 void shin(unsigned char indata)
153 //移入数据
154 {
155 1 unsigned char i;
156 1 for(i = 0; i < 8; i++)
157 1 {
158 2 DI = (bit)(indata & 0x80); // 先移入高位
159 2 SK = 1;
160 2 indata <<= 1;
161 2 SK = 0;
162 2 }
163 1 DI = 1;
164 1 }
165
166 unsigned char shout(void)
167 // 移出数据
168 {
169 1 unsigned char i, out_data;
170 1 for(i = 0; i < 8; i++)
171 1 {
172 2 SK = 1;
173 2 out_data <<= 1;
174 2 SK = 0;
175 2 out_data |= (unsigned char)DO;
176 2 }
177 1 return(out_data);
178 1 }
179
C51 COMPILER V6.12 93C46 05/30/2008 14:02:14 PAGE 4
180 void delayms(unsigned char ms)
181 // 延时子程序
182 {
183 1 unsigned char i;
184 1 while(ms--)
185 1 {
186 2 for(i = 0; i < 120; i++);
187 2 }
188 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 251 ----
CONSTANT SIZE = 8 ----
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 + -