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