// GM8123 Instructions
#define Contr_data 0xf1 // GM8123 命令字
//*********************************************************
// 此程序应用的环境是 3个从机均以 2400bps 的波特率工作,要求主机对3个从机分别接收数据
void InitGM8123 (void)
{
GM8123_RST = 1;
//1 注意:复位后的帧格式为 11bit,母串口波特率为 4800bps
TXSTA = 0x64; // 选择异步方式,HIGH速;9位数据,允许发送;0110 0100
TXSTAbits.TX9D = 1; //
RCSTA = 0xf0; //0x90; 11110000 // 允许串口工作,接收9位数据;
BAUDCON = 0;
SPBRGH = 0;
SPBRG = 0x33; // 4800 // 设置//装入初值,设置主机工作波特率为 4800bps
//2
step3:
GM8123_RST = 0; //对 GM8125 进行复位操作
ClrWdt();
GM8123_RST = 1;
Delay1KTCYx(0xfa); //复位信号在外部电平拉高后内部还将延时 200ms
Delay1KTCYx(0xfa);
//3 写入命令字0XF1
ReceiveBuff0 = 0; //对command set 初值。
STADD0 = 0;
STADD1 = 0;
GM8123_MS = 0;//write command
TXREG = Contr_data; //10bit ,子串口2400bps母串口9600bps
while(TXSTAbits.TRMT == 0);
//3 //读命令字 //验证写入的命令字是否正确,不正确则重新写
GM8123_MS = 1;
Delay1KTCYx(0xfa);
if (ReceiveBuff0 != Contr_data) // 如果数据不对,重写。
goto step3;
//4 子串口是2400 ,母串口是9600 bts
GM8123_MS = 0; // //设置 GM8125 工作在多通道工作模式下
STADD0 = 1; //完成命令字的设置之后,必须将 STADD1~0置为非全 0 的值后,设置才生效,此时才能按设置的格式进行数据通讯
STADD1 = 0;
TXSTA = 0x24; // 选择异步方式,HIGH速;8位数据,允许发送;0010 0100
RCSTA = 0xB0; //0x90; 10110000 // 允许串口工作,接收8位数据;
SPBRG = 0x19; // 设置//装入初值,设置主机工作波特率为 9600bps
}
//****************************************************************
//*****************UartOut******uart 输出一个字节*****
void UartOut (unsigned char x)
{
GM8123_MS = 0 ; //多通道工作模式
switch (UsartFlag) // 根据串口的接收,选择串口发送
{
case 1:
STADD1 = 0; STADD0 = 1; //选择子串口 1 发送
break;
case 2:
STADD1 = 1; STADD0 = 0; //选择子串口 2 发送
break;
case 3:
STADD1 = 1; STADD0 = 1; //选择子串口 3 发送
break;
}
TXREG = x;
while(TXSTAbits.TRMT == 0);
//对母串口发送无效数据
STADD1 = 0; STADD0 = 0; //选择母串口发送
TXREG = 0;
while(TXSTAbits.TRMT == 0);
TXREG = 0;
while(TXSTAbits.TRMT == 0);
TXREG = 0;
while(TXSTAbits.TRMT == 0);
}
文章评论(0条评论)
登录后参与讨论