📄 4.2.4.lst
字号:
C51 COMPILER V8.08 4_2_4 06/29/2008 11:30:02 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE 4_2_4
OBJECT MODULE PLACED IN 4.2.4.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE 4.2.4.c DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h> //头文件
2 #include <stdio.h>
3
4 #define uchar unsigned char
5 #define High 1 //定义高电平
6 #define Low 0 //定义高电平
7 #define READCode 0x0C //AT93C66读指令
8 #define WRITECode 0x0A //AT93C66写指令
9 #define ERASECode 0x0E //AT93C66擦除指令
10 #define EWENCodeH 0x09 //AT93C66擦/写允许指令
11 #define EWENCodeL 0x80
12
13 sbit CS=P2^0; //CS为P2.0
14 sbit SK=P2^3; //SK为P2.3
15 sbit DI=P2^2; //DI为P2.2
16 sbit DO=P2^4; //DO为P2.4
17
18 void Delay(uchar n); //延时
19 void MicrowareClock(void); //时钟函数
20 void MicrowareSend(uchar senddata); //字节输入函数
21 uchar MicrowareReceive(void); //字节接收函数
22 uchar MicrowareRead(uchar addr); //读数据函数
23 void MicrowareEnable(void); //擦写允许函数
24 void MicrowareErase(uchar addr); //擦除函数
25 void MicrowareWrite(uchar addr,uchar Wdata); //写数据函数
26
27 void main()
28 {
29 1 uchar Select_Menu; //功能选择
30 1 uchar rd;
31 1 SCON=0x50; //初始化串行口模式1
32 1 TMOD=0x20; //初始化T1为定时功能,模式2
33 1 PCON=0x80; //设置SMOD=1
34 1 TL1=0xF4; //波特率4800bit/s,初值
35 1 TH1=0xF4;
36 1
37 1 TR1 = 1; //启动T1
38 1 TI = 1; //启动发送
39 1 while(1)
40 1 {
41 2 printf("Microware AT93C66 Write and Read!");
42 2 printf (" Select Control Menu Option\n"); //菜单信息
43 2 printf (" 1. Enable AT93C66.\n");
44 2 printf (" 2. Read AT93C66.\n");
45 2 printf (" 3. Write AT93C66.\n");
46 2 printf (" 4. Erase AT93C66.\n");
47 2 printf (" 5. EXIT.\n");
48 2 printf (" Please Input Menu Option:\n");
49 2
50 2 Select_Menu = _getkey(); //从键盘输入选择数字
51 2 switch(Select_Menu)
52 2 {
53 3 case '1': //擦写使能AT93C66
54 3 printf ("\n You Select 1. Enable AT93C66\n");
55 3 MicrowareEnable();
C51 COMPILER V8.08 4_2_4 06/29/2008 11:30:02 PAGE 2
56 3 printf ("\n Enable over\n");
57 3 break;
58 3 case '2': //读AT93C66
59 3 printf ("\n You Select 2. Read AT93C66\n");
60 3 rd=MicrowareRead(0x12);
61 3 printf("AT93C66 data at 0x12=%d\n",rd);
62 3 break;
63 3 case '3': //写AT93C66
64 3 printf("\n You Select 3. Write AT93C66\n");
65 3 MicrowareWrite(0x12,0x56);
66 3 printf ("\n Write over\n");
67 3 break;
68 3 case '4': //搜索擦除AT93C66
69 3 printf ("\n You Select 4. Erase AT93C66\n");
70 3 MicrowareErase(0x12);
71 3 printf ("\n Erase over\n");
72 3 break;
73 3 case '5': //退出程序
74 3 printf ("\n You Select 5. Exit\n");
75 3 goto Exit; //转向Exit标号处
76 3 break;
77 3 default:
78 3 printf ("\n Error: Please Select Right Menu Option\n");
79 3 break;
80 3 };
81 2 }
82 1 Exit: printf("Exit the program!"); //退出
83 1 }
84
85
86
87
88
89 void Delay(uchar n)
90 {
91 1 int i;
92 1 for(i=0;i<n;i++); //空延时
93 1 }
94
95
96
97 void MicrowareClock(void)
98 {
99 1 SK=Low; //SK=0
100 1 Delay(2);
101 1 SK=High; //SK=1
102 1 Delay(2);
103 1 }
104
105
106 void MicrowareSend(uchar senddata)
107 {
108 1 int i;
109 1 for(i=0;i<8;i++) //循环输出一个字节的数据
110 1 {
111 2 DI=(bit)(senddata&0x80);
112 2 senddata<<=1; //移位
113 2 MicrowareClock(); //构造时钟
114 2 }
115 1 }
116
117
C51 COMPILER V8.08 4_2_4 06/29/2008 11:30:02 PAGE 3
118
119 uchar MicrowareReceive(void)
120 {
121 1 uchar receivedata=0; //接收的字节数据
122 1 int i;
123 1 MicrowareClock(); //构造时钟
124 1 for(i=0;i<8;i++) //循环接收
125 1 {
126 2 receivedata*=2;
127 2 if(DO)receivedata++; //判断DO,接收位数据
128 2 MicrowareClock();
129 2 Delay(2);
130 2 }
131 1 return receivedata; //返回数据
132 1 }
133
134
135 uchar MicrowareRead(uchar addr)
136 {
137 1 uchar ReadData;
138 1 CS=1; //选通
139 1 MicrowareSend(READCode); //READ指令
140 1 MicrowareSend(addr); //指定地址
141 1 ReadData=MicrowareReceive(); //接收数据
142 1 CS=0; //选通禁止
143 1 return ReadData; //返回数据
144 1 }
145
146
147
148 void MicrowareEnable(void)
149 {
150 1 CS=1; //选通
151 1 MicrowareSend(EWENCodeH); //EWEN指令
152 1 MicrowareSend(EWENCodeL);
153 1 CS=0; //选通禁止
154 1 }
155
156
157 void MicrowareErase(uchar addr)
158 {
159 1 DO=1;
160 1 CS=1; //选通
161 1 MicrowareSend(ERASECode); //ERASE指令
162 1 MicrowareSend(addr); //地址
163 1 CS=0; //选通禁止
164 1 Delay(4);
165 1 CS=1; //选通
166 1 while(!DO) //判断擦除完毕
167 1 {
168 2 }
169 1 CS=0; //选通禁止
170 1 }
171
172 void MicrowareWrite(uchar addr,uchar Wdata)
173 {
174 1 MicrowareEnable(); //擦除/写允许
175 1 MicrowareErase(addr); //擦除对应地址的数据
176 1 CS=1; //选通
177 1 MicrowareSend(WRITECode); //写指令
178 1 MicrowareSend(addr); //指定地址
179 1 MicrowareSend(Wdata); //写数据
C51 COMPILER V8.08 4_2_4 06/29/2008 11:30:02 PAGE 4
180 1 CS=0; //选通禁止
181 1 Delay(4);
182 1 CS=1; //选通
183 1 Delay(4);
184 1 while(!DO); //查询DO引脚等待写完
185 1 {
186 2 }
187 1 CS=0; //选通禁止
188 1 }
189
190
191
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 459 ----
CONSTANT SIZE = 456 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
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 + -