📄 main_uart.lst
字号:
C51 COMPILER V7.06 MAIN_UART 07/29/2005 22:35:14 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN_UART
OBJECT MODULE PLACED IN main_uart.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe main_uart.c DB OE SMALL ROM(LARGE)
stmt level source
1 #include <intrins.h>
2 #include <ctype.h>
3 #include <absacc.h>
4 #include <reg52.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8 sbit P1_0=P1^0;
9 sbit P3_2=P3^2;
10 sbit P1_1=P1^1;
11 sbit P1_7=P1^7;
12 sbit T_CLK = P1^4; /*实时时钟时钟线引脚 */
13 sbit T_IO = P1^3; /*实时时钟数据线引脚 */
14 sbit T_RST = P1^2; /*实时时钟复位线引脚 */
15 sbit ACC0 = ACC^0;
16 sbit ACC7 = ACC^7;
17 #define uchar unsigned char
18 #define WriteIO(addr,value) XBYTE[addr]=value
19 #define STORAGE_LEN 65536
20
21 unsigned char Buff[6];
22 unsigned char i = 0;
23
24
25 /********************************************
26 * flash 读
27 *********************************************/
28 uchar Flash_Byte_Read( unsigned int byteaddr )
29 {
30 1 uchar value;
31 1 P1_7 = 0;
32 1 value = XBYTE[byteaddr];
33 1 P1_7 = 1;
34 1 return value;
35 1 }
36
37 /********************************************
38 * flash 擦除
39 *********************************************/
40 void Flash_Sec_Erase( unsigned int secaddr )
41 {
42 1 uchar temp1, temp2;
43 1 P1_7 = 0;
44 1 WriteIO( 0x5555 , 0xAA );
45 1 WriteIO( 0x2AAA , 0x55 );
46 1 WriteIO( 0x5555 , 0x80 );
47 1 WriteIO( 0x5555 , 0xAA );
48 1 WriteIO( 0x2AAA , 0x55 );
49 1 WriteIO( secaddr ,0x30 );
50 1 P1_7 = 1;
51 1 do
52 1 {
53 2 temp1 = Flash_Byte_Read( secaddr );
54 2 temp2 = Flash_Byte_Read( secaddr );
55 2 }
C51 COMPILER V7.06 MAIN_UART 07/29/2005 22:35:14 PAGE 2
56 1 while( (temp1 & 0x40) != (temp2 & 0x40) );
57 1 }
58
59
60 /********************************************
61 * flash 写
62 *********************************************/
63 void Flash_Byte_Program( unsigned int byteaddr , uchar value )
64 {
65 1 uchar temp1;
66 1 uchar temp2;
67 1 P1_7 = 0;
68 1 WriteIO( 0x5555 , 0xAA );
69 1 WriteIO( 0x2AAA , 0x55 );
70 1 WriteIO( 0x5555 , 0xA0 );
71 1 WriteIO( byteaddr , value );
72 1 P1_7 = 1;
73 1 do
74 1 {
75 2 temp1 = Flash_Byte_Read( byteaddr );
76 2 temp2 = Flash_Byte_Read( byteaddr );
77 2 }
78 1 while( (temp1 & 0x40) != (temp2 & 0x40) );
79 1 /*
80 1 do
81 1 {
82 1 temp1 = Flash_Byte_Read( byteaddr );
83 1 }while( !(temp1 & 0x80) );
84 1 */
85 1 }
86 void Get_Record( unsigned int startaddr , unsigned char *record )
87 {
88 1 uchar i = 0;
89 1
90 1 startaddr += 8192; //0-8K用于和程序空间是重复的。
91 1
92 1 for( i = 0 ; i < 8 ; i ++ )
93 1 {
94 2 record[i] = Flash_Byte_Read( startaddr + i );
95 2 }
96 1 }
97 void Put_Record( unsigned int startaddr , unsigned char *record )
98 {
99 1 uchar i = 0;
100 1
101 1 startaddr += 8192; //0-8K用于和程序空间是重复的。
102 1
103 1 if( !(startaddr & 0xFFF) )
104 1 {//一个新的sector
105 2 Flash_Sec_Erase( startaddr );
106 2 }
107 1
108 1 for( i = 0 ; i < 8 ; i ++ )
109 1 {
110 2 /*
111 2 if( (startaddr+i) & 0xFFF )
112 2 {//一个新的sector
113 2 Flash_Sec_Erase( (startaddr+i)>>12 );
114 2 }
115 2 */
116 2 Flash_Byte_Program( startaddr + i , record[i] );
117 2 }
C51 COMPILER V7.06 MAIN_UART 07/29/2005 22:35:14 PAGE 3
118 1 }
119 /********************************************************************
120 *
121 * 名称: v_RTInputByte
122 * 说明:
123 * 功能: 往DS1302写入1Byte数据
124 * 调用:
125 * 输入: ucDa 写入的数据
126 * 返回值: 无
127 ***********************************************************************/
128 void v_RTInputByte(uchar ucDa)
129 {
130 1 uchar i;
131 1 ACC = ucDa;
132 1 for(i=8; i>0; i--)
133 1 {
134 2 T_IO = ACC0; /*相当于汇编中的 RRC */
135 2 T_CLK = 1;
136 2 T_CLK = 0;
137 2 ACC = ACC >> 1;
138 2 }
139 1 }
140 /********************************************************************
141 *
142 * 名称: uchar uc_RTOutputByte
143 * 说明:
144 * 功能: 从DS1302读取1Byte数据
145 * 调用:
146 * 输入:
147 * 返回值: ACC
148 ***********************************************************************/
149 uchar uc_RTOutputByte(void)
150 {
151 1 uchar i;
152 1 for(i=8; i>0; i--)
153 1 {
154 2 ACC = ACC >>1; /*相当于汇编中的 RRC */
155 2 ACC7 = T_IO;
156 2 T_CLK = 1;
157 2 T_CLK = 0;
158 2 }
159 1 return(ACC);
160 1 }
161 /********************************************************************
162 *
163 * 名称: v_W1302
164 * 说明: 先写地址,后写命令/数据
165 * 功能: 往DS1302写入数据
166 * 调用: v_RTInputByte()
167 * 输入: ucAddr: DS1302地址, ucDa: 要写的数据
168 * 返回值: 无
169 ***********************************************************************/
170 void v_W1302(uchar ucAddr, uchar ucDa)
171 {
172 1 T_RST = 0;
173 1 T_CLK = 0;
174 1 T_RST = 1;
175 1 v_RTInputByte(ucAddr); /* 地址,命令 */
176 1 v_RTInputByte(ucDa); /* 写1Byte数据*/
177 1 T_CLK = 1;
178 1 T_RST =0;
179 1 }
C51 COMPILER V7.06 MAIN_UART 07/29/2005 22:35:14 PAGE 4
180 /********************************************************************
181 *
182 * 名称: uc_R1302
183 * 说明: 先写地址,后读命令/数据
184 * 功能: 读取DS1302某地址的数据
185 * 调用: v_RTInputByte() , uc_RTOutputByte()
186 * 输入: ucAddr: DS1302地址
187 * 返回值: ucDa :读取的数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -