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

📄 yk_469_tx.c

📁 CMX469发送数据,经调试完全可用,电路连接完全参考数据手册
💻 C
📖 第 1 页 / 共 2 页
字号:
							  #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 + -