C51 COMPILER V9.59.0.0 MAIN 08/27/2022 22:38:02 PAGE 1 C51 COMPILER V9.59.0.0, COMPILATION OF MODULE MAIN OBJECT MODULE PLACED IN .\Objects\main.obj COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE main.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\main -.lst) OBJECT(.\Objects\main.obj) line level source 1 /*-------------------------------------------ͷ�ļ�-------------------------------------------*/ 2 #include <STC8.H> 3 #include "intrins.h" //��Ƭ��C����ʹ�û��ָ���ͷ�ļ��� 4 /*-------------------------------------------�궨��-------------------------------------------*/ 5 typedef unsigned char u8; //���ŵ� 8λ������ 6 typedef unsigned int u16; //���ŵ�16λ������ 7 typedef unsigned long u32; //���ŵ�32λ������ 8 /*-----------------------------------------BOOT�Ŷ���-----------------------------------------*/ 9 #define BOOT_PIN P00 //BOOT������ΪP0.0�š� 10 #define BOOT_RUN_APP 0 //BOOT��Ϊ�͵�ƽ��ʱ������APP�� 11 /*------------------------------------------���ܶ���------------------------------------------*/ 12 sfr IAP_TPS =0xf5; //EEPROM�����ȴ�ʱ����ƼĴ��� 13 u8 code INIT_MASK[6] ={0xff,0xff,0xff,0xff,0xff,0xff};//��ʼ�����룬����FLASH���Ծ���0xFF�� 14 void (* jmp_app)(void); //��ת������ 15 #define BOOT_STATUS 0x4200 //4200 ��BootLoader��״̬ 16 #define BOOT_JMP_ADDR 0x4201 //4201~4202 ��BootLoader����ת��ַ 17 18 #define APP_START 0x4203 //4203 ��APP����ʼ��ַ 19 #define APP_MAX 5 //APP��ռ�ÿռ�Ϊ5�ֽ� 20 #define APP_STATUS 0x4203 //4203 ��APP��״̬ 21 #define APP_SIZE 0x4204 //4204~4205 ��APP����С 22 #define APP_JMP_ADDR 0x4206 //4206~4207 ��APP��ַ 23 24 #define DATA_MAX 30 //APP�������ֵ����λΪ��������һ����Ϊ512�ֽڡ� 25 #define FLASH_SIZE (DATA_MAX*512) //APP�������ֵ����λΪ�ֽڡ� 26 27 #define read_jmp__addr (*(unsigned int code *)(0x0001)) //��ȡ�����������ת��ַ�� 28 #define read_jmp__addr_h (*(unsigned char code *)(0x0001)) 29 #define read_jmp__addr_l (*(unsigned char code *)(0x0002)) 30 31 #define read_boot_addr (*(unsigned int code *)(BOOT_JMP_ADDR))//��ȡBootloader����ת��ַ�� 32 #define read_boot_addr_h (*(unsigned char code *)(BOOT_JMP_ADDR)) 33 #define read_boot_addr_l (*(unsigned char code *)(BOOT_JMP_ADDR+1)) 34 35 #define read_app__addr (*(unsigned int code *)(APP_JMP_ADDR)) //��ȡAPP����ת��ַ�� 36 #define read_app__addr_h (*(unsigned char code *)(APP_JMP_ADDR)) 37 #define read_app__addr_l (*(unsigned char code *)(APP_JMP_ADDR+1)) 38 39 #define read_app__size (*(unsigned int code *)(APP_SIZE)) //��ȡAPP�Ĵ�С�� 40 #define read_app__size_h (*(unsigned char code *)(APP_SIZE)) 41 #define read_app__size_l (*(unsigned char code *)(APP_SIZE+1)) 42 43 #define read_app__flag (*(unsigned char code *)(APP_STATUS)) //��ȡAPP��״̬�� 44 #define read_boot_flag (*(unsigned char code *)(BOOT_STATUS)) //��ȡBootLoader��״̬�� 45 //λ���� [ D7 ][ D6 ][ D5 ][ D4 ][ D3 ][ D2 ][ D1 ][ D0 ] 46 //APP [ ʹ�ܱ�־λ ][ ��װ ��ɱ�־λ ][ Ԥ�� ] 47 //BOOT [ ʹ�ܱ�־λ ][ ��ʼ����ɱ�־λ ][ Ԥ�� ] 48 #define BIT_ENABLE 0x80 //ʹ��λ�� 49 #define SET_ENABLE (~(u8)(BIT_ENABLE)) //ʹ�ܸ����� 50 #define GET_ENABLE ( (u8)(BIT_ENABLE)) //��ѯʹ��λ�� 51 52 #define BIT_DONE 0x40 //���λ�� 53 #define SET_DONE (~(u8)(BIT_DONE)) //������������趨���ܡ� 54 #define GET_DONE ( (u8)(BIT_DONE)) //��ѯ���λ�� C51 COMPILER V9.59.0.0 MAIN 08/27/2022 22:38:02 PAGE 2 55 56 #define PD_APP__OK (GET_ENABLE|GET_DONE) //�ж�APP���Ƿ��кϷ��ij��� 57 #define APP__OK (0) //APP���ǺϷ��ij��� 58 /*------------------------------------------��������------------------------------------------*/ 59 #if 1//���ڲ��� 60 /*------------------------------------------------------- 61 ��������hard_init 62 �� ����Ӳ�������ʼ�������� 63 �����ߣ����� 64 �������̣��� 65 �������ڣ�2020-11-30 66 �ļ�¼�� 67 2020-12-08���ϲ��˴��ںͶ�ʱ���ij�ʼ��������Ϊhard_init�� 68 -------------------------------------------------------*/ 69 void hard_init(void){ 70 1 SCON = 0x50; //8λ����,�ɱ䲨���� 71 1 AUXR = 0x40; //��ʱ��1ʱ��ΪFosc,��1T 72 1 TMOD = 0x00; //�趨��ʱ��1Ϊ16λ�Զ���װ��ʽ 73 1 TL0 = 0xC0; //���ö�ʱ��ֵ 74 1 TH0 = 0x63; //20ms 75 1 TL1 = 0xCC; //�趨��ֵ 76 1 TH1 = 0xFF; //�趨��ֵ 77 1 TF0 = 0; //���TF0��־ 78 1 TF1 = 0; //���TF1��־ 79 1 TR0 = 0; 80 1 TR1 = 1; //������ʱ��1 81 1 ET1 = 0; //��ֹ��ʱ��1�ж� 82 1 } 83 /*------------------------------------------------------- 84 ��������send_data 85 �� �������ڷ��͵��ֽں����� 86 �� �룺 87 dat Ҫ���͵��ֽڡ� 88 �����ߣ����� 89 �������̣��� 90 �������ڣ�2020-11-30 91 �ļ�¼�� 92 -------------------------------------------------------*/ 93 void send_data(u8 dat){ 94 1 SBUF=dat; //����һ�����ݡ� 95 1 while(!TI); //�ȴ����ݷ��ꡣ 96 1 TI=0; //������ͱ�־λ�� 97 1 } 98 /*------------------------------------------------------- 99 ��������send_string 100 �� �������ڷ����ַ��������� 101 �� �룺 102 str Ҫ���͵��ַ����� 103 �����ߣ����� 104 �������̣��� 105 �������ڣ�2020-11-30 106 �ļ�¼�� 107 2020-12-08���Ż��˺�����ռ�ÿռ䡣 108 -------------------------------------------------------*/ 109 void send_string(u8 code * str){ 110 1 while(*str){ //�ж��ַ����Ƿ�ͷ�� 111 2 SBUF=*str++;//����һ�����ݡ� 112 2 while(!TI); //�ȴ����ݷ��ꡣ 113 2 TI=0; //������ͱ�־λ�� 114 2 } 115 1 } 116 /*------------------------------------------------------- C51 COMPILER V9.59.0.0 MAIN 08/27/2022 22:38:02 PAGE 3 117 ��������send_num 118 �� �������ڷ���16λ���ݺ���������ʽΪ%u�� 119 �� �룺 120 dat Ҫ���͵����ݡ� 121 �����ߣ����� 122 �������̣��� 123 �������ڣ�2020-12-03 124 �ļ�¼�� 125 -------------------------------------------------------*/ 126 void send_num(u16 dat){ 127 1 u8 n[5],i; 128 1 for(i=0;i<5;i++){ 129 2 n[i]=dat%10; 130 2 dat/=10; 131 2 } 132 1 if(n[4]){ 133 2 send_data('0'+n[4]); 134 2 } 135 1 if(n[4]|n[3]){ 136 2 send_data('0'+n[3]); 137 2 } 138 1 if(n[4]|n[3]|n[2]){ 139 2 send_data('0'+n[2]); 140 2 } 141 1 if(n[4]|n[3]|n[2]|n[1]){ 142 2 send_data('0'+n[1]); 143 2 } 144 1 send_data('0'+n[0]); 145 1 } 146 #endif 147 #if 1//FLASH�������� 148 /*------------------------------------------------------- 149 ��������eeprom_off 150 �� ����eeprom�رպ����� 151 �����ߣ����� 152 �������̣��� 153 �������ڣ�2020-11-30 154 �ļ�¼�� 155 -------------------------------------------------------*/ 156 void eeprom_off(void){ 157 1 IAP_CONTR = 0; //�ر�IAP���� 158 1 IAP_CMD = 0; //�������Ĵ��� 159 1 IAP_TRIG = 0; //��������Ĵ��� 160 1 IAP_ADDRH = 0xff;//����ַ���õ���IAP���� 161 1 IAP_ADDRL = 0xff;//����ַ���õ���IAP���� 162 1 } 163 /*------------------------------------------------------- 164 ��������eeprom_erase 165 �� ����eeprom�������������ڲ���һ�������� 166 �� �룺 167 addr Ҫ�����ĵ�ַ�� 168 �����ߣ����� 169 �������̣��� 170 �������ڣ�2020-11-30 171 �ļ�¼�� 172 -------------------------------------------------------*/ 173 void eeprom_erase(u16 addr){ 174 1 IAP_CONTR = 0x81; //ʹ��IAP 175 1 IAP_CMD = 3; //����IAP�������� 176 1 IAP_ADDRL = addr; //����IAP�͵�ַ 177 1 IAP_ADDRH = addr >> 8; //����IAP�ߵ�ַ 178 1 IAP_TRIG = 0x5a; //д��������(0x5a) C51 COMPILER V9.59.0.0 MAIN 08/27/2022 22:38:02 PAGE 4 179 1 IAP_TRIG = 0xa5; //д��������(0xa5) 180 1 _nop_(); //���Եȴ�һ�� 181 1 eeprom_off(); //�ر�IAP���� 182 1 } 183 /*------------------------------------------------------- 184 ��������eeprom_write 185 �� ����eeprom���ֽ�д������������ָ����ַдһ�����ݡ� 186 �� �룺 187 addr Ҫд��ĵ�ַ�� 188 dat Ҫд������ݡ� 189 �����ߣ����� 190 �������̣��� 191 �������ڣ�2020-11-30 192 �ļ�¼�� 193 -------------------------------------------------------*/ 194 void eeprom_write(u16 addr,u8 dat){ 195 1 IAP_CONTR = 0x81; //ʹ��IAP 196 1 IAP_CMD = 2; //����IAPд���� 197 1 IAP_ADDRL = addr; //����IAP�͵�ַ 198 1 IAP_ADDRH = addr >> 8; //����IAP�ߵ�ַ 199 1 IAP_DATA = dat; //дIAP���� 200 1 IAP_TRIG = 0x5a; //д��������(0x5a) 201 1 IAP_TRIG = 0xa5; //д��������(0xa5) 202 1 _nop_(); //���Եȴ�һ�� 203 1 eeprom_off(); //�ر�IAP���� 204 1 } 205 /*------------------------------------------------------- 206 ��������eeprom_write_boot_area 207 �� ����eeprom���ֽ�дϵͳ��������������ָ������д������ݡ� 208 �� �룺 209 addr Ҫд��ĵ�ַ������Ҫϵͳ�����ڣ� 210 buf Ҫд������ݻ��棻 211 len Ҫд������������� 212 �����ߣ����� 213 �������̣��� 214 �������ڣ�2020-11-30 215 �ļ�¼�� 216 2020-12-03���Ż��˹��ܣ�����ֻΪ�̶���������Ѽ�Сռ�ÿռ䣬 217 ����Ϊeeprom_write_boot_area�� 218 -------------------------------------------------------*/ 219 volatile u8 xdata eeprom_buf[512];//�����������ݵĻ��� 220 void eeprom_write_boot_area(u16 addr,u8 * buf,u16 len){ 221 1 u16 i,ad; 222 1 for(i=0;i<512;i++){ //��ϵͳ��ԭ�������ݶ��������ŵ����浱�С� 223 2 eeprom_buf[i]=(*(unsigned char code *)(BOOT_STATUS+i)); 224 2 } 225 1 eeprom_erase(BOOT_STATUS); //���ϵͳ���� 226 1 ad=addr-BOOT_STATUS; //��ȡ��ַ��ƫ������ 227 1 for(i=0;i<len;i++){ //������д�뵽���档 228 2 eeprom_buf[i+ad]=buf[i]; 229 2 } 230 1 for(i=0;i<512;i++){ //������д�ص���Ƭ���� 231 2 eeprom_write(BOOT_STATUS+i,eeprom_buf[i]); 232 2 } 233 1 } 234 #endif 235 236 volatile u16 data_count=0,proj_count=0;//�������ݼ������������ݼ��������� 237 /*------------------------------------------------------- 238 ��������data_save 239 �� �������ݱ��溯�������ڱ���Ӵ��ڽ��յ������ݡ� 240 �����ߣ����� C51 COMPILER V9.59.0.0 MAIN 08/27/2022 22:38:02 PAGE 5 241 �������̣��� 242 �������ڣ�2020-12-24 243 �ļ�¼�� 244 -------------------------------------------------------*/ 245 void data_save(void){ 246 1 u16 i; 247 1 if(proj_count<=256){ //����ܼ���С��256��˵���ǵ�һ�����ݡ� 248 2 eeprom_write(APP_JMP_ADDR ,eeprom_buf[1]); //��һ������ͨ������������ת��ַ�� 249 2 eeprom_write(APP_JMP_ADDR+1,eeprom_buf[2]); //����ת��ַ���������� 250 2 for(i=3;i<proj_count;i++){ //Ȼ��д��ʣ�µ����ݡ� 251 3 eeprom_write(i,eeprom_buf[i]); 252 3 } 253 2 }else{ //������ǵ�һ�����ݣ� 254 2 for(i=0;i<data_count;i++){ //�Ǿ�ֱ�ӱ��浽flash�����ˡ� 255 3 eeprom_write(i+(proj_count-data_count),eeprom_buf[i]); 256 3 } 257 2 } 258 1 } 259 260 void main(void){ 261 1 u16 i; //16λ��ʱ������ 262 1 u8 timeout; //ʱ�䳬ʱ�������� 263 1 IAP_TPS=24; //STC8G��STC8H�����ã�Ĭ��24MHz�� 264 1 /*------------------------------------------BootLoader��ʼ��-------------------------------*/ 265 1 if(read_boot_flag&GET_ENABLE){ //�ж��Dz��ǵ�һ������bootload -er�� 266 2 eeprom_write(BOOT_STATUS, SET_ENABLE); //�ǵĻ�����λʹ�ܱ�־�� 267 2 eeprom_write( APP_JMP_ADDR, (*(unsigned char code *)(0x0001))); //��ʼ��APP����ת��ַ�� 268 2 eeprom_write( APP_JMP_ADDR+1, (*(unsigned char code *)(0x0002))); // 269 2 eeprom_write(BOOT_JMP_ADDR, (*(unsigned char code *)(0x0001))); //��ʼ��BOOT����ת��ַ�� 270 2 eeprom_write(BOOT_JMP_ADDR+1, (*(unsigned char code *)(0x0002))); // 271 2 eeprom_write(BOOT_STATUS, SET_DONE); //��λ��ʼ����ϱ�־�� 272 2 } //����BootLoader��ʼ����ɡ� 273 1 /*------------------------------------------APP���---------------------------------------*/ 274 1 jmp_app=(u32)read_boot_addr; //Ĭ�ϰ�BootLoader�ĵ�ַ��APP��ַ����ֹ����ת�� 275 1 if((read_app__flag&PD_APP__OK)==APP__OK){ //�жϳ����Ƿ�Ϸ��� 276 2 jmp_app=(u32)read_app__addr; //����Ϸ�����APP��ת��ַ����ת������ 277 2 if(BOOT_PIN==BOOT_RUN_APP){jmp_app();} //BOOT��������ת��APP�ĵ�ƽ����ת��APP�� 278 2 } 279 1 /*-----------------------------------BootLoader����--------------------------------------*/ 280 1 hard_init(); //��ʼ�����ںͶ�ʱ���� 281 1 send_string("[Boot](0)\r\n"); //��ʾ������BOOT״̬�� 282 1 while(!RI); //�ȴ����ս����롣 283 1 RI=0; //������ձ�־λ�� 284 1 if(SBUF!='!'){ //������ǽ����룬˵�����ڴ�ʱ���Ҵ����ݵġ� 285 2 send_string("[Lock](1)\r\n");//��ʾҪ������Ƭ���� 286 2 while(1); //��ѭ����������Ƭ�����ܼ������ء� 287 2 } 288 1 /*--------------------------------------���ؽ���------------------------------------------*/ 289 1 send_string("[Erase](2)\r\n"); //��ʾ��ʼ������ 290 1 eeprom_erase(0x0000); //�Ȳ���һ������ 291 1 eeprom_write(0x0000,0x02); //����д����תָ� 292 1 eeprom_write(0x0001,(*(unsigned char code *)(BOOT_JMP_ADDR))); //ȡ��BOOT����ת��ַ��8λ��д�뵽ָ��� -�ַ�С� 293 1 eeprom_write(0x0002,(*(unsigned char code *)(BOOT_JMP_ADDR+1)));//ȡ��ַ��8λ���ֳ��������ֽ�д������� -��Լӿ������ٶȡ� 294 1 eeprom_write_boot_area(APP_START,INIT_MASK,APP_MAX); //��ʼ��APP״̬���� 295 1 eeprom_write(APP_STATUS,SET_ENABLE); //д��APPʹ�ܱ�־λ�� 296 1 for(i=512;i<FLASH_SIZE;i+=512){ //��������������� 297 2 eeprom_erase(i); 298 2 } 299 1 data_count=0; //���㵥�����ݼ������� C51 COMPILER V9.59.0.0 MAIN 08/27/2022 22:38:02 PAGE 6 300 1 proj_count=0; //�����������ݼ������� 301 1 send_string("[Start](3)"); //��ʾ��ʼ���ء� 302 1 TR0=1; //��ʱ���������ó�ʱ�жϡ� 303 1 timeout=250; //��һ�γ�ʱʱ��Ϊ250*20ms=5000ms=5s����λ�����������Ҫʱ�䣬��һ�γ�ʱ�� -��Ҫ��һЩ�� 304 1 while(1){ //��ѭ����������ݡ� 305 2 while(!RI){ //�ȴ����������ݡ� 306 3 if(TF0){ //ÿ����ʱ�����ʱ�� 307 4 TF0=0; //�����־λ�� 308 4 timeout--; //��ʱʱ��-1�� 309 4 if(timeout==0){ //��ʱ�����0��ʱ��˵����ʱ�ˡ� 310 5 TR0=0; //�رն�ʱ���� 311 5 if(proj_count){ //����ڼ���������ݣ� 312 6 send_string("\r\n[Get "); //��ʾ�����˶������ݡ� 313 6 send_num(proj_count); 314 6 send_string(" Byte](4)\r\n"); //��λ���ֽڡ� 315 6 data_save(); //������Щ���ݣ������ﱣ���ͨ���� -���һ�������ݡ� 316 6 eeprom_write(APP_SIZE, (u8)(proj_count>>8)); //��ȡAPP�Ĵ�С��8λ��д�뵽ָ���� -ַ�С� 317 6 eeprom_write(APP_SIZE+1,(u8)(proj_count)); //��ȡAPP�Ĵ�С��8λ���ֳ��������� -��д���������Լӿ������ٶȡ� 318 6 eeprom_write(APP_STATUS,SET_DONE); //��װ��ɣ�д��ɱ�־λ�� 319 6 jmp_app=(u32)read_app__addr; //��APP��ת��ַ����ת������ 320 6 }else{ //����ڼ�û�н��յ����ݣ� 321 6 send_string("\r\n[Time Out](5)\r\n"); //��ʾ��ʱ�� 322 6 jmp_app=(u32)read_boot_addr; //��BOOT����ת��ַ����ת������ 323 6 } 324 5 jmp_app(); //���ؽ�����ϣ���ת�� 325 5 } 326 4 } 327 3 } 328 2 TF0=0; //������յ��������ݣ�ҲҪ���㶨ʱ����־λ�� 329 2 RI=0; //ͬʱ������ձ�־λ�� 330 2 eeprom_buf[data_count++]=SBUF; //�����յ����ݱ��������� 331 2 proj_count++; //ͳ��Ŀǰ�ѽ��յ����ݴ�С�� 332 2 if(data_count==256){ //sscom5��λ����256�ֽڷ�һ��������ÿ�յ�256�ֽڵ�ʱ�� -�� 333 3 data_save(); //��Ҫ�����ݱ��������� 334 3 data_count=0; //ͬʱ��������ͳ�Ʊ�־λ�� 335 3 } 336 2 if(proj_count>FLASH_SIZE){ //������յ��Ĵ�С�����ܵĿռ䣬 337 3 send_string("\r\n[Overflow](6)\r\n"); //��ʾ��������� 338 3 while(1); //��ѭ����������Ƭ���� 339 3 } 340 2 timeout=50; //��ʱʱ��Ϊ50*20ms=1000ms=1s 341 2 } 342 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 977 ---- CONSTANT SIZE = 110 ---- XDATA SIZE = 512 ---- PDATA SIZE = ---- ---- DATA SIZE = 7 19 IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)