📄 main9356a.lst
字号:
C51 COMPILER V8.08 MAIN9356A 08/17/2009 10:06:55 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN9356A
OBJECT MODULE PLACED IN main9356a.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main9356a.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 MAIN9356A 08/17/2009 10:06:55 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 wd56(0xc0);
84 1 cs_93=0;
85 1 }
86
87 unsigned char read93c56_word(unsigned char address)
88 {
89 1 unsigned char dat;
90 1 cs_93=sk_93=0;
91 1 cs_93=1;
92 1
93 1 high56(); //1 --start
94 1 high56(); //1
95 1 low56(); //0 --10 read
96 1 low56(); //X --A8,
97 1 wd56(address); //A7--A0
98 1 dat=rd56(); //data
99 1
100 1 cs_93=0;
101 1 return(dat);
102 1 }
103
104 bit write93c56_word(unsigned char address,unsigned char dat)
105 {
106 1 unsigned char e;
107 1 unsigned char temp=address;
108 1 e=0;
109 1 while (e<3)
110 1 {
111 2 cs_93=sk_93=0;
112 2 cs_93=1;
113 2 ewen56();
114 2 _nop_();
115 2 cs_93=1;
116 2 _nop_();
C51 COMPILER V8.08 MAIN9356A 08/17/2009 10:06:55 PAGE 3
117 2
118 2 high56(); //1 --start
119 2 low56(); //0
120 2 high56(); //1 --01 write
121 2 low56(); //X --A8,
122 2 wd56(address); //A7--A0
123 2 wd56(dat); //data
124 2
125 2 cs_93=0;
126 2 _nop_();
127 2 cs_93=1;
128 2
129 2 do_93=1;
130 2 while (1)
131 2 {
132 3 if (do_93==1) break;
133 3 }
134 2 cs_93=0;
135 2 if (read93c56_word(temp)==dat)
136 2 {
137 3 return(0);
138 3 }
139 2 e++;
140 2 }
141 1 return(1);
142 1 }
143
144
145
146 main()
147 {
148 1 unsigned char i;
149 1
150 1 CLKCON = 0x60; //f=osc/12
151 1
152 1 SCON1 = 0x50; //工作方式选择,此处为工作方式1
153 1 SBRT1 = 0xFF; //波特率设置.工作在方式1时,BAUDRATE=(1/16)*Fsys/(32768-SBRT[1:0]) Fsys=16M
154 1 SBRT0 = 0xF7; //Fsys=16M/12
155 1
156 1 IEN1 = 0x04;
157 1 EA = 1;
158 1
159 1 for(i=0;i<200;i++)
160 1 {
161 2 if(write93c56_word(i,i)==0)
162 2 UART1SendChar('R');
163 2 else
164 2 UART1SendChar('E');
165 2 }
166 1
167 1 while(1)
168 1 {
169 2
170 2 for(i=0;i<200;i++)
171 2 {
172 3 if(read93c56_word(i)==i)
173 3 UART1SendChar('r');
174 3 else
175 3 UART1SendChar('e');
176 3 }
177 2 }
178 1
C51 COMPILER V8.08 MAIN9356A 08/17/2009 10:06:55 PAGE 4
179 1 }
180
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 264 ----
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 + -