📄 writeidmain.c
字号:
#include "msp430x13x.h"
#include "wzsx.h"
void fnPortInit(void); //端口状态初始化
void fnDelayX10ms(int iTimes); //10ms的整数倍延时
void fnBeep(); //蜂鸣器响一声
unsigned char *fnConvLongToChar(long int lConvLongData,int iConLen);
unsigned long int fnCharConToLong(unsigned char cCharConLonBuf[4]);
unsigned int fnCharConvToInt(unsigned char cCharConLonBuf[2]);
//E2PROM
unsigned long int ProReadE2ROMID(unsigned char cAddress); //读出E2PROM内的终端ID
unsigned int *ProReadE2ROM(int iStartAddress, int iReadBITNum);
void ProWriteE2ROM(int iStartAddress, int iWriteBITNum, unsigned char cWriteData[4]);
void fnE2ROMStart(void); //E2PROM开始
void fnE2ROMStop(void); //E2PROM停止
void fnE2ROMRespond(void); //E2PROM读写后的应答
unsigned char fnDataRxE2ROM(void); //从E2PROM读出一个字节数据
void fnDataTxE2ROM(unsigned char cBuffer); //一个字节数据数据写入E2PROM
unsigned long int liTerminalID;
unsigned long int liHandID;
unsigned long int li905ID;
unsigned long int iReadID;
void main( void )
{
int iTime;
WDTCTL = WDTPW + WDTHOLD;
// FLL_CTL0 |= XCAP14PF;
_DINT();
fnPortInit();
/* fnBeep(); */
fnDelayX10ms(25);
fnBeep();
fnBeep();
_EINT();
for(iTime=0; iTime<1; iTime++)
{
unsigned char cTemp[4];
unsigned char *p;
int i;
//写入终端ID
liTerminalID = 2005080012;
p = fnConvLongToChar(liTerminalID, 4);
for(i=0; i<4; i++)
{
cTemp[i] = *p;
p++;
}
ProWriteE2ROM(0x00, 4, cTemp);
iReadID = ProReadE2ROMID(0x00);
//写入手持机ID
liHandID = 2005111111;
p = fnConvLongToChar(liHandID, 4);
for(i=0; i<4; i++)
{
cTemp[i] = *p;
p++;
}
ProWriteE2ROM(0x04, 4, cTemp);
iReadID = ProReadE2ROMID(0x00);
//写入905ID
li905ID = 2005000001;
p = fnConvLongToChar(li905ID, 4);
for(i=0; i<4; i++)
{
cTemp[i] = *p;
p++;
}
ProWriteE2ROM(E2905ID, 4, cTemp);
// iReadID = ProReadE2ROMID(E2905ID);
iReadID = ProReadE2ROMID(0x00);
fnBeep();
fnDelayX10ms(25);
}
}
//******子函数**************************
void fnPortInit(void) //端口状态初始化
{
P1DIR = 0xff;
P1OUT = 0;
P2DIR = 0xff;
P2OUT = 0x02; //PCSN=1;
P3DIR = 0xff;
P3OUT = 0x04; //PE2ROMPower=1;
P4DIR = 0xff;
P4OUT = 0;
P5DIR = 0xff;
P5OUT = 0;
P6DIR = 0xff;
P6OUT = 0;
/*
P1DIR = 0;
P2DIR = 0;
P3DIR = 0;
P4DIR = 0;
P5DIR = 0;
P6DIR = 0;
*/
P2DIR |= PSCK + PCSN;
P2OUT &= ~PSCK;
P2OUT |= PCSN;
}
//******时间函数************************
/***************************************
名称: fnDelayX10ms()
功能: 延迟时间
入参: 要延时的倍数
出参: 无
***************************************/
void fnDelayX10ms(int iTimes)
{
int i,j;
for(i=0; i<=iTimes; i++)
{
j=0;
do
{
j++;
}
while(j<=2000);
}
}
// 蜂鸣器响一声
void fnBeep(void)
{
P6DIR |= PFMQ;
P6OUT |= PFMQ;
fnDelayX10ms(25);
P6OUT &= ~PFMQ;
P6DIR &= ~PFMQ;
}
//******E2PROM函数**********************
/***************************************
名称: ProReadE2ROMID(unsigned char cAddress)
功能: 读E2ROM内的终端ID
入参: 要读出的终端或手持机的ID地址
出参: iReadOutData:读出的数据
***************************************/
unsigned long int ProReadE2ROMID(unsigned char cAddress)
{
int i;
unsigned char cTemp[4];
unsigned long int liTemp;
P3DIR |= PE2ROMPower; //E2PROM上电
P3OUT &= ~PE2ROMPower;
fnDelayX10ms(1);
_DINT();
fnE2ROMStart(); //开始
fnDataTxE2ROM(E2WRITE); //设备地址
// P3OUT &= ~PE2ROMSCL;
fnDataTxE2ROM(cAddress); //字节地址
// P3OUT &= ~PE2ROMSCL;
fnE2ROMStart();
fnDataTxE2ROM(E2READ); //读设备地址
// P3OUT &= ~PE2ROMSCL;
for(i=0; i<4; i++)
{
cTemp[i] = fnDataRxE2ROM();
if(i==4)
{ break; }
P3OUT &= ~PE2ROMSCL;
P3DIR |= PE2ROMSDA;
P3OUT &= ~PE2ROMSDA;
P3OUT |= PE2ROMSCL;
}
// P3OUT |= PE2ROMSCL;
fnE2ROMStop();
_EINT();
P3OUT |= PE2ROMPower; //E2PROM掉电
P3DIR &= ~PE2ROMPower;
liTemp = fnCharConToLong(cTemp);
return liTemp;
}
/***************************************
名称: ProReadE2ROM()
功能: 读E2ROM函数
入参: iStartAddress:读开始地址;iReadBITNum:读字节数
出参: iReadOutData:读出的数据
**************************************
unsigned int *ProReadE2ROM(int iStartAddress, int iReadBITNum)
{
unsigned long int iReadOutData;
unsigned char cTemp[4];
int i;
P3DIR |= PE2ROMPower; //E2PROM上电
P3OUT &= ~PE2ROMPower;
fnDelayX10ms(1);
_DINT();
fnE2ROMStart(); //开始
fnDataTxE2ROM(E2WRITE); //读之前,先空写入
// P3OUT &= ~PE2ROMSCL;
fnDataTxE2ROM(iStartAddress);
// P3OUT &= ~PE2ROMSCL;
fnE2ROMStart();
fnDataTxE2ROM(E2READ);
// P3OUT &= ~PE2ROMSCL;
for(i=0; i<iReadBITNum; i++)
{
cTemp[i] = fnDataRxE2ROM();
// P3OUT &= ~PE2ROMSCL;
}
iReadOutData = fnCharConToLong(cTemp);
P3OUT |= PE2ROMSCL;
fnE2ROMStop();
_EINT();
P3OUT |= PE2ROMPower; //E2PROM掉电
P3DIR &= ~PE2ROMPower;
return iReadOutData;
}
*/
/***************************************
名称: ProWriteE2ROM()
功能: 写E2ROM函数
入参: iStartAddress:写开始地址;iTotalNum:写字节数;
cWriteData[4]:写入的数据;
出参: 无
***************************************/
void ProWriteE2ROM(int iStartAddress, int iWriteBITNum, unsigned char cWriteData[4])
{
int i;
// unsigned char cTemp[4];
// for(i=0; i<4; i++)
// {
// cTemp[i] = cWriteData[i];
// }
// unsigned char cTx;
P3DIR |= PE2ROMPower; //E2PROM上电
P3OUT &= ~PE2ROMPower;
fnDelayX10ms(1);
_DINT();
fnE2ROMStart(); //开始
fnDataTxE2ROM(E2WRITE); //写Device Address
// P3OUT &= ~PE2ROMSCL;
fnDataTxE2ROM(0x00); //写Word Address
// P3OUT &= ~PE2ROMSCL;
// fnDataTxE2ROM(0x01);
for(i=0; i<iWriteBITNum; i++)
{
// P3OUT |= PE2ROMSCL;
fnDataTxE2ROM(cWriteData[i]);
P3OUT |= PE2ROMSDA;
// fnDataTxE2ROM(cWriteData[i]);
}
// P3OUT |= PE2ROMSCL;
fnE2ROMStop();
_EINT();
P3OUT |= PE2ROMPower; //E2PROM掉电
P3DIR &= ~PE2ROMPower;
}
void fnE2ROMStart(void) //E2PROM开始
{
P3DIR |= PE2ROMSDA + PE2ROMSCL;
P3OUT &= ~PE2ROMSCL; //SCL=0
P3OUT |= PE2ROMSDA; //SDA=1
P3OUT |= PE2ROMSCL; //SCL=1
P3OUT &= ~PE2ROMSDA; //SDA=0
}
void fnE2ROMStop(void) //E2PROM停止
{
P3DIR |= PE2ROMSDA + PE2ROMSCL;
P3OUT &= ~PE2ROMSCL; //SCL=0
P3OUT &= ~PE2ROMSDA; //SDA=0
P3OUT |= PE2ROMSCL; //SCL=1
P3OUT |= PE2ROMSDA; //SDA=1
}
void fnE2ROMRespond(void) //E2PROM读写后的应答
{
P3DIR |= PE2ROMSCL;
P3DIR &= ~PE2ROMSDA;
P3OUT |= PE2ROMSCL;
// if( P3IN & PE2ROMSDA )
// { InfoError |= E2ROMRWrError; }
}
/***************************************
名称: fnDataRxE2ROM()
功能: 读E2ROM的一字节数据
入参: 无
出参: cDataTemp接收到的数据
***************************************/
unsigned char fnDataRxE2ROM(void) //读出E2PROM数据
{
int iTemp;
unsigned char cTemp=0;
for(iTemp=8; iTemp>=1; iTemp--)
{
cTemp <<= 0x1;
P3OUT &= ~PE2ROMSCL;
P3DIR &= ~PE2ROMSDA;
P3OUT |= PE2ROMSCL;
if(PE2ROMSDA&P3IN)
{ cTemp |= 0x01; }
else
{ cTemp &= ~0x01; }
}
return cTemp;
}
/***************************************
名称: fnDataTxE2ROM()
功能: 写一字节数据到E2ROM
入参: cBuffer要发送的数据
出参: 无
***************************************/
void fnDataTxE2ROM(unsigned char cBuffer) //数据写入E2PROM
{
int iTemp;
// P3OUT &= ~PE2ROMSCL;
P3OUT |= PE2ROMSCL;
P3DIR |= PE2ROMSDA;
for(iTemp=8; iTemp>=1; iTemp--)
{
P3OUT &= ~PE2ROMSCL;
if(cBuffer & 0x80)
{ P3OUT |= PE2ROMSDA; }
else
{ P3OUT &= ~PE2ROMSDA; }
P3OUT |= PE2ROMSCL;
cBuffer <<= 0x01;
}
// P3OUT &= ~PE2ROMSCL;
// P3OUT &= ~PE2ROMSDA;
// P3DIR &= ~PE2ROMSDA;
// P3OUT |= PE2ROMSCL;
// P3OUT |= PE2ROMSDA;
// P3OUT &= ~PE2ROMSCL;
}
/***************************************************
名称:fnConvLongToChar();
功能:长整形转换字符型函数
入口参数:lConvLongData:要转换的长整形数据;iConLen转换字节数
出口参数:PcDataLongToChar:转换后的字符
***************************************************/
unsigned char *fnConvLongToChar(long int lConvLongData,int iConLen)
{
unsigned char cDataLongToChar[4];
unsigned char *PcDataLongToChar;
int itemp;
for(itemp=0;itemp<iConLen;itemp++)
{
cDataLongToChar[itemp]=(char)lConvLongData;
lConvLongData=lConvLongData>>8;
}
PcDataLongToChar=&cDataLongToChar[0];
return PcDataLongToChar;
}
/***************************************************
名称:fnCharConToLong();
功能:字符转换长整形函数
入口参数:cCharConLonBuf:要转换的字符数据
出口参数:lCharConToLong:转换后的长整形数据
***************************************************/
unsigned long int fnCharConToLong(unsigned char cCharConLonBuf[4])
{
long int lCharConToLong,lTemp1,lTemp2,lTemp3;
lTemp1 = (long int)cCharConLonBuf[1]<<8;
lTemp2 = (long int)cCharConLonBuf[2]<<16;
lTemp3 = (long int)cCharConLonBuf[3]<<24;
lCharConToLong = lTemp1 + lTemp2 + lTemp3 + cCharConLonBuf[0];
return lCharConToLong;
}
/***************************************************
名称:fnCharConvToInt();
功能:字符转换整形函数
入口参数:cCharConLonBuf:要转换的字符数据
出口参数:iCharConToInt:转换后的整形数据
***************************************************/
unsigned int fnCharConvToInt(unsigned char cCharConLonBuf[2])
{
unsigned int iCharConToInt, iTemp;
iTemp = (unsigned int)cCharConLonBuf[1]<<8;
iCharConToInt = iTemp + cCharConLonBuf[0];
return iCharConToInt;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -