📄 pcf8563.lst
字号:
C51 COMPILER V7.02a PCF8563 04/22/2003 23:04:38 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE PCF8563
OBJECT MODULE PLACED IN PCF8563.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PCF8563.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg51.h>
2 #include<stdlib.h>
3 #define byte unsigned char
4
5 sbit scl=0x81; //定义串行I/O口
6 sbit sda=0x80;
7 idata byte rom_sed[9];
8 idata byte rom_rec[7];
9 idata byte j,k;
10 bit flag,flag1;
11
12 void delay(void) //延时子程序
13 {
14 1 data byte i;
15 1 for(i=0;i<6;i++);
16 1 }
17
18 void I_start(void) //发送I2C总线起始条件子程序
19 {
20 1 sda=1;
21 1 ;
22 1 scl=1;
23 1 delay();
24 1 sda=0;
25 1 delay();
26 1 scl=0;
27 1 ;
28 1 }
29
30 void I_stop(void) //I2C总线停止条件子程序
31 {
32 1 sda=0;
33 1 ;
34 1 scl=1;
35 1 delay();
36 1 sda=1;
37 1 delay();
38 1 }
39
40 bit I_send(byte I_data) //字节数据传送子程序
41 {
42 1 data byte i;
43 1 for(i=0;i<8;i++)
44 1 {
45 2 sda=(bit)(I_data&0x80);
46 2 I_data=I_data<<1;
47 2 ;
48 2 scl=1;
49 2 delay();
50 2 scl=0;
51 2 }
52 1 ;
53 1 ;
54 1 sda=1;
55 1 ;
C51 COMPILER V7.02a PCF8563 04/22/2003 23:04:38 PAGE 2
56 1 ; //准备接收ACK位
57 1 scl=1;
58 1 ;
59 1 ; //开始接收ack位
60 1 flag=0;
61 1 if(sda==0)flag=0;
62 1 else flag=1; //返回(~I_clock());
63 1 scl=0;
64 1 return(flag);
65 1 }
66
67 byte I_receive(void) //字节数据接收子程序
68 {
69 1 data byte i;
70 1 byte I_data=0;
71 1 sda=1;
72 1 for(i=0;i<8;i++)
73 1 {
74 2 I_data*=2;
75 2 ;
76 2 scl=0;
77 2 delay();
78 2 scl=1;
79 2 ;
80 2 ;
81 2 if(sda==1)I_data++;
82 2 ;
83 2 ;
84 2 }
85 1 scl=0;
86 1 ;
87 1 ;
88 1 ;
89 1 sda=0;
90 1 if(flag1==0) //不是最后一个ACK
91 1 {
92 2 ;
93 2 ;
94 2 scl=1;
95 2 delay();
96 2 scl=0;
97 2 }
98 1 else //是最后一个ACK
99 1 {
100 2 sda=1;
101 2 ;
102 2 ;
103 2 scl=1;
104 2 delay();
105 2 scl=0;
106 2 flag1=0;
107 2 }
108 1 return(I_data);
109 1 }
110
111 void main() //主程序
112 {
113 1 data byte i;
114 1 rom_sed[0]=0x00; rom_sed[1]=0x00;
115 1 rom_sed[2]=0x00; rom_sed[3]=0x55;
116 1 rom_sed[4]=0x23; rom_sed[5]=0x31;
117 1 rom_sed[6]=0x06; rom_sed[7]=0x92;
C51 COMPILER V7.02a PCF8563 04/22/2003 23:04:38 PAGE 3
118 1 rom_sed[8]=0x99;
119 1 for(i=0;i<255;i++)delay();
120 1 I_start();
121 1 if(~I_send(0xa2)) //pcf_write地址
122 1 {
123 2 if(~I_send(0x02)) //pcf_status寄存器地址
124 2 {
125 3 for(i=0;i<9;i++)
126 3 {
127 4 if(~I_send(rom_sed[i]));
128 4 else;
129 4 }
130 3 I_stop();
131 3 }
132 2 else;
133 2 }
134 1 else;
135 1
136 1 start: I_start();
137 1 if(~I_send(0xa2)) // pcf_write地址
138 1 {
139 2 if(~I_send(0x02)) // pcf_status寄存器地址
140 2 {
141 3 I_start();
142 3 if(~I_send(0xa3)) //写状态寄存器
143 3 {
144 4 for(i=0;i<7;i++)
145 4 {
146 5 if(i==6)
147 5 flag1=1;
148 5 else
149 5 flag1=0;
150 5 rom_rec[i]=I_receive();
151 5 switch(i)
152 5 {
153 6 case 1:rom_rec[i]=rom_rec[i]&0x7f;break;
154 6 case 2:
155 6 case 3:rom_rec[i]=rom_rec[i]&0x3f;break;
156 6 case 4:rom_rec[i]=rom_rec[i]&0x07;break;
157 6 case 5:rom_rec[i]=rom_rec[i]&0x9f;break;
158 6 default:break;
159 6 }
160 5 }
161 4 I_stop();
162 4 }
163 3 }
164 2 }
165 1 goto start;
166 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 319 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = 18 ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -