📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 08/17/2009 10:13:40 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*************************************************************************************************
2 说明;SPI使用EEPROM存储芯片93C56A,256X8bit=2K的存储空间.在使用SPI通讯时通常使用端口进行仿真,为了符合
3 使用需要,本程序同样使用了端口进行仿真,当然也可以直接使用88F516自带的SPI总线进行通讯.
4 串口1用于观测93C56A的读写数据正确与否?写入成功接收到数据R,写入失败接收到数据E,读取成功接收到数据r,
5 读取失败接收到数据e.
6 要求:打开拨码开关J6的5,6,7,8,打开拨码开关J4
7 *************************************************************************************************/
8
9 #include <sh88f516.h>
10 #include <INTRINS.H> //for use 51 instruction
11
12 sbit cs_93=P1^4;
13 sbit di_93=P1^5;
14 sbit do_93=P1^6;
15 sbit sk_93=P1^7;
16
17 void UART1SendChar(unsigned char value)
18 {
19 1 IEN1 &= 0xFB; //ES1=0;
20 1 SBUF1=value; //写SBUF1,激活发送
21 1 while(TI1==0); //等待转换结束
22 1 TI1=0; //清除发送标志位
23 1 IEN1 = 0x04; //ES1=1;
24 1 }
25
26
27 /*-----------------------------------------------------
28 SPI93cXX系列函数调用
29 void high56(void)--------发送1
30 void low56(void) --------发送0
31 void wd56(unsigned char dd) --------写8位数据,输入参数address or data
32 unsigned char rd56(void) --------读8位数据,返回值data
33 -----------------------------------------------------*/
34 void high56(void)
35 {
36 1 di_93=1;
37 1 sk_93=1; _nop_();
38 1 sk_93=0; _nop_();
39 1 }
40 void low56(void)
41 {
42 1 di_93=0;
43 1 sk_93=1;_nop_();
44 1 sk_93=0;_nop_();
45 1 }
46 void wd56(unsigned char dd)
47 {
48 1 unsigned char i;
49 1 for (i=0;i<8;i++)
50 1 {
51 2 if (dd>=0x80) high56();
52 2 else low56();
53 2 dd=dd<<1;
54 2 }
55 1 }
C51 COMPILER V8.08 MAIN 08/17/2009 10:13:40 PAGE 2
56 unsigned char rd56(void)
57 {
58 1 unsigned char i,dd=0;
59 1 do_93=1;
60 1 for (i=0;i<8;i++)
61 1 {
62 2 dd<<=1;
63 2 sk_93=1;_nop_();
64 2 sk_93=0;_nop_();
65 2 if (do_93) dd|=1;
66 2 }
67 1 return(dd);
68 1 }
69
70 /*-----------------------------------------------------
71 SPI93c56系列函数调用
72 void ewen56(void)-----------写使能
73 unsigned char read93c56_word(unsigned char address) ------------SPI读函数,输入参数为address,返回dat
74 bit write93c56_word(unsigned char address,unsigned char dat)----SPI写函数,输入参数为address,dat,写入成功返
-回0,失败返回1
75 -----------------------------------------------------*/
76 void ewen56(void)
77 {
78 1 _nop_();
79 1 cs_93=1;
80 1 high56();
81 1 low56();
82 1 low56();
83 1 //low56();
84 1 high56();//add
85 1 wd56(0xc0);
86 1 //wd56(0x00);
87 1 cs_93=0;
88 1 }
89
90 unsigned char read93c56_word(unsigned char address)
91 {
92 1 unsigned char dat;
93 1 cs_93=sk_93=0;
94 1 cs_93=1;
95 1
96 1 high56(); //1 --start
97 1 high56(); //1
98 1 low56(); //0 --10 read
99 1 low56(); //X --A8,
100 1 wd56(address); //A7--A0
101 1 dat=rd56(); //data
102 1
103 1 cs_93=0;
104 1 return(dat);
105 1 }
106
107 bit write93c56_word(unsigned char address,unsigned char dat)
108 {
109 1 unsigned char e;
110 1 unsigned char temp=address;
111 1 e=0;
112 1 while (e<3)
113 1 {
114 2 cs_93=sk_93=0;
115 2 cs_93=1;
116 2 ewen56();
C51 COMPILER V8.08 MAIN 08/17/2009 10:13:40 PAGE 3
117 2 _nop_();
118 2 cs_93=1;
119 2 _nop_();
120 2
121 2 high56(); //1 --start
122 2 low56(); //0
123 2 high56(); //1 --01 write
124 2 low56(); //X --A8,
125 2 wd56(address); //A7--A0
126 2 wd56(dat); //data
127 2
128 2 cs_93=0;
129 2 _nop_();
130 2 cs_93=1;
131 2
132 2 do_93=1;
133 2 while (1)
134 2 {
135 3 if (do_93==1) break;
136 3 }
137 2 cs_93=0;
138 2 if (read93c56_word(temp)==dat)
139 2 {
140 3 return(0);
141 3 }
142 2 e++;
143 2 }
144 1 return(1);
145 1 }
146
147
148
149 main()
150 {
151 1 unsigned char i;
152 1
153 1 CLKCON = 0x60; //f=osc/12
154 1
155 1 SCON1 = 0x50; //工作方式选择,此处为工作方式1
156 1 SBRT1 = 0xFF; //波特率设置.工作在方式1时,BAUDRATE=(1/16)*Fsys/(32768-SBRT[1:0]) Fsys=16M
157 1 SBRT0 = 0xF7; //Fsys=16M/12
158 1
159 1 IEN1 = 0x04;
160 1 EA = 1;
161 1
162 1 for(i=0;i<200;i++)
163 1 {
164 2 if(write93c56_word(i,i)==0)
165 2 UART1SendChar('R');
166 2 else
167 2 UART1SendChar('E');
168 2 }
169 1
170 1 while(1)
171 1 {
172 2
173 2 for(i=0;i<200;i++)
174 2 {
175 3 if(read93c56_word(i)==i)
176 3 UART1SendChar('r');
177 3 else
178 3 UART1SendChar('e');
C51 COMPILER V8.08 MAIN 08/17/2009 10:13:40 PAGE 4
179 3 }
180 2 }
181 1
182 1 }
183
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 267 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
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 + -