📄 8123.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 + -