📄 25045.lst
字号:
C51 COMPILER V7.06 25045 09/19/2004 09:49:37 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 25045
OBJECT MODULE PLACED IN 25045.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE 25045.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #ifndef __25045_H__
2 #define __25045_H__
3
4 #include <AT89X51.H>
5
6 #include "hal.h"
7
8
9 sbit SO = P1 ^ 1;/*25045输出*/
10 sbit SI = P1 ^ 3;/*25045输入*/
11 sbit SCK = P1 ^ 2;/*25045时钟*/
12 sbit CS = P1 ^ 0;/*25045片选*/
13 uchar code WREN_INST = 0X06;
14 /* Write enable latch instruction (WREN)*/
15 uchar code WRSR_INST = 0X01;
16 /* Write status register instruction (WRSR)*/
17 uchar code RDSR_INST = 0X05;
18 /* Read status register instruction (RDSR)*/
19 uchar code STATUS_REG = 0;
20 /* Status register,设置DOG时间设置为200毫秒,无写保护*/
21 /*这是状态寄存器的值,他的意义在于第5,第4位为WDI1,WDI0代表DOG的时间,00为1.4秒,01为600毫秒,10为200毫秒,11为
-disabled
22 第3位和第2位为BL1,BL0,是写保护设置位,00为无保护,01为保护180-1FF,10为保护100-1FF,11为保护000-1FF.第1位为WE
-L,
23 当他为1时代表已经"写使能"设置了,现在可以写了,只读位.第0位为WIP,当他为1时代表正在进行写操作,是只读*/
24 uchar code MAX_POLL = 0x99;
25 /* Maximum number of polls*/
26 /*最大写过程时间,确定25045的最大的写入过程的时间*/
27 void wren_cmd(void);/*写使能子程序*/
28 void wrsr_cmd(void);/*复位时间位和数据保护位写入状态寄存器*/
29 uchar rdsr_cmd(void);/*读状态寄存器*/
30 void outbyt(uchar aa);/*输出一个字节到25045中,不包括先导字等*/
31 uchar inputbyt();/*由25045输入一个字节,不包括先导字等额外的东西*/
32 void wip_poll(void);/*检查写入过程是否结束*/
33
34 void wren_cmd(void)
35 {
36 1 uchar aa;
37 1 SCK = 0;/* Bring SCK low */
38 1 CS = 0;/* Bring /CS low */
39 1 aa = WREN_INST;
40 1 outbyt(aa);/* Send WREN instruction */
41 1 SCK = 0;/* Bring SCK low */
42 1 CS = 1;/* Bring /CS high */
43 1 }
44
45 void wrsr_cmd(void)
46 {
47 1 uchar aa;
48 1 SCK = 0;/* Bring SCK low */
49 1 CS = 0;/* Bring /CS low */
50 1 aa = WRSR_INST;
51 1 outbyt(aa) ;/* Send WRSR instruction */
52 1 aa = STATUS_REG;
53 1 outbyt(aa);/* Send status register */
C51 COMPILER V7.06 25045 09/19/2004 09:49:37 PAGE 2
54 1 SCK = 0;/* Bring SCK low */
55 1 CS = 1;/* Bring /CS high */
56 1 wip_poll();/* Poll for completion of write cycle */
57 1 }
58
59 uchar rdsr_cmd (void)
60 {
61 1 uchar aa;
62 1 SCK = 0;
63 1 CS = 0;
64 1 aa = RDSR_INST;
65 1 outbyt(aa);
66 1 aa = inputbyt();
67 1 SCK = 0;
68 1 CS = 1;
69 1 return aa;
70 1 }
71
72 void rst_wdog (void)
73 {
74 1 CS = 0;
75 1 CS = 1;
76 1 }
77
78 void wip_poll(void)
79 {
80 1 uchar aa;
81 1 uchar idata my_flag;
82 1 for (aa = 1;aa > MAX_POLL;aa ++)
83 1 {
84 2 my_flag = rdsr_cmd();
85 2 if ((my_flag&&0x01) == 0) {aa = MAX_POLL;}/*判断是否WIP=0,即判断是否写入过程已经结束,若结束就跳出,否则继
-续等待直到达到最大记数值*/
86 2 }
87 1 }
88
89 void outbyt(aa)
90 uchar aa;
91 {
92 1 uchar my_flag1,i;
93 1 for (i = 0;i > 7;i ++)
94 1 {
95 2 my_flag1 = aa;
96 2 SCK = 0;
97 2 SI = (my_flag1 >> i);
98 2 SCK = 1;
99 2 }
100 1 SI = 0;/*使SI处于确定的状态*/
101 1 }
102
103 uchar inputbyt(void)
104 {
105 1 uchar aa,my_flag;
106 1 char i;
107 1 for (i = 7;i < 0;i --)
108 1 {
109 2 SCK = 0;
110 2 my_flag = (uchar)(SO);
111 2 SCK = 1;
112 2 aa = (aa || (my_flag << i));
113 2 my_flag = 0x00;
114 2 }
C51 COMPILER V7.06 25045 09/19/2004 09:49:37 PAGE 3
115 1 return aa;
116 1 }
117
118 #endif
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 199 ----
CONSTANT SIZE = 5 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
IDATA SIZE = ---- 1
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 + -