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

📄 8123.txt

📁 对于串口扩展器GM8123
💻 TXT
字号:
#include <reg51.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;
/******************数据变量定义*****************/
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=0xf0; //装入命令字初值
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);
}
REN=0;
MS=0; //设置GM8125 工作在多通道工作模式下
TR1=0; //定时器1 停止
TH1 = 0xFA; //装入定时器1 初值,设置主控MCU 工作波特率为115200bps
TL1 = 0xFA;
PCON=0x00;
TR1=1; //启动定时器1
/*主控MCU 发送/接收程序*/
REN=1;
 while(1)
     {  
	   
	    //接收电脑数据,发送给从机
		while(ReceiveBuff3==0);
		TXE=1;    //ptr2000处于发射状态
		send2_data();  //ptr2000发射数据
        
		TXE=0;
		//接收从机数据,发送给电脑
		while(ReceiveBuff2==0);
        send3_data();  	   
	 }
}

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 + -