⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.i

📁 此源码为商用的电力抄表系统的主机端源程序。通过电力载波模块
💻 I
字号:
#line 1 "main.c" /0   #line 1 "C:\KEIL\C51\INC\PHILIPS\REG922.H" /0       sfr P0   = 0x80; sfr P1   = 0x90; sfr P3   = 0xB0; sfr PSW  = 0xD0; sfr ACC  = 0xE0; sfr B    = 0xF0; sfr SP   = 0x81; sfr DPL  = 0x82; sfr DPH  = 0x83; sfr PCON = 0x87; sfr TCON = 0x88; sfr TMOD = 0x89; sfr TL0  = 0x8A; sfr TL1  = 0x8B; sfr TH0  = 0x8C; sfr TH1  = 0x8D; sfr IEN0 = 0xA8; sfr IP0  = 0xB8; sfr SCON = 0x98; sfr SBUF = 0x99;   sfr AUXR1  = 0xA2; sfr SADDR  = 0xA9; sfr SADEN  = 0xB9; sfr BRGR0  = 0xBE; sfr BRGR1  = 0xBF; sfr BRGCON = 0xBD; sfr CMP1   = 0xAC; sfr CMP2   = 0xAD; sfr DIVM   = 0x95; sfr FMADRH = 0xE7; sfr FMADRL = 0xE6; sfr FMCON  = 0xE4; sfr FMDATA = 0xE5; sfr I2ADR  = 0xDB; sfr I2CON  = 0xD8; sfr I2DAT  = 0xDA; sfr I2SCLH = 0xDD; sfr I2SCLL = 0xDC; sfr I2STAT = 0xD9; sfr IP1    = 0xF8; sfr IP1H   = 0xF7; sfr KBCON  = 0x94; sfr KBMASK = 0x86; sfr KBPATN = 0x93; sfr P0M1   = 0x84; sfr P0M2   = 0x85; sfr P1M1   = 0x91; sfr P1M2   = 0x92; sfr P3M1   = 0xB1; sfr P3M2   = 0xB2; sfr PCONA  = 0xB5; sfr PT0AD  = 0xF6; sfr RSTSRC = 0xDF; sfr RTCCON = 0xD1; sfr RTCH   = 0xD2; sfr RTCL   = 0xD3; sfr SSTAT  = 0xBA; sfr TAMOD  = 0x8F; sfr TRIM   = 0x96; sfr WDCON  = 0xA7; sfr WDL    = 0xC1; sfr WFEED1 = 0xC2; sfr WFEED2 = 0xC3; sfr IP0H   = 0xB7; sfr IEN1   = 0xE8;    sbit CY   = PSW^7; sbit AC   = PSW^6; sbit F0   = PSW^5; sbit RS1  = PSW^4; sbit RS0  = PSW^3; sbit OV   = PSW^2; sbit F1   = PSW^1; sbit P    = PSW^0;   sbit TF1  = TCON^7; sbit TR1  = TCON^6; sbit TF0  = TCON^5; sbit TR0  = TCON^4; sbit IE1  = TCON^3; sbit IT1  = TCON^2; sbit IE0  = TCON^1; sbit IT0  = TCON^0;   sbit EA   = IEN0^7; sbit EWDRT = IEN0^6; sbit EBO  = IEN0^5; sbit ES   = IEN0^4;   sbit ESR  = IEN0^4;  sbit ET1  = IEN0^3; sbit EX1  = IEN0^2; sbit ET0  = IEN0^1; sbit EX0  = IEN0^0;   sbit EC   = IEN1^2; sbit EKBI = IEN1^1; sbit EI2C = IEN1^0;   sbit PST  = IP0^6; sbit PC   = IP0^2; sbit PKBI = IP0^1; sbit Pi2c = IP0^0;   sbit PWDRT = IP0^6; sbit PBO  = IP0^5; sbit PS   = IP0^4;   sbit PSR  = IP0^4; sbit PT1  = IP0^3; sbit PX1  = IP0^2; sbit PT0  = IP0^1; sbit PX0  = IP0^0;    sbit SM0  = SCON^7;   sbit FE   = SCON^7; sbit SM1  = SCON^6; sbit SM2  = SCON^5; sbit REN  = SCON^4; sbit TB8  = SCON^3; sbit RB8  = SCON^2; sbit TI   = SCON^1; sbit RI   = SCON^0;   sbit I2EN  = I2CON^6; sbit STA   = I2CON^5; sbit STO   = I2CON^4; sbit SI    = I2CON^3; sbit AA    = I2CON^2; sbit CRSEL = I2CON^0;   sbit KB7 = P0^7;   sbit T1  = P0^7; sbit KB6 = P0^6;    sbit KB5 = P0^5; sbit KB4 = P0^4; sbit KB3 = P0^3; sbit KB2 = P0^2; sbit KB1 = P0^1; sbit KB0 = P0^0;      sbit RST     = P1^5; sbit INT1    = P1^4; sbit INT0    = P1^3;   sbit SDA     = P1^3; sbit T0      = P1^2;   sbit SCL     = P1^2; sbit RxD     = P1^1; sbit TxD     = P1^0;   sbit XTAL1= P3^1; sbit XTAL2= P3^0;   #line 10 "main.c" /0    #line 1 "timer.h" /0    void timer0_init(char interval, int count);   void setup_t0(unsigned int t, void (*proc)()); void disable_t0(void);  void setup_t1(unsigned int t, void (*proc)()); void disable_t1(void);  void setup_t2(unsigned int t, void (*proc)()); void disable_t2(void);  void setup_t3(unsigned int t, void (*proc)()); void disable_t3(void);  void setup_t4(unsigned int t, void (*proc)()); void disable_t4(void);  void wdt_init(); void clr_wdt();#line 12 "main.c" /0   #line 1 "sart.h" /0    #line 1 "C:\KEIL\C51\INC\PHILIPS\REG922.H" /0   #line 11 "C:\KEIL\C51\INC\PHILIPS\REG922.H" /1                                                                                                                                                                             #line 183 "C:\KEIL\C51\INC\PHILIPS\REG922.H" /0 #line 8 "sart.h" /0       sbit      RX_RDY        = 0x96;							  sbit      TX_BUSY       = 0x87;							  sbit      RX_BUSY       = 0x94;							  sbit      D_RDY         = 0x83;							  sbit      D_SYNC        = 0x80;							  sbit      SCLK      	= 0x81;							  sbit      SDATA   	    = 0x82;							  sbit      Rxok          = 0x97;							  sbit      RST_PLC       = 0x86;							  sbit      TX_EN         = 0x92;							  sbit      SYNC_50Hz     = 0x93;							  sbit      K2            = P3^1;	 sbit      K1            = P3^0;						   void uart_init(); int uart_recved(); int uart_processed(); unsigned char uart_getchar();   int recv_amr_frame(void);  void uart_sendchar(char c); void uart_sendblock(char buf[], int len);    void sync_sendchar(char c); int sync_recved(); int sync_data_ready(); int sync_getchar(); int sync_getblock(char *buf, int len); #line 13 "main.c" /0   #line 1 "plc.h" /0                                                  void send_data(unsigned char c);    void send_block(unsigned char block[], unsigned int len);   void write_reg(unsigned char op, unsigned char val);      int read_reg(unsigned char op); int read_buffer(unsigned char op, unsigned char buf[], unsigned int len);  void send_command(unsigned char cmd);  int set_rate(unsigned char val); int get_rate(); int set_mode(unsigned char val); int get_mode();   int set_fec(unsigned int on);   int set_autosync(unsigned int on);  int set_op(unsigned int normal_op);  int set_timing(unsigned char t1, unsigned char t2, unsigned char t3);  int get_timing(unsigned char t[3]);  int set_thres_sync(unsigned char val); int get_thres_sync();  int set_thres_det(unsigned char val); int get_thres_det();  int set_carrier(unsigned char f1, unsigned char f2, unsigned char f3, unsigned char f4); int get_carrier(unsigned char f[4]);  int set_scaling(unsigned char val); int get_scaling();  int set_agc(unsigned char agc[8]); int get_agc(unsigned char agc[8]);  int read_crc();  int read_rssi(unsigned char rssi[2]);  int write_txbuffer(unsigned char buffer[]);  int read_txbuffer(unsigned char buffer[]);  int read_rxbuffer(unsigned char buffer[]);  void send();      int plc_init(unsigned int smod); int plc_config(unsigned char buf[], unsigned int len); int plc_send(unsigned char frame[]); int plc_resend(); int plc_recved(); int plc_getframe(unsigned char frame[]); int plc_reset(); void plc_power_on(void);  void ist_count();  void timeout_t2(void); void thres_adjust();  void timeout_t4(void);  void w_flsh(unsigned char dat,unsigned char dat1); void Remote_Replies(unsigned char buf[]);  void Rx_Command_Reply(unsigned char comm);     #line 14 "main.c" /0   #line 1 "wr_flash.h" /0   #line 1 "C:\KEIL\C51\INC\PHILIPS\REG922.H" /0   #line 11 "C:\KEIL\C51\INC\PHILIPS\REG922.H" /1                                                                                                                                                                             #line 183 "C:\KEIL\C51\INC\PHILIPS\REG922.H" /0 #line 2 "wr_flash.h" /0             extern  bit  FLASH_WriteNByte(unsigned int addr, unsigned char  *dat_buf, unsigned char no);    extern  void  FLASH_ReadNByte(unsigned int addr, unsigned char *dat_buf, unsigned char no);         bit  FLASH_WriteByte(unsigned int addr, unsigned char dat);   unsigned int  FLASH_ReadByte(unsigned int addr);#line 15 "main.c" /0                    unsigned char code ADSS[4];   unsigned char plc_frame[18];   unsigned char code mcu_pc[5]= {0xfe,0xfe,0xfe,0xfe,0x68};  unsigned char code tx_buf[] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12};  unsigned char code master = 0;  extern idata unsigned char amr_frame[];    extern idata unsigned char wet;   unsigned char CRC;  extern bit timeout_40s; extern bit delay_tx; extern bit packet_recved; extern bit packet_recving; extern bit t1_enable; bit reply; bit adss_ok; bit CRC_switch;  void proc_amr_frame(unsigned char frame[]); void amr_send_frame(unsigned char buf[]); void return_inf(unsigned char frame,unsigned char inf_buf[],unsigned char dat); void uart_tx_mode(unsigned char i_buf[]); void rx_return(bit y,unsigned char R_data[]); int plc_send(unsigned char frame[]); void return_data(); void adss_crc(unsigned char buf[]);        main() {   unsigned char l;   unsigned char buf[2];         P0M1 = 0x80;	    P0M2 = 0x41; P1M1 = 0x7c; P1M2 = 0x80;   Rxok   = 0;  timer0_init(242, 10);	   uart_init();    wdt_init();  clr_wdt(); plc_power_on();  for(l = 0;l < 18;l ++) plc_frame[l]  =  0; clr_wdt();   timeout_40s = 0; setup_t2(4000, timeout_t2);    setup_t1(30, disable_t1);   plc_getframe(plc_frame);	   FLASH_ReadNByte(0x1c00,buf, 2); if(buf[0]!= 0){ write_reg(0x33, buf[0]); write_reg(0x3c, buf[1]); }     while (1) {      if (uart_recved()) {    disable_t2();  if (recv_amr_frame())	{   clr_wdt();   proc_amr_frame(amr_frame);	  clr_wdt();  } }  if (packet_recving) {  disable_t2();  while (!plc_recved()) { clr_wdt();}  packet_recving = 0;   plc_getframe(plc_frame);  clr_wdt(); setup_t4(40, timeout_t4);delay_tx = 1;   CRC = read_crc();   if (CRC == 0) {       Rxok = 0; clr_wdt();	                t1_enable = 1; adss_crc(plc_frame);            if(adss_ok==1){;  adss_ok = 0; amr_send_frame(plc_frame);	  while(delay_tx)clr_wdt();      clr_wdt();   }} if(CRC_switch){   rx_return(0,plc_frame);	  clr_wdt();   }  setup_t2(4000, timeout_t2);   }  if (timeout_40s)  {   thres_adjust(); packet_recved = 0;   }  if(~t1_enable)Rxok   = 1;    clr_wdt(); plc_getframe(plc_frame);   clr_wdt(); } }        void proc_amr_frame(unsigned char frame[]) {    unsigned char m_buf[2];  unsigned char contror_me;   unsigned char command;     contror_me = (frame[0] & 0xc0)>>6;   command    = frame[0] & 0x3f;    switch (contror_me){ Rxok   = 0;  case 0x00:{ uart_tx_mode(frame);}break;   case 0x01:{   switch (command){ case 0x01:{if(frame[5] == 0){m_buf[0] = 0x01;m_buf[1] = 0x01;return_inf(0x61,m_buf,2);}}break;   case 0x02:{if(frame[5] == 0){m_buf[0] = read_reg(0xF3);return_inf(0x62,m_buf,1);}}break;   case 0x03:{  if(frame[5] == 1){   switch (frame[5 + 1] ){  case 0x01:{ w_flsh(0x01,0x04);}break;    case 0x02:{ w_flsh(0x02,0x02);}break;     case 0x04:{ w_flsh(0x04,0x01);}break;    } m_buf[0] = read_reg(0xF3);return_inf(0x62,m_buf,1);}}break;   case 0x04:{if(frame[5] == 0)CRC_switch = 1;}break;   case 0x05:{if(frame[5] == 0)CRC_switch = 0;}break;   case 0x06:{;}break;  case 0x07:{;}break;  case 0x08:{if(frame[5] == 0)sync_sendchar(0x7e);}break; } }break;  case 0x02:{ uart_tx_mode(frame);}break;   case 0x03:{;}break;  }setup_t4(40, timeout_t4);delay_tx = 1;	 		 }     void amr_send_frame(unsigned char ibuf[]) {   unsigned char  i;  unsigned char  En;  En = ibuf[5] + 11;     clr_wdt();  for (i = 0; i < 5; i++) amr_frame[i] = mcu_pc[i];	  clr_wdt();   for (i = 0; i < ibuf[5]+6; i++)amr_frame[5+i] = ibuf[i];     amr_frame[En] = 0x16;    uart_sendblock(amr_frame, En+1);   clr_wdt();  }   void return_inf(unsigned char frame,unsigned char inf_buf[],unsigned char dat) {	  unsigned char con;  unsigned char buf[18]; clr_wdt(); buf[0] = frame; buf[1] = ADSS[0]; buf[2] = ADSS[1]; buf[3] = ADSS[2]; buf[4] = ADSS[3]; buf[5] = dat; for(con = 0;con < buf[5];con ++)      buf[6+con] = inf_buf[con];	   amr_send_frame(buf);   }   void uart_tx_mode(unsigned char i_buf[]) {    unsigned char i,tom;  unsigned char no_all = 0;  unsigned char o_buf[18]; tom = i_buf[5] + 6; for (i = 0; i < tom; i++)   o_buf[i]	 = 	i_buf[i];   if(tom < 18){		    no_all = 18 - tom; for (i = 0; i < no_all; i++) o_buf[tom+i]	 = 	0x00;  }  if(i_buf[5] > 18)i_buf[5] = 18;    write_txbuffer(o_buf);	  sync_sendchar(0x7e); }   void rx_return(bit y,unsigned char R_data[]) {  unsigned char i;  unsigned char o_buf[26]; if(y) o_buf[0] = 0x40 + 0x04;   else o_buf[0] = 0x40 + 0x05;    o_buf[1] = ADSS[0]; o_buf[2] = ADSS[1]; o_buf[3] = ADSS[2]; o_buf[4] = ADSS[3];  o_buf[5] = 0x12;     for (i = 0; i < 18; i++) o_buf[6 + i]	 = 	R_data[i];  amr_send_frame(o_buf); }   void adss_crc(unsigned char buf[]) { if((buf[1] == ADSS[0])&&(buf[2] == ADSS[1])&&(buf[3] == ADSS[2])&&(buf[4] == ADSS[3])) adss_ok = 1; else adss_ok = 0; }                             

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -