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

📄 pc_com.c

📁 此源码为商用的电力抄表系统的从机端源程序。通过电力载波模块
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -