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

📄 8123.c

📁 gm8123串口扩展开发程序
💻 C
字号:
#include <reg52.h>
#define DELAY_TIME 30000 //Delay time
/**********************I/O 定义***********************/
sbit MS=P1^0;
sbit STADD0=P1^1;
sbit STADD1=P1^2;
sbit SRADD0=P1^3;
sbit SRADD1=P1^4;
sbit RESET=P1^5;
sbit TXE=P1^6;
sbit LED=P1^7;
/******************数据变量定义*****************/
unsigned char ReceiveBuff0=0;
unsigned char ReceiveBuff1=0;
unsigned char ReceiveBuff2=0;
unsigned char ReceiveBuff3=0;
unsigned char Contr_data;
unsigned char i=0;
/*********************************************/
/*函数名称:delay.C */
/*函数功能: 延时程序 */
/*********************************************/
void delay(unsigned int m)
{
	unsigned int n;
	n=0;
	while(n < m)
	{n++;}
	return;
}
/*********************************************/
/*函数名称:send0.c */
/*函数功能: 选择0口地址 */
/*********************************************/
void send0()
{
	STADD1=0;
	STADD0=0;
}
/*********************************************/
/*函数名称:send1.c */
/*函数功能: 选择1口地址 */
/*********************************************/
void send1()
{
	STADD1=0;
	STADD0=1;
}
/*********************************************/
/*函数名称:send2.c */
/*函数功能: 选择2口地址 */
/*********************************************/
void send2()
{
	STADD1=1;
	STADD0=0;
}
/*********************************************/
/*函数名称:send3.c */
/*函数功能: 选择3口地址 */
/*********************************************/
void send3()
{
	STADD1=1;
	STADD0=1;
}

/*********************************************/
/*函数名称:send1_data.c */
/*函数功能:1口发射数据
/*********************************************/
void send1_data()
{
	send1();
	SBUF=ReceiveBuff1;
	while(TI==0);
	TI=0;
}
/*********************************************/
/*函数名称:send2_data.c */
/*函数功能:2口发射数据
/*********************************************/
void send2_data()
{
	send2();
	SBUF=ReceiveBuff2;
	while(TI==0);
	TI=0;
}
/*********************************************/
/*函数名称:send3_data.c */
/*函数功能:3口发射数据
/*********************************************/
void send3_data()
{
	send3();
	SBUF=ReceiveBuff3;
	while(TI==0);
	TI=0;
}
/******************************************************/
/*函数名称: MAIN.C */
/*函数功能: 主机主程序 */
/*********************************************/
void main(void)
{

TMOD = 0x20; //指定定时器1 工作在方式2
IE = 0x90; //开串行口中断
SCON=0xc0; //串行口工作在方式3
TH1 = 0xFA; //装入定时器1 初值,设置主机工作波特率为4800bps
TL1 = 0xFA;
PCON=0x00;
RESET=0; //对GM8125 进行复位操作
RESET=1;
delay(DELAY_TIME);
Contr_data=0xf3; //装入命令字初值
TR1=1; //启动定时器1
MS=0; //GM8125 工作在写命令字模式下
send0(); //置GM8125 命令字地址
SBUF=Contr_data; //设置GM8125 子串口波特率为1200bps,母串口波特率为4800bps
while(TI==0);
TI=0;
delay(DELAY_TIME);
REN=1;
MS=1; //读命令字
delay(DELAY_TIME);

	while (ReceiveBuff0!=Contr_data) //验证写入的命令字是否正确,不正确则重新写
	{
	MS=0; //GM8125 工作在写命令字工作模式下
	SBUF=Contr_data;
	while(TI==0);
	TI=0;
	delay(DELAY_TIME);
	REN=1;
	MS=1; //读命令字
	delay(DELAY_TIME);
    LED=!LED;
	}

REN=0;
MS=0; //设置GM8125 工作在多通道工作模式下
TR1=0; //定时器1 停止
TH1 = 0xFA; //装入定时器1 初值,设置主控MCU 工作波特率为115200bps
TL1 = 0xFA;
PCON=0x00;
TR1=1; //启动定时器1
	//主控MCU 发送/接收程序
	REN=1;


    ReceiveBuff1=0x01;
    ReceiveBuff2=0x02;
    ReceiveBuff3=0x03; 

  

  



	 while(1)
	     {  
		   
		    send1_data();
		    delay(DELAY_TIME);
		 
		    send2_data();
		    delay(DELAY_TIME);
		 
		
		    send3_data();
		    delay(DELAY_TIME); 	   
		 }


}

void CommReceive(void) interrupt 4
{
	int i;
	if(RI)
	{
	    for(i=0;i<1;i++)
	    {
	         if(SRADD1==0&&SRADD0==0)
	         {
	            ReceiveBuff0=SBUF; //读命令字存入ReceiveBuff0
	            break;
			 }
			 if(SRADD1==0&&SRADD0==1)
	         {
	            ReceiveBuff1=SBUF; //读命令字存入ReceiveBuff0
	            break;
			  }
			  if(SRADD1==1&&SRADD0==0)
	          {
	             ReceiveBuff2=SBUF; //读命令字存入ReceiveBuff0
	             break;
			  }
			  if(SRADD1==1&&SRADD0==1)
	          {
	            ReceiveBuff3=SBUF; //读命令字存入ReceiveBuff0
	            break;
		   	  }
		  }
		  RI=0;
	}
}

⌨️ 快捷键说明

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