📄 wl008.lst
字号:
C51 COMPILER V7.08 WL008 02/17/2004 12:04:27 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE WL008
OBJECT MODULE PLACED IN wl008.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE wl008.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * *
3 * File : wl008.c *
4 * Date : 2004-1-5 *
5 * Version : 1.0 *
6 * *
7 * Author : Freeman freeman@willar.com *
8 * Company : Willar www.willar.com *
9 * *
10 ********************************************************************************
11 * Descriptoon: *
12 * X5054读写演示程序 *
13 * *
14 * *
15 * *
16 *******************************************************************************/
17 #include <reg51.h>
18 #include <intrins.h>
19
20
21 sbit CS = P1^4;
22 sbit SI = P1^2;
23 sbit SCK = P1^0;
24 sbit SO = P1^3;
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 WL008 02/17/2004 12:04:27 PAGE 2
56 unsigned char inbyt();
57 void wip_poll();
58
59 //********************************************************************************************
60 main()
61 {
62 1 EA = 0; //
63 1
64 1 SO = 1;
65 1 SI = 1;
66 1 SCK = 0;
67 1 CS = 1;
68 1
69 1 wren_cmd(); // 使能写入
70 1 wrsr_cmd(); // 写入00H到状态寄存器
71 1 wren_cmd(); // 使能写入
72 1 byte_write(); // 写入11H到地址55H (字节写入)
73 1 byte_read(); // 读取地址55H处的数据(字节读取)
74 1 wren_cmd(); // 使能写入
75 1 page_write(); // 页写入22H/33H/44H到地址1F0/1/2H
76 1 sequ_read(); // 连续读取地址1F0/1/2H
77 1 rst_wdog(); // 清除看门狗
78 1 wrdi_cmd();
79 1
80 1 CS = 1;
81 1 while(1);
82 1 }
83 //********************************************************************************************
84 //* 写入使能指令
85 //* 传入参数: 无
86 //* 返回值: 无
87
88 void wren_cmd()
89 {
90 1 SCK = 0;
91 1 CS = 0;
92 1 outbyt(WREN_INST); // 传送写入使能指令
93 1 SCK = 0;
94 1 CS = 1;
95 1 }
96
97 //********************************************************************************************
98 //* 写入禁止指令
99 //* 传入参数: 无
100 //* 返回值: 无
101 void wrdi_cmd()
102 {
103 1 SCK = 0;
104 1 CS = 0;
105 1 outbyt(WRDI_INST); // 传送写入禁止指令
106 1 SCK = 0;
107 1 CS = 1;
108 1 }
109
110 //********************************************************************************************
111 //* 写入数据到状态寄存器
112 //* 传入参数: 无
113 //* 返回值: 无
114
115 void wrsr_cmd()
116 {
117 1 SCK = 0;
C51 COMPILER V7.08 WL008 02/17/2004 12:04:27 PAGE 3
118 1 CS = 0;
119 1 outbyt(WRSR_INST); // 传送状态寄存器写入指令
120 1 outbyt(STATUS_REG); // 传送要写入的数据
121 1 SCK = 0;
122 1 CS = 1;
123 1 wip_poll(); // 检测写入进度
124 1 }
125
126 //********************************************************************************************
127 //* 读取状态寄存器
128 //* 传入参数: 无
129 //* 返回值: 状态寄存器值
130
131 unsigned char rdsr_cmd()
132 {
133 1 unsigned char status;
134 1 SCK = 0;
135 1 CS = 0;
136 1 outbyt(RDSR_INST); // 传送状态寄存器读取指令
137 1 status = inbyt(); // 读取状态寄存器
138 1 SCK = 0;
139 1 CS = 1;
140 1 return status;
141 1 }
142
143 //********************************************************************************************
144 //* 单一字节写入
145 //* 传入参数: 无
146 //* 返回值: 无
147
148 void byte_write()
149 {
150 1 unsigned int addr;
151 1 addr = BYTE_ADDR; // 设置要写入的地址
152 1 SCK = 0;
153 1 CS = 0;
154 1 if(addr & 0x100)
155 1 {
156 2 outbyt(WRITE_INST | 0x08); //传送写入指令和地址最高位"1"
157 2 }
158 1 else
159 1 {
160 2 outbyt(WRITE_INST); // 传送写入指令和地址最高位"0"
161 2 }
162 1 outbyt((unsigned char)addr); // 传送地址低字节
163 1 outbyt(BYTE_DATA); // 传送数据字节
164 1 SCK = 0;
165 1 CS = 1;
166 1 wip_poll(); // 检测写入进度
167 1 }
168
169 //********************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -