📄 2410_8141.c
字号:
//spi功能
#define SPI8141_GLOBALS
#include "config.h"
int TEMP;
struct
{
int n;
int Baut;
unsigned char Par;
unsigned char Stop_bit;
}Comm[4]; //定义两个结构体,分别表示温度与湿度
/***********************************************************
Name: 814XAppProgram.c
Descibe: Function package of GM814x's operation
Version: 1.0
Time: 2006.1
Contents: Include all operation and function of GM814x
Copyright: GMIC 2006
***********************************************************/
unsigned char Flag1_T; //814x 串口1发送FIFO空标志
unsigned char Flag2_T; //814x 串口2发送FIFO空标志
unsigned char Flag3_T; //814x 串口3发送FIFO空标志
unsigned char Flag4_T; //814x 串口4发送FIFO空标志
unsigned char Revbuff1; //串口1数据缓存
unsigned char Revbuff2; //串口2数据缓存
unsigned char Revbuff3; //串口3数据缓存
unsigned char Revbuff4; //串口4数据缓存
unsigned char RevFLAG1; //串口1数据接收标志
unsigned char RevFLAG2; //串口2数据接收标志
unsigned char RevFLAG3; //串口3数据接收标志
unsigned char RevFLAG4; //串口4数据接收标志
/***********************************************************
Function: Delay
Describe: Time delay
Input: int formated time
Output: void
***********************************************************/
void Delay_SPI(unsigned int nTime)
{
long ctime;
ctime= nTime;
while(--ctime) {;}
}
/***********************************************************
Function: SendTo814X
Describe: send 2 byte to 814x and receive 2 byte from 814x
Input: 2 byte to be send
Output: 2 byte read from 814x
***********************************************************/
unsigned int SendTo814X(unsigned char chigh,unsigned char clow)
{
unsigned char cTempHigh,cTempLow;
unsigned int RevData;
ClrCS_8141(); //置814x片选有效
Delay_SPI(1); //延时时间参考814x数据手册的要求
cTempHigh=SPITransmit(chigh); //向814X发送高位数据
cTempLow=SPITransmit(clow); //向814X发送低位数据
Delay_SPI(1); //延时时间参考814x数据手册的要求
SetCS_8141(); //置814x片选无效
RevData=(cTempHigh<<8) | cTempLow;
return RevData; //返回从814x读出的数据
}
/***********************************************************
Function: Gm814XShutdown
Describe: Shutdown the chip
Input: void
Output: void
***********************************************************/
void Gm814XShutdown(void)
{
SendTo814X(0xe0,0x00);
}
/***********************************************************
Function: Gm814XWakeup
Describe: Wakeup the chip
Input: void
Output: void
***********************************************************/
void Gm814XWakeup(void)
{
SendTo814X(0xc0,0x00);
}
/***********************************************************
Function: Write814xConfig
Describe: Set the configure register of 814x
Input: COM number and configure data
Output: 2 byte read from 814x
***********************************************************/
unsigned int Write814xConfig(unsigned char n,unsigned char high,unsigned char low) //n 表示设置的串口号,high表示给配置寄存器的高位字节(低三位有效),low表示给配置寄存器的低位字节
{
unsigned char ch;
unsigned int RevData;
high=high&0x07;
ch= 0xc0 | (n<< 3);
high=high|ch;
RevData=SendTo814X(high,low); //向指定的串口功能设置寄存器写配置
Delay_SPI(5);
return RevData;
}
/***********************************************************
Function: Spi_Config
Describe: Set the Com Para of 814x
Input: COM number and configure data
n:0--485
1--RS232
Baut :5--2400
4--4800
3--9600
2--19200
1--38400
Par:0--None
0x50--Even
0x40--ODD
Stop_Bit:0--1
1--1.5
2--2
This Para is ignored if the Delay_Time is enough.
Output: 2 byte read from 814x
***********************************************************/
unsigned int Spi_Config(unsigned char n,unsigned char Baut,unsigned char Par,unsigned char Stop_bit)
{
unsigned int RevData;
unsigned char low;
int index;
switch (Baut)
{
case 5:
{
low=0x05 | Par;
}break;
case 4:
{
low=0x04 | Par;
}break;
case 3:
{
low=0x03| Par;
}break;
case 2:
{
low=0x02 | Par;
}break;
case 1:
{
low=0x01 | Par;
}
}
RevData = Write814xConfig(n,0x00,low);
index=(int)n;
Comm[index].n=(int)n;
Comm[index].Baut=(int)Baut;
Comm[index].Par=Par;
Comm[index].Stop_bit=Stop_bit;
return RevData;
}
/***********************************************************
Function: SendTo_485(unsigned char Data);
Describe: read out the configure register data
Input: COM number
Output: configure register data
***********************************************************/
unsigned int SendToRS485(unsigned char Data)
{
unsigned int TEMP;
RS485T_nR_S();
TEMP=SendDataToCom(0,Data,0);//发送数据
Delay_SPI(2500*Comm[0].Baut);
RS485T_nR_R();
return TEMP;
}
/***********************************************************
Function: unsigned char RevToData(void);
Describe: read out the configure register data
Input:
Output: 0 数据错误
1 数据正确
***********************************************************/
unsigned char RevToData(void)
{
unsigned int TEMP;
unsigned char Comm;
TEMP= SendTo814X(0,0);
Comm=ManageRevData(TEMP);
return Comm;
}
/***********************************************************
Function: SendTo_232(unsigned char Data);
Describe: read out the configure register data
Input: COM number
Output: configure register data
***********************************************************/
unsigned int SendToRS232(unsigned char Data)
{
unsigned int TEMP;
TEMP=SendDataToCom(1,Data,0);//发送数据
//Delay_SPI(2000*Comm[1].Baut );
return TEMP;
}
/***********************************************************
Function: Read814xConfig
Describe: read out the configure register data
Input: COM number
Output: configure register data
***********************************************************/
unsigned int Read814xConfig(unsigned char n) //n表示串口号
{
unsigned char ch;
unsigned int RevData;
ch = 0x40 | (n<< 3);
RevData=SendTo814X(ch,0x00);
return RevData; //读出指定串口的功能设置寄存器内容
}
/***********************************************************
Function: ReadTFIFOState
Describe: read all transmit FIFO status
Input: void
Output: TFIFO state data
***********************************************************/
unsigned int ReadTFIFOState(void)
{
unsigned int RevData;
RevData=SendTo814X(0x60,0x00);
return RevData;
//同时读出所有发送FIFO状态
}
/***********************************************************
Function: SendDataToCom
Describe: send data to UART Com and read out the data of receive FIFO
Input: COM number and data to be send
Output: RFIFO data
***********************************************************/
unsigned int SendDataToCom(unsigned char n,unsigned char c,char Pt)
//n表示串口号,c为需要发送的数据,Pt为第九位数据
{
unsigned char ch;
unsigned int RevData;
if(Pt)
ch=0x81;
else
ch=0x80;
ch=ch| (n<< 3);
RevData=SendTo814X(ch,c);
return RevData; //向指定串口发送数据并读出接收FIFO数据
}
/***********************************************************
Function: SendToAllCom
Describe: send data to all UART Com and read out the data of receive FIFO
Input: data to be send
Output: RFIFO data
***********************************************************/
unsigned int SendToAllCom(unsigned char c,char Pt)
//c为需要发送的数据,Pt为第九位数据
{
unsigned char ch;
unsigned int RevData;
if(Pt)
ch=0xa1;
else
ch=0xa0;
RevData=SendTo814X(ch,c);
return RevData; //向所有串口发送数据并读出接收FIFO数据
}
/***********************************************************
Function: ReadRFIFOData
Describe: read out the data of receive FIFO
Input: void
Output: RFIFO data
***********************************************************/
unsigned int ReadRFIFOData(void)
{
unsigned int RevData;
RevData=SendTo814X(0x00,0x00);
return RevData; // 读出接收FIFO数据
}
/***********************************************************
Function: Managerevdata
Describe: Analyse the data received from 814X
Input: void
Output: void
***********************************************************/
unsigned char ManageRevData(unsigned int rdata)
{
unsigned int cTemp;
unsigned char Flag_R;
unsigned char Flag_T;
cTemp =rdata;
if(cTemp&0x8000) //判断R标志
{Flag_R=1;}
else
return 0;
cTemp =rdata;
if(cTemp&0x4000) //判断T标志
{Flag_T = 1;}
if(Flag_R)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -