📄 gm8125工作在单通道模式下的源程序.c
字号:
GM8125工作在单通道模式下的源程序
======================================================*/
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define DELAY_TIME 60000 //Delay time
//======变量定义区===========//
sbit ms=P3^4; //GM8125的管脚控制
sbit stadd0=P1^2;
sbit stadd1=P1^3;
sbit stadd2=P1^4;
sbit sradd0=P1^5;
sbit sradd1=P1^6;
sbit sradd2=P1^7;
sbit rst1=P3^5;
//--------------
sbit p33=P3^3;
//--------------
uchar SendBuff[5]={0xaa,0x45,0x67,0xbc,0xc9};
uchar ReceiveBuff[5]={0x00,0x00,0x00,0x00,0x00};
uchar i=0,j=0,k=1,c=0;
void delay(uint m)
{
uint n;
n=0;
while(n<m)
{
n++;
}
return;
}
void main(void)
{
TMOD=0x20;
IE=0x90;
SCON=0xc0;
while(1){
for(c=0;c<5;c++)
{
switch(c)
{
case 0:
TH1=0xd0;
TL1=0xd0;
PCON=0x00;
sradd0=1;
sradd1=0;
sradd2=0;
stadd0=1;
stadd1=0;
stadd2=0;
break;
case 1:
TH1=0xe8;
TL1=0xe8;
PCON=0x00;
sradd0=0;
sradd1=1;
sradd2=0;
stadd0=0;
stadd1=1;
stadd2=0;
break;
case 2:
TH1=0xf4;
TL1=0xf4;
PCON=0x00;
sradd0=1;
sradd1=1;
sradd2=0;
stadd0=1;
stadd1=1;
stadd2=0;
break;
case 3:
TH1=0xfa;
TL1=0xfa;
PCON=0x00;
sradd0=0;
sradd1=0;
sradd2=1;
stadd0=0;
stadd1=0;
stadd2=1;
break;
case 4:
TH1=0xfd;
TL1=0xfd;
PCON=0x00;
sradd0=1;
sradd1=0;
sradd2=1;
stadd0=1;
stadd1=0;
stadd2=1;
break;
default:
break;
}
TR1=1;
ms=1;
//---------------
SBUF=SendBuff[i];
while(TI==0);
TI=0;
i++;
REN=1;
while(j!=k);
REN=0;
k++;
TR1=0;
}}
}
void CommReceive(void) interrupt 4
{
if(RI)
{
ReceiveBuff[j]=SBUF;
RI=0;
j++;
}
}
//812X数据手册中明确说明了多通道模式下子口接收是完全主动响应不需要控制的,所以要求单片机采用中断方式来进行接收。
//1、再次详细说明:多通道模式下子口接收是实时的,即从机有数据上传上来,8123可以通过子口接收再由母口送出,同时地址线SRADD送出该串口地址,此过程完全不需要任何控制,单片机要做的工作仅是进入接收中断并将此数据进行需要的处理。示例程序中while(j1!= 1);语句只是表示希望等到数据接收完成后再进行下一步操作,这和查询方式是没有关系的,我不清楚你所说的“查询子口来接收”从何理解而来?
//2、单通道模式和多通道模式的区别就是单通道模式下一个时刻只允许一个子口工作,目的是保证子口和母口能以相同波特率工作,而多通道模式下所有子口可以同时收发数据,所以多通道母口和子口有一个波特率倍率的关系。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -