📄 up51s011.lst
字号:
C51 COMPILER V7.08 UP51S011 03/20/2005 18:17:36 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE UP51S011
OBJECT MODULE PLACED IN up51s011.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE up51s011.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * *
3 * File : uP51s011.C *
4 * Date : 2004-9-5 *
5 * Version : 1.0 *
6 * *
7 * Author : kevin kevin@dz51.com *
8 * Company : Http://www.dz51.com *
9 * *
10 ********************************************************************************
11 * Descriptoon: *
12 * X5045读写演示程序 *
13 * *
14 * *
15 * *
16 *******************************************************************************/
17 #include <reg51.h>
18 #include <intrins.h>
19
20
21 sbit CS = P1^2;
22 sbit SCK = P1^3;
23 sbit SI = P1^4;
24 sbit SO = P1^5;
25
26 #define WREN_INST 0x06 // 写入使能指令(WREN)
27 #define WRDI_INST 0x04 // 写入禁止指令(WRDI)
28 #define WRSR_INST 0x01 // 写入状态寄存器指令(WRSR)
29 #define RDSR_INST 0x05 // 读取状态寄存器指令(RDSR)
30 #define WRITE_INST 0x02 // 写入存储器指令(WRITE)
31 #define READ_INST 0x03 // 读取存储器指令(READ)
32
33 #define BYTE_ADDR 0x55 // 字节模式写入地址
34 #define BYTE_DATA 0x11 // 字节模式写入数据
35
36 #define PAGE_ADDR 0x1F0 // 页写入模式地址
37 #define PAGE_DATA1 0x22 // 页模式写入第一个数据
38 #define PAGE_DATA2 0x33 // 页模式写入第二个数据
39 #define PAGE_DATA3 0x44 // 页模式写入第三个数据
40
41 #define STATUS_REG 0x00 // 要写入到状态寄存器的值
42
43 #define MAX_POLL 0x99 // 最在查询次数m number of polls
44
45
46 void wren_cmd();
47 void wrsr_cmd();
48 void wren_cmd();
49 void wrdi_cmd();
50 void byte_write();
51 unsigned char byte_read();
52 void page_write();
53 unsigned char sequ_read();
54 void rst_wdog();
55 void outbyt(unsigned char write_data);
C51 COMPILER V7.08 UP51S011 03/20/2005 18:17:36 PAGE 2
56 unsigned char inbyt();
57 void wip_poll();
58 void delay();
59
60 //********************************************************************************************
61 main()
62 {
63 1 unsigned char temp=0;
64 1 EA = 0; //
65 1 SO = 1;
66 1 SI = 1;
67 1 SCK = 0;
68 1 CS = 1;
69 1
70 1 temp=0xf0;
71 1 P0=temp;
72 1 delay();
73 1 temp=0x0f;
74 1 P0=temp;
75 1 delay();
76 1 temp=0x5a;
77 1 //------------
78 1 wren_cmd(); // 使能写入
79 1 wrsr_cmd(); // 写入00H到状态寄存器
80 1 wren_cmd(); // 使能写入
81 1 byte_write(); // 写入11H到地址55H (字节写入)
82 1 temp=byte_read();// 读取地址55H处的数据(字节读取)
83 1 P0=temp;
84 1 delay();
85 1 wren_cmd(); // 使能写入
86 1 page_write(); // 页写入22H/33H/44H到地址1F0/1/2H
87 1 temp=sequ_read(); // 连续读取地址1F0/1/2H
88 1 P0=temp;
89 1 delay();
90 1 rst_wdog(); // 清除看门狗
91 1 wrdi_cmd();
92 1
93 1 temp=0xa5;
94 1 P0=temp;
95 1 CS = 1;
96 1
97 1 while(1);
98 1 }
99 //********************************************************************************************
100 //* 写入使能指令
101 //* 传入参数: 无
102 //* 返回值: 无
103
104 void wren_cmd()
105 {
106 1 SCK = 0;
107 1 CS = 0;
108 1 outbyt(WREN_INST); // 传送写入使能指令
109 1 SCK = 0;
110 1 CS = 1;
111 1 }
112
113 //********************************************************************************************
114 //* 写入禁止指令
115 //* 传入参数: 无
116 //* 返回值: 无
117 void wrdi_cmd()
C51 COMPILER V7.08 UP51S011 03/20/2005 18:17:36 PAGE 3
118 {
119 1 SCK = 0;
120 1 CS = 0;
121 1 outbyt(WRDI_INST); // 传送写入禁止指令
122 1 SCK = 0;
123 1 CS = 1;
124 1 }
125
126 //********************************************************************************************
127 //* 写入数据到状态寄存器
128 //* 传入参数: 无
129 //* 返回值: 无
130
131 void wrsr_cmd()
132 {
133 1 SCK = 0;
134 1 CS = 0;
135 1 outbyt(WRSR_INST); // 传送状态寄存器写入指令
136 1 outbyt(STATUS_REG); // 传送要写入的数据
137 1 SCK = 0;
138 1 CS = 1;
139 1 wip_poll(); // 检测写入进度
140 1 }
141
142 //********************************************************************************************
143 //* 读取状态寄存器
144 //* 传入参数: 无
145 //* 返回值: 状态寄存器值
146
147 unsigned char rdsr_cmd()
148 {
149 1 unsigned char status;
150 1 SCK = 0;
151 1 CS = 0;
152 1 outbyt(RDSR_INST); // 传送状态寄存器读取指令
153 1 status = inbyt(); // 读取状态寄存器
154 1 SCK = 0;
155 1 CS = 1;
156 1 return status;
157 1 }
158
159 //********************************************************************************************
160 //* 单一字节写入
161 //* 传入参数: 无
162 //* 返回值: 无
163
164 void byte_write()
165 {
166 1 unsigned int addr;
167 1 addr = BYTE_ADDR; // 设置要写入的地址
168 1 SCK = 0;
169 1 CS = 0;
170 1 if(addr & 0x100)
171 1 {
172 2 outbyt(WRITE_INST | 0x08); //传送写入指令和地址最高位"1"
173 2 }
174 1 else
175 1 {
176 2 outbyt(WRITE_INST); // 传送写入指令和地址最高位"0"
177 2 }
178 1 outbyt((unsigned char)addr); // 传送地址低字节
179 1 outbyt(BYTE_DATA); // 传送数据字节
C51 COMPILER V7.08 UP51S011 03/20/2005 18:17:36 PAGE 4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -