📄 yk_469_tx.c
字号:
#pragma code
#include <upsd3200.h>
#include <ctype.h>
#include <stdio.h>
#include <intrins.h>
#include <math.h>
/* ===================================== 开始 : 数据定义 ===================================== */
#define DATAIN_A (volatile unsigned char xdata *) 0x800 /*PA端口读数据寄存器*/
#define CONTROL_A (volatile unsigned char xdata *) 0x802 /*PSD模块内的PB端口为
0 -- MCU I/O 1-- Address Out */
#define DATAOUT_A (volatile unsigned char xdata *) 0x804 /* PA端口输出数据寄存器 */
#define DIRECTION_A (volatile unsigned char xdata *) 0x806 /* PA端口方向寄存器的定义 */
#define DRIVE_A (volatile unsigned char xdata *) 0x808 /* PA端口驱动方式寄存器的定义
; 1 -- Open Drain or High slew rate
; 0 -- CMOS
; Bit 7, Bit 6, Bit 5, Bit 4, Bit 3, Bit 2, Bit 1, Bit 0
; Open Open Open Open Slew Slew Slew Slew */
#define DATAIN_B (volatile unsigned char xdata *) 0x801 /*PB端口读数据寄存器*/
#define CONTROL_B (volatile unsigned char xdata *) 0x803 /*PSD模块内的PB端口为
0 -- MCU I/O 1-- Address Out */
#define DATAOUT_B (volatile unsigned char xdata *) 0x805 /* PB端口输出数据寄存器 */
#define DIRECTION_B (volatile unsigned char xdata *) 0x807 /* PB端口方向寄存器的定义 */
#define DRIVE_B (volatile unsigned char xdata *) 0x809 /* PB端口驱动方式寄存器的定义
; 1 -- Open Drain or High slew rate
; 0 -- CMOS
; Bit 7, Bit 6, Bit 5, Bit 4, Bit 3, Bit 2, Bit 1, Bit 0
; Open Open Open Open Slew Slew Slew Slew */
#define DATAIN_C (volatile unsigned char xdata *) 0x810 /*PC端口读数据寄存器*/
#define DATAOUT_C (volatile unsigned char xdata *) 0x812 /* PC端口输出数据寄存器 */
#define DIRECTION_C (volatile unsigned char xdata *) 0x814 /* PC端口方向寄存器的定义 */
#define DRIVE_C (volatile unsigned char xdata *) 0x816 /* PC端口驱动方式寄存器的定义
; 1 -- Open Drain or High slew rate
; 0 -- CMOS
; Bit 7, Bit 6, Bit 5, Bit 4, Bit 3, Bit 2, Bit 1, Bit 0
; Open Open Open Open Open Open Open Open */
#define DATAIN_D (volatile unsigned char xdata *) 0x811 /*PD端口读数据寄存器*/
#define DATAOUT_D (volatile unsigned char xdata *) 0x813 /* PD端口输出数据寄存器 */
#define DIRECTION_D (volatile unsigned char xdata *) 0x815 /* PD端口方向寄存器的定义 */
#define DRIVE_D (volatile unsigned char xdata *) 0x817 /* PD端口驱动方式寄存器的定义*/
#define TX_EN P1_6
#define TX_D P4_6
#define RX_D P4_7
#define SCL2 P3_7
#define SDA2 P3_6
#define Mode1_T0_h 0xf8//0xf1
#define Mode1_T0_l 0xcd//0x9a
#define Mode1_T1_h 0xB8
#define Mode1_T1_l 0x00
unsigned char Brd_Addr;
unsigned char ch_Addr;
unsigned char buff_index = 0;
unsigned char send_index,checksum_error_count = 0,para_num,para;
unsigned char site_h,site_l;
unsigned char Ctrl_step_469;
unsigned char timer1_count,delay_time1;
unsigned char send_byte,send_byte_index,send_bit,receive_bit,receive_byte_index,cmx469_receive_data_buff;
xdata unsigned char cmx469_TX_buff[250],cmx469_RX_data_buff[250],cmx469_RX_data[250];
xdata unsigned char data_para_buff[250],data_para[80],out_array[64][2];
bit receive_all ,receive_para_flag,out_array_flag = 0,send_data;
bit flag_timer1_time_out,flag_cmx469_send_finished,flag_cmx469_receive_finished,flag_receive_begin;
// data_para_buff[150] -- data_para_buff[3*k1-1] = 三组基站控制参数缓冲区 共(149)个数 + CheckSUM
// data_para[50] = 基站控制参数 共(49)个数 + CheckSUM
// data_para[0] -- 本地883放大倍数(1 Byte)
// data_para[1] -- 链路883放大倍数(1 Byte)
// data_para[2] -- 本地883调整倍数(2 Bytes)高字节
// data_para[3] -- 本地883调整倍数(2 Bytes)低字节
// data_para[4] -- 链路883调整倍数(2 Bytes)高字节
// data_para[5] -- 链路883调整倍数(2 Bytes)低字节
// data_para[6] -- 有线与无线SS延时差(2 Bytes)高字节
// data_para[7] -- 有线与无线SS延时差(2 Bytes)低字节
// data_para[8] -- 有线与无线SL延时差(2 Bytes)高字节
// data_para[9] -- 有线与无线SL延时差(2 Bytes)低字节
// data_para[10] -- 有线与无线LS延时差(2 Bytes)高字节
// data_para[11] -- 有线与无线LS延时差(2 Bytes)低字节
// data_para[12] -- 无线SS延时Offset(2 Bytes)高字节
// data_para[13] -- 无线SS延时Offset(2 Bytes)低字节
// data_para[14] -- 无线SL延时Offset(2 Bytes)高字节
// data_para[15] -- 无线SL延时Offset(2 Bytes)低字节
// data_para[16] -- 无线LS延时Offset(2 Bytes)高字节
// data_para[17] -- 无线LS延时Offset(2 Bytes)低字节
// data_para[18] -- 最高场强门限(sen_high = 0x40 -- 0x78)
// data_para[19] -- 最低场强门限(sen_low = 0x40 -- 0x78 )
// data_para[20] -- 除数(1或2)
// data_para[21] -- 定时基数(Timer_14ms)
// data_para[22] -- 一级、二级链路延时1(单位Timer_14ms)
// data_para[23] -- 一级、二级链路延时2(单位Timer_14ms)
// data_para[24] -- 回路时间1(单位1ms)
// data_para[25] -- 回路时间2(单位1ms)
// data_para[26] -- 去头时间(pre_Timer = 单位1ms)
// data_para[27] -- 自解音锁及链路音锁CSQ时间差(单位10ms)
// data_para[28] -- 链路防抖动时间(单位 1ms)
// data_para[29] -- 本地防抖动时间(单位 1ms)
// data_para[30] -- Step11_12_1(单位 1ms)
// data_para[31] -- Step11_12_2(单位 1ms)
// data_para[32] -- 本地发射延时(单位 1ms)
// data_para[33] -- NC
bit flag_read_para,flag_para_write,flag_zero,flag_para;
/* ===================================== 结束 : 数据定义 ===================================== */
/* ===================================== 开始 : 子程序 ===================================== */
/*
=====================================================================
uPSD_Init - Initialize uart and set up timer for baud rate
serial_info=[serial_mode,mp_en,receive_en,bit9_en,timer_ch,serial_ch]
======================================================================
*/
void upsd_init(unsigned char uart0_baud,unsigned char uart1_baud,unsigned char init_reset)
{
/*
7 6 5 4 3 2 1 0
IEA,IE: 中断允许控制寄存器 (1 -- 允许中断, 0 -- 禁止中断)
IPA,IP: 中断优先级寄存器 (1 -- 高优先级, 0 -- 低优先级)
TMOD Gate C/T M1 M0 Gate C/T M1 M0 = 00100001
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI = 01010000
SCON2 SM0 SM1 SM2 REN TB8 RB8 TI RI = 01010000
PCON SMOD SMOD1 LVREN ADSFINT RCLK1 TCLK1 PD IDLE = 00000000
TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 = 00000101
T2CON TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2 = 00110000
IP — — PT2 PS PT1 PX1 PT0 PX0 = 00010101
T2 UART1 T1 INT1 T0 INT0
IPA PDDC — — PS2 — — PI2C PUSB = 00000000
DDC UART2 I2C USB
IEA EDDC — — ES2 — — EI2C EUSB = 00010000
DDC UART2 I2C USB
IE EA — ET2 ES ET1 EX1 ET0 EX0 = 00010101
允许中断总开关 T2 UART1 T1 INT1 T0 INT0
Baud Rate fOSC SMOD Timer1
C/T Mode Reload Value
19.2K 22.1184MHz 0 0 2 FDh
9.6K 22.1184MHz 0 0 2 FAh
4.8K 22.1184MHz 0 0 2 F4h
TH1,TL1 TH0,TL0
RCAP2L, RCAP2H
*/
TMOD = 0x21; /* put timer 1 into MODE 2 , timer 0 to MODE 1 */
SCON = 0x50; /* UART1 方式1,允许接收 */
SCON2 = 0x50; /* UART2 方式1,允许接收 */
PCON = 0; /* UART2 以timer1作为波特率发生器 */
TCON = 5; /* 外部中断0,外部中断1 为沿触发 */
T2CON = 0x30; /* UART1 以timer2作为波特率发生器,The Baud Rate Generation Mode is selected by (RCLK, RCLK1)=1 and/or (TCLK, TCLK1)=1. */
IP = 0x05; /* UART1, 外部中断0,外部中断1 为高优先级 */
IPA = 0x00; /* UART2 为高优先级 */
IEA = 0x00;
if(init_reset == 0)
{
IE = 0x2;
}
else
{
IE = 0x82;
}
P1SFS = 0x00;
P3SFS = 0x00;
P4SFS = 0;
/*
uart0_baud = 0 ----> baud rate = 4.8K (RCAP2H,RCAP2L ---- TH2,TL2)
uart0_baud = 1 ----> baud rate = 9.6K (RCAP2H,RCAP2L ---- TH2,TL2)
uart0_baud = 2 ----> baud rate = 19.2K (RCAP2H,RCAP2L ---- TH2,TL2)
uart1_baud = 0 ----> baud rate = 4.8K (TH1,TL1)
uart1_baud = 1 ----> baud rate = 9.6K (TH1,TL1)
uart1_baud = 2 ----> baud rate = 19.2K (TH1,TL1)
*/
if(uart0_baud == 0)
{
/* UART0 baud rate = 4.8K
Baud Rate = fOSC / (32 x [65536- (RCAP2H, RCAP2L) ]
(RCAP2H, RCAP2L) = 65536 - fOSC / (32 x Baud Rate) */
RCAP2L = 0x70;
RCAP2H = 0xff;
if(init_reset == 0)
{
TL2 = 0x70;
TH2 = 0xff;
}
}
else
{
if(uart0_baud == 1)
{
/* UART0 baud rate = 9.6K */
RCAP2L = 0xb8;
RCAP2H = 0xff;
if(init_reset == 0)
{
TL2 = 0xb8;
TH2 = 0xff;
}
}
else
{
if(uart0_baud == 2)
{
/* UART0 baud rate = 19.2K */
RCAP2L = 0xdc;
RCAP2H = 0xff;
if(init_reset == 0)
{
TL2 = 0xdc;
TH2 = 0xff;
}
}
}
}
if(uart1_baud == 0)
{
/* UART1 baud rate = 4.8K
Baud Rate = (2SMOD / 32) x (fOSC / (12 x [256 – (TH1)]))*/
TH1 = 0xf4;
if(init_reset == 0)
{
TL1 = 0xf4;
}
}
else
{
if(uart1_baud == 1)
{
/* UART1 baud rate = 9.6K */
TH1 = 0xfa;
if(init_reset == 0)
{
TL1 = 0xfa;
}
}
else
{
if(uart1_baud == 2)
{
/* UART1 baud rate = 19.2K */
TH1 = 0xfd;
if(init_reset == 0)
{
TL1 = 0xfd;
}
}
}
}
TR0 = 1;
TR1 = 1; /*TCON.6*/
TR2 = 1;
/* 2nd UART 19200波特率22.1184MHz*/
WDKEY = 0x22; /* 0x55 ---- 关掉Watch Dog */
WDRST=0x00;
}
void I2C2_init()
{
SCL2 = 1;
SDA2 = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void I2C2_start()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL2 = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA2 = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL2 = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void I2C2_stop()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL2 = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA2 = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL2 = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA2 = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void I2C2_senddata(unsigned char x1)
{
unsigned char i,k;
for(i = 0; i<8; i++)
{
k = x1 & 0x80;
if (k == 0)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA2 = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
else
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA2 = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
SCL2 = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL2 = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
x1 <<= 1;
}
SDA2 = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL2 = 1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL2 = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -