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

📄 relay.i

📁 此源码为商用的电力抄表系统的从机端源程序。通过电力载波模块
💻 I
字号:
#line 1 "relay.c" /0         #line 1 "D:\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  = IP1^6; sbit PC   = IP1^2; sbit PKBI = IP1^1; sbit Pi2c = IP1^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 8 "relay.c" /0    #line 1 "amr_config.h" /0     #line 10 "relay.c" /0   #line 1 "amr_cctr.h" /0  #line 1 "D:\KEIL\C51\INC\PHILIPS\REG922.H" /0   #line 11 "D:\KEIL\C51\INC\PHILIPS\REG922.H" /1                                                                                                                                                                             #line 183 "D:\KEIL\C51\INC\PHILIPS\REG922.H" /0 #line 1 "amr_cctr.h" /0                                            void amr_init();  unsigned char amr_check_cs(unsigned char frame[],bit Q);   unsigned char amr_calcu_cs(unsigned char frame[], unsigned int len,unsigned char i);  void amr_send_frame(unsigned char addr[6], unsigned char buf[]);   #line 11 "relay.c" /0   #line 1 "wr_flash.h" /0   #line 1 "D:\KEIL\C51\INC\PHILIPS\REG922.H" /0   #line 11 "D:\KEIL\C51\INC\PHILIPS\REG922.H" /1                                                                                                                                                                             #line 183 "D:\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 int dat);  #line 12 "relay.c" /0   #line 1 "relay.h" /0     void relay_init(void);  void accept_frame(unsigned char frame[]);   void send_to_cctr(unsigned char frame[],bit IL);   void relay_frame(unsigned char frame[], bit uplink);  void get_meter_addr(unsigned char frame[],bit err);  void test_dl(void);  void eviscerate(unsigned char int_frame[],unsigned char k); void com_reuner(unsigned char frame[]); void tx_com_data(unsigned char frame[],bit me);    void delay_1(unsigned char L_time);#line 13 "relay.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 char t, void (*proc)()); void disable_t4(void);  void wdt_init(); void clr_wdt();#line 14 "relay.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 test_meter(); void RD_8300(unsigned char frame[],bit err); void WR_8300(unsigned char frame[],bit err);   #line 15 "relay.c" /0   #line 1 "sart.h" /0    #line 1 "D:\KEIL\C51\INC\PHILIPS\REG922.H" /0   #line 11 "D:\KEIL\C51\INC\PHILIPS\REG922.H" /1                                                                                                                                                                             #line 183 "D:\KEIL\C51\INC\PHILIPS\REG922.H" /0 #line 8 "sart.h" /0         sbit      RX_RDY    = 0x81;							  sbit      TX_BUSY   = 0x92;							  sbit      RX_BUSY   = 0x94;							  sbit      D_RDY     = 0x85;							  sbit      D_SYNC    = 0x82;							  sbit      SCLK   	= 0x83;							  sbit      SDATA   	= 0x84;							  sbit      Rxok      = 0x97;							  sbit      RST_PLC   = 0x86;							  sbit      TX_EN     = 0x87;							  sbit      K3        = 0x96;							  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 16 "relay.c" /0   #line 1 "D:\KEIL\C51\INC\STDIO.H" /0                typedef unsigned int size_t;   #pragma SAVE #pragma REGPARMS extern char _getkey (void); extern char getchar (void); extern char ungetchar (char); extern char putchar (char); extern int printf   (const char *, ...); extern int sprintf  (char *, const char *, ...); extern int vprintf  (const char *, char *); extern int vsprintf (char *, const char *, char *); extern char *gets (char *, int n); extern int scanf (const char *, ...); extern int sscanf (char *, const char *, ...); extern int puts (const char *);  #pragma RESTORE   #line 17 "relay.c" /0       idata unsigned char plc_frame[18]; extern idata unsigned char amr_frame[];     unsigned char code auto_frame[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x81,0x06,0x43,0xC3,0xcc,0xcc,0xcc,0xcc,0x8d,0x16};   extern code unsigned char  METER_ADDR[6];  unsigned char   RELAY_PATH[6];	  idata  unsigned char   relay_level;	       unsigned char code ADDR_flash[6];  idata unsigned char cur_pos;  unsigned char L_amr;  unsigned char check_sum;  bit tmout_t1; extern bit open_com_data; extern bit NO_METER; extern bit delay_tx;        void accept_frame(unsigned char frame[]) {    unsigned char R, L, i;  bit  D7;   R = (frame[0] & 0x30) >> 4;	     D7 = (bit)(frame[0] & 0x80); L = frame[2*R + 4];    relay_level = R; for (i = 0; i < R; i++) { RELAY_PATH[2*i] = frame[2*i+3]; RELAY_PATH[2*i+1] = frame[2*i+4]; }   check_sum = 0xd0; for (i = 0; i < 6; i++) check_sum +=  METER_ADDR[i];   clr_wdt();  if(D7){	  	    send_to_cctr(frame,0);	   }    else { if(NO_METER)amr_send_frame(METER_ADDR, &frame[2*R+4-1]);	  else send_to_cctr(auto_frame,1);	     } }      void relay_frame(unsigned char frame[], bit uplink) {  unsigned char k;   k = frame[0] & 0x03;	  frame[0] &= 0xfc;  if (!uplink) {  frame[0] |= (k-1); } else {    	  frame[0] |= (k+1); } clr_wdt(); while(delay_tx)clr_wdt();   plc_send(frame);	  if(open_com_data)tx_com_data(frame,0);                  }     void send_to_cctr(unsigned char frame[],bit IL) { idata unsigned char buf[16];  unsigned char i, pos, max_bytes;  unsigned char come,R; bit TX;  TX = 0; R = 0;  if(IL)frame[14] =  check_sum;    if(IL){ L_amr = frame[7] + 4;come = 6;cur_pos = 0;TX = 1;	  }  else {	  switch(plc_frame[2*relay_level + 3]){	    case 0x01: {cur_pos = plc_frame[2*relay_level + 4];come = 2*relay_level +6;R = 0;TX = 1;R = 1;} break;     case 0x02: {cur_pos =0x02;come = 2*relay_level +4;R = 1;TX = 1;R = 0; L_amr = 14;}break;		  default:{TX = 0;}break; } }	  max_bytes = 18 - (2*relay_level + 4);   buf[0] = 0x40 | (relay_level << 4);    if ((unsigned char)(L_amr - cur_pos) > max_bytes)   buf[0] |= 0x04;		    else	buf[0] &= 0xfb;	  buf[1] = METER_ADDR[0]; buf[2] = METER_ADDR[1];  pos = 3;  if (relay_level > 0) { for (i = 0; i < relay_level; i++) { buf[2*i+3] = RELAY_PATH[2*i]; buf[2*i+4] = RELAY_PATH[2*i+1]; }	 pos = 2*relay_level + 3; }  buf[pos++] = cur_pos;  for (i = 0; i < max_bytes; i++) {	   if(IL){ buf[pos+i] = frame[come++];  cur_pos++; }	 else{ if(R){ buf[pos+i] = frame[6+cur_pos++];  } else buf[pos+i] = plc_frame[come++];    }	 if (cur_pos >= L_amr) { buf[pos+i] = 0x00;   if(cur_pos == max_bytes) cur_pos = 255;  		   } }  clr_wdt();  while(delay_tx)clr_wdt();   if(TX)plc_send(buf); if(open_com_data) tx_com_data(buf,0);;   }       void get_meter_addr(unsigned char frame[],bit err) {  unsigned char i; Rxok  = 0;   for(i = 0;i < 6; i++ ) frame[i] =  frame[8 +i];  for(i = 0;i < 10; i++ ) frame[7 +i] =  0;  eviscerate(frame,6);  if(err){ EA = 0;  FLASH_WriteNByte((int code *)METER_ADDR, frame, 6); EA = 1;    } for(i = 0;i < 6; i++ ) frame[i] =  METER_ADDR[i];  frame[8] = amr_check_cs(frame,0);   }    

⌨️ 快捷键说明

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