📄 gm8123.c
字号:
/********************************************************************
created: 2005/11/02
created: 2:11:2005 20:47
filename: D:\astario\workspace\MCUcode\src\gm8123.c
file path: D:\astario\workspace\MCUcode\src
file base: gm8123
file ext: c
author: Astario
purpose: 串口通信以及gm8123的多通道收发模式
最后修改: 2005/11/23 18:45:49
*********************************************************************/
#include "userdef.h"
#include "device.h"
#include "generalfunc.h"
#include "gm8123.h"
#include "clock.h"
//#define BAUDCLCKTR1 //仿真器支持的模式
//GM8123命令字: 9600
#define GM8123_CMDBYTE 0x0F3//0xF8//0xF8//0x0F3 //bit3:FL=0,标准的10 位一帧,低3位011:子9600; 100:子19200
//波特率:7200对应(256-8),7200*8=57600
//#define GM8123_DEFTR1 (256-72)//开机写命令字时,母串口波特率1200*4=4800, (256-12)
//#define GM8123_TR1PRESET (256-6) //(256-24) // (256-3) //57600/38400=1.5=3/2
#ifdef BAUDCLCKTR1
//设置波特率:baud100:波特率/100
void SetBaudRate(WORD baud100)
{
BYTE baudRateKey;
baudRateKey=256-(1152/baud100);
EA=0;
SCON = 0x50; /* uart in mode 1 (8 bit), REN=1 */
TMOD = TMOD | 0x20 ; /* Timer 1 in mode 2 */
PCON |=0x80;
TH1 = baudRateKey;//0xFD;(256-3) /* 4*9600 Bds at 22.1184MHz */
TL1 = baudRateKey; /* 9600 Bds at 11.059MHz */
ES = 1; /* Enable serial interrupt*/
EA = 1; /* Enable global interrupt */
TR1 = 1; /* Timer 1 run */
}
#else
//设置波特率:baud100:波特率/100
// BRL=256-(2^SMOD1 * Fper) / ( 6^(1-SPD)*32*Baudrate)
void SetBaudRate(WORD baud100)
{
BYTE baudRateKey;
//BRL=256-(2 * Fper)/(32*Baudrate)=256-1382400/Baudrate
if(baud100>=96)
baudRateKey=256-(13824/baud100);
else
baudRateKey=256-(13824/2/baud100);
EA=0;
CKCON0 = 0x7F;
SCON = 0x50; /* uart in mode 1 (8 bit), REN=1 */
BDRCON &=0xEE; /* BRR=0; SRC=0; */
BDRCON |=0x0E; /* TBCK=1;RBCK=1; SPD=1 */
if(baud100>=96)
PCON |=0x80; //double rate, SMOD1=1
else
PCON &=0x7F; //SMOD1=0
BRL=baudRateKey;//0xFD;(256-3) /* 4*9600 Bds at 22.1184MHz */
ES = 1; /* Enable serial interrupt*/
EA = 1; /* Enable global interrupt */
BDRCON |=0x10; /* Baud rate generator run*/
}
#endif
//子串口波特率为9600,则母串口波特率为9600*4=38400,
#ifdef INCLUDE_gm8123
BYTE xdata recvCnt[3]={0,0,0}; //各通道收到的字节数
BYTE xdata recvRingHead[3]={0,0,0}; //各通道的队列头
BYTE xdata recvRing[3][COMMRingSIZE];//串口缓存 16*3=48
BYTE xdata g_bufserch0=0; //母口串口缓存
bit berrflu=0;//溢出标志
void SendByte0(BYTE OneByte)
{
TB8=P;
SBUF=OneByte;
while(TI==0);
TI=0;
}
void GM8123_SetSingleCh()
{
GM8123_RST=0;
delay_Nms(100);
GM8123_RST=1;
GM8123_MS=1;
GM8123_ST0=1;
GM8123_ST1=1;
GM8123_SR0=!GM8123_SR0;
GM8123_SR1=!GM8123_SR1;
GM8123_SR0= GM8123_SR1=1;
}
//Initiate GM8123
bit GM8123_Initiate()
{
BYTE i=0,Contr_data;
SetBaudRate(48);//与GM8123
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -