pc_com.c

来自「此源码为商用的电力抄表系统的从机端源程序。通过电力载波模块」· C语言 代码 · 共 98 行

C
98
字号
#include <REG922.H>

#include "pc_com.h"
#include "sart.h"
#include "plc.h"
#include "string.h"
#include "amr_cctr.h"
#include "amr_config.h"
#include "wr_flash.h"


#define uint unsigned int
#define uchar unsigned char

//#define reg_setting 0x1d06

extern idata uchar amr_frame[];  // AMR frame buffer
extern code uchar  METER_ADDR[6];
 uchar code  reg_setting[2]; 
/*=============================================================================* /

            读FLASH 写入8300寄存器
/*=============================================================================*/

void RW_flash_data()
{
  uchar d_frame[2];
    EA = 0; 
    FLASH_ReadNByte ((int code *)&reg_setting[0], d_frame,2);
    EA = 1; 

  write_reg(REG_WR_3E, d_frame[0]);  //写入8300寄存器
  write_reg(REG_WR_3F, d_frame[1]); 

  //新方法写入8300
 // write_reg(REG_WR_3E, reg_setting[0]);  //写入8300寄存器
 // write_reg(REG_WR_3F, reg_setting[1]); 

  // uart_sendchar(d_frame[0]);
  // uart_sendchar(d_frame[1]); 

}
/*=============================================================================*/

//             减0x33
/*=============================================================================*/

void eviscerate(uchar frame[],uchar k)//减0x33
{
  uchar i;
 for(i = 0;i < k;i ++)
  frame[i] -= 0x33;

}

/*=============================================================================*/

//             加0x33
/*=============================================================================*/

void punctuate(uchar frame[],uchar k)
{
  uchar i;
 for(i = 0;i < k;i ++)
  frame[i] +=  0x33;
  
}

/*=============================================================================*/
/*=============================================================================*/

void tx_com_data(uchar frame[],bit me) //串口查看数据处理
{
 uchar i;

 for(i = 0; i < 6;i++)amr_frame[i] = METER_ADDR[i]; //地址

  amr_frame[6] = 0;    //C = 0
  amr_frame[7] = 20;   //L = ?
  
  if(me)amr_frame[8] = 0x55; //ID1 +33 电力网发出数据
  else  amr_frame[8] = 0x57; //ID1 +33 本地发出的数据

  amr_frame[9] = 0x13; //ID0 +33 

  for(i = 0; i < 20;i++)
  amr_frame[10 + i] = frame[i];
  punctuate(&amr_frame[10],18); //+33

  amr_frame[amr_frame[AMR_OS_L] + 8] = amr_check_cs(amr_frame,0);//校验和

  amr_send_frame(METER_ADDR, amr_frame);
 // com_reuner(buf);
}

/*=============================================================================*/

⌨️ 快捷键说明

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