📄 fm31xx.lst
字号:
C51 COMPILER V7.50 FM31XX 06/10/2007 23:11:21 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE FM31XX
OBJECT MODULE PLACED IN .\out\fm31xx.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE fm31xx.c LARGE OPTIMIZE(SIZE) REGFILE(.\out\mbtest.ORC) BROWSE INCDIR(C:\Ke
-il\C51\LIB\;D:\TEST_C020\MC_55_C\) DEBUG OBJECTEXTEND OBJECT(.\out\fm31xx.obj)
line level source
1
2 #include "all.h"
3
4
5 void FM_eeprom (void) _task_ FMROM {
6 1 EECmd = FM_MEMORY_RD;
7 1
8 1 while (1) {
9 2 Dog_FMROMI_cnt=0; //看门狗计数器
10 2 os_wait2(K_SIG, 0);
11 2 Dog_FMROMI_cnt=1; //看门狗计数器
12 2 if (EETask == 0xff) continue;
13 2
14 2 if (EECmd == FM_MEMORY_WR ) {
15 3
16 3 write_fm_memory(FM_addr,iic_data_buf,FM_num);
17 3 // os_wait2(K_TMO, 2);
18 3 }
19 2 else if (EECmd == FM_MEMORY_RD) {
20 3 read_fm_memory(FM_addr,iic_data_buf,FM_num);
21 3 }
22 2 if (EETask != 0xff) os_send_signal(EETask);
23 2 Dog_FMROMI_cnt=0; //看门狗计数器
24 2 }
25 1 }
26
27
28 //void read_fm_memory(unsigned int addr_fm,unsigned char*addr_cpu,unsigned char read_num);
29 //void write_fm_memory(unsigned int addr_fm,unsigned char *addr_cpu,unsigned char write_num);
30 //unsigned char hex_bcd(unsigned char hex_value);
31 //uchar smbus_send (uchar chip_select,uint iic_address,uchar* cpu_address,uchar write_num);
32 //uchar smbus_receive (uchar chip_select,uchar* cpu_address,uchar receive_num);
33
34
35
36 /*
37 uchar hex_bcd(uchar hex_value)//完成HEX(99以内)到BCD(两位)的确转换
38 {
39 return(((hex_value/10)<<4)|(hex_value%10));
40 }
41
42 */
43
44 bit HighB=0;
45 uchar Ttems;
46 uchar smbus_send (uchar chip_select,uint iic_address,uchar* cpu_address,uchar write_num)
47 {
48 1
49 1 uchar send_try_number = 0;
50 1 uchar send_err_flag;
51 1
52 1
53 1 while(sm_busy); // Wait for SMBus to be free.
54 1
C51 COMPILER V7.50 FM31XX 06/10/2007 23:11:21 PAGE 2
55 1 while(send_try_number<4)
56 1 {
57 2 sm_busy = 1; // Occupy SMBus (set to busy)
58 2 write_start_num = 0;
59 2 slave_add = chip_select; // Chip select + WRITE
60 2 HighB=0;
61 2 //if(iic_address>255) {
62 2 HighB=1;
63 2 Ttems=(uchar)(iic_address>>7);
64 2 Ttems&=0x0e;
65 2 slave_add=slave_add| Ttems;
66 2 //}
67 2 iic_ram_add = iic_address; // fm_clock的寄存器地址
68 2 iic_data_len = write_num; // 写PCF8563字节数
69 2 iic_buf_p = cpu_address;
70 2
71 2 // Start transfer
72 2 DISABLE();
73 2 smbus_ms_cnt = 0;
74 2 ENABLE();
75 2
76 2 STA=1;
77 2 send_err_flag = 0;
78 2 while(sm_busy) //忙且无中断时间小于50mS // Wait for transfer to finish
79 2 {
80 3 //wait
81 3 if((++smbus_ms_cnt>65000))
82 3 {
83 4 //异常停止
84 4 DISABLE();
85 4 send_err_flag = 1;
86 4 sm_busy = 0;
87 4 ENABLE();
88 4 break;
89 4 }
90 3 Delay1us;
91 3 }
92 2
93 2 if((iic_error_flag)||(send_err_flag == 1))
94 2 {
95 3 //出错
96 3 send_try_number++;
97 3 SMBus_Init();
98 3
99 3 }
100 2 else
101 2 {
102 3 //ok
103 3
104 3 return 1; //成功
105 3 }
106 2 }
107 1
108 1
109 1 return 0;//error return
110 1 }
111
112
113 uchar smbus_receive (uchar chip_select,uchar* cpu_address,uchar receive_num)
114 {
115 1
116 1 uchar receive_try_number = 0;
C51 COMPILER V7.50 FM31XX 06/10/2007 23:11:21 PAGE 3
117 1 uchar receive_err_flag;
118 1
119 1
120 1 if(receive_num)
121 1 {
122 2 while (sm_busy); // Wait for bus to be free.
123 2 while(receive_try_number<4)
124 2 {
125 3 sm_busy = 1; // Occupy SMBus (set to busy)
126 3 read_start_num = 0;
127 3 slave_add = chip_select; // Chip select + READ
128 3
129 3 if(HighB==1) {
130 4
131 4
132 4 slave_add=slave_add| Ttems;
133 4
134 4 }
135 3
136 3 iic_data_len = receive_num;
137 3 iic_buf_p = cpu_address;
138 3
139 3 STA = 1; // Start transfer
140 3 DISABLE();
141 3 smbus_ms_cnt = 0;
142 3 ENABLE();
143 3 receive_err_flag = 0;
144 3
145 3 while(sm_busy) //忙且无中断时间小于50mS // Wait for transfer to finish
146 3 {
147 4 //wait
148 4 if((++smbus_ms_cnt>50000))
149 4 {
150 5 //异常停止
151 5 DISABLE();
152 5 receive_err_flag = 1;
153 5 sm_busy = 0;
154 5 ENABLE();
155 5 break;
156 5 }
157 4 Delay1us;
158 4 }
159 3
160 3 if(iic_error_flag||(receive_err_flag == 1))
161 3 {
162 4 //出错
163 4 receive_try_number++;
164 4 SMBus_Init();
165 4 }
166 3 else
167 3 {
168 4 //ok
169 4
170 4 return 1; //成功
171 4 }
172 3 }
173 2
174 2
175 2 }
176 1
177 1 return 0;//error return
178 1
C51 COMPILER V7.50 FM31XX 06/10/2007 23:11:21 PAGE 4
179 1 }
180
181
182
183
184 void read_fm_memory(unsigned int addr_fm,unsigned char *addr_cpu,unsigned char read_num)
185 {
186 1 smbus_send(FM_MEMORY_WR,addr_fm,addr_cpu,0); //set fm_memory addr
187 1 smbus_receive(FM_MEMORY_RD,addr_cpu,read_num);
188 1 }
189
190
191 void write_fm_memory(unsigned int addr_fm,unsigned char *addr_cpu,unsigned char write_num)
192 { uchar mmk;
193 1 mmk=smbus_send(FM_MEMORY_WR,addr_fm,addr_cpu,write_num);
194 1 if(mmk)
195 1 mmk=12;
196 1 else
197 1 mmk=0;
198 1
199 1 }
200
201
202
203
204
205
206
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 555 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 1 28
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -