📄 msp430fwc.c
字号:
nop();
P4DIR|=SDA64; //SDA为输出状态
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
return(k);
}
void judg_ack(void)
{
P4DIR&=~SDA64; //SDA为输入状态
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
P4OUT|=SCL64; //SCL=1;
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
for(i=0;i<99;i++)
{
if((P4IN&SDA64)==0)
break;
nop();
}
P4OUT&=~SCL64; //SCL=0
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
P4DIR|=SDA64; //SDA为输出状态
P4OUT|=SDA64; //SDA=1
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop();
}
void wr1byte(uint addr,uchar shu)
{
uchar buf;
_DINT();
startb64();
byte_tx(0xa0);
judg_ack();
buf=(uchar)(addr/0x100);
byte_tx(buf);
judg_ack();
buf=(uchar)(addr%0x100);
byte_tx(buf);
judg_ack();
byte_tx(shu);
judg_ack();
stopb64();
delay(100);
_EINT();
}
uchar re1byte(uint addr)
{
uchar buf;
_DINT();
startb64();
byte_tx(0xa0);judg_ack();
buf=(uchar)(addr/0x100);
byte_tx(buf);judg_ack();
buf=(uchar)(addr%0x100);
byte_tx(buf);judg_ack();
startb64();
byte_tx(0xa1);judg_ack();
buf=byte_rx();
nop();
nop();
nop();
nop();
P4OUT|=SDA64; //sda=1;
nop();
nop();
nop();
nop();
P4OUT|=SCL64; //scl=1;
nop();
nop();
nop();
nop();
P4OUT&=~SCL64; //scl=0;
nop();
nop();
nop();
nop();
stopb64();
_EINT();
return(buf);
}
void readicid(void) /*************读取卡号****************/
{
a=0x55; //卡号存在0X55单元开始处
for(i=0;i<8;i++)
{
icidbuf[i] = IC_read(a);
a++;
}
}
/******************串行通信处理程序***************************/
void r232cl(void)
{
///
///
///进行预处理
if((FLAG1&BIT1)!=0) //如果接收数据完毕则进行相应的处理
{
if((FLAG1&BIT2)!=0)
{
if((FLAG2&BIT0)!=0) //正在测试过程中
{
}
else
{
}
//上位机进行读操作命令的处理
}
if((FLAG1&BIT3)!=0)
{
/// //下位机进行写操作命令的处理
}
}
}
/***************读取串口的数据,通过查询方式********/
/***************数据放到r232buf里******************/
/***************需要关闭中断***********************/
void readuart(void)
{
uchar temp;
P4OUT|=BIT3; // P4.3=1打开电源
r232buf[0]=0; //首先附于初值
for(r232buf[0]=0;r232buf[0]<39;r232buf[0]++)
{
while((IFG2&URXIFG1)==0); //如果没有接收到数据时,等待
temp=r232buf[0]+1;
r232buf[temp]=RXBUF1; //读取接收缓存区的数据
}
delay(255);
delay(255);
r232buf[40]=RXBUF1; //为了将接收缓冲区清空,清除接收标志位
}
void readuart1(void)
{
//uchar temp;
//P4OUT|=BIT3; // P4.3=1打开电源
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x43; //将信道1发送出去
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x48; //将信道1发送出去
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0d;
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0a; //发送确认键
for(r232buf[0]=0;r232buf[0]<5;r232buf[0]++)
{
while((IFG2&URXIFG1)==0); //如果没有接收到数据时,等待
r232buf[r232buf[0]+1]=RXBUF1; //读取接收缓存区的数据
}
delay(255);
delay(255);
r232buf[40]=RXBUF1; //为了将接收缓冲区清空,清除接收标志位
}
void readuart2(void)
{
//uchar temp;
//P4OUT|=BIT3; // P4.3=1打开电源
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x52; //将信道1发送出去
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x53; //将信道1发送出去
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0d;
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0a; //发送确认键
for(r232buf[0]=0;r232buf[0]<5;r232buf[0]++)
{
while((IFG2&URXIFG1)==0); //如果没有接收到数据时,等待
r232buf[r232buf[0]+1]=RXBUF1; //读取接收缓存区的数据
}
delay(255);
delay(255);
r232buf[40]=RXBUF1; //为了将接收缓冲区清空,清除接收标志位
}
void readuart3(void)
{
//uchar temp;
//P4OUT|=BIT3; // P4.3=1打开电源
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x52; //将信道1发送出去
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x46; //将信道1发送出去
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0d;
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0a; //发送确认键
for(r232buf[0]=0;r232buf[0]<5;r232buf[0]++)
{
while((IFG2&URXIFG1)==0); //如果没有接收到数据时,等待
r232buf[r232buf[0]+1]=RXBUF1; //读取接收缓存区的数据
}
delay(255);
delay(255);
r232buf[40]=RXBUF1; //为了将接收缓冲区清空,清除接收标志位
}
/*****************无线模块初始化*****************/
/***初始化无线模块串口波特率空中波特率***********/
/***使信道和24c64中数据标识一致******************/
void wxmkcsh(void)
{
uchar temp;
delay(255);
//$$$$$P4OUT|=BIT3; // P4.3=1打开电源
temp=re1byte(0x0002);
if(temp!=0x55) //如果没有进行过初始化则需进行初始化工作
{
reloop:
//for(i=0;i<33;i++)
//r232buf[i]=0; //将r232buf清零
//$$$$$UBR01 =0x82; // 4MHZ/2400 - 1666.666666667
//$$$$$UBR11 =0x06; //调整寄存器
//$$$$$UMCTL1=0x6B;
ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD
//IE2 |= UTXIE1 + URXIE1;
//$$$$$P4OUT&=~BIT3; // P4.3=0关闭电源
P1OUT&=~BIT0; // P1.0=0复位
//$$$$$delay(255);
//$$$$$delay(255);
//$$$$$delay(255);
//$$$$$delay(255);
//IE2=URXIE1; // 允许接收中断
_DINT(); //打开中断
delay(255);
//$$$$$delay(255);
//P4OUT|=BIT3; // P4.3=1打开电源
//$$$$$readuart();
//$$$$$delay(255);
//$$$$$delay(255);
//$$$$$delay(255);
//$$$$$delay(255);
FLAG4&=~BIT2; //先清接收"FRIENDCOM....."正确位
//$$$$$for(i=0;i<20;i++)
//$$$$${
//$$$$$delay(255); //延时
//$$$$$if(r232buf[0]>=32) //如果接收的数据大于等于32
//$$$$${
//$$$$$for(r232buf[0]=1;r232buf[0]<32;r232buf[0]++)
//$$$$${
//$$$$$if((r232buf[r232buf[0]]==0x0d)&&(r232buf[r232buf[0]+1]==0x0a))
//$$$$$if((r232buf[r232buf[0]+2]==0x46)&&(r232buf[r232buf[0]+3]==0x52))
//$$$$$if((r232buf[r232buf[0]+4]==0x49)&&(r232buf[r232buf[0]+5]==0x45))
//$$$$${
//$$$$$FLAG4|=BIT2; //接收"FRIENDCOM....."正确置位
//$$$$$goto exitxhb; //跳出循环
//$$$$$}
//$$$$$}
//$$$$$}
//$$$$$}
//$$$$$exitxhb:
ME2&=~URXE1;
temp= RXBUF1; //先暂时关闭串口接收
devicexd=0x32; //发送信道1
//$$$$$if((FLAG4&BIT2)!=0) //如果接收到正确"FRIENDCOM....."
//$$$$${
//$$$$$delay(255); //延时一会
//$$$$$}
//$$$$$else goto reloop; //如果没有正确接收"FRIENDCOM.....",则重新开始
//$$$$$csszjc(rsbaud); //设置RFBAUD
delay(255); //延时一会
//$$$$$delay(255); //延时一会
//$$$$$P4OUT&=~BIT3; // P4.3=0关闭电源
//$$$$$delay(255); //延时一会
//$$$$$delay(255); //延时一会
//$$$$$delay(255); //延时一会
//$$$$$delay(255); //延时一会
//$$$$$P4OUT|=BIT3; // P4.3=1打开电源
//$$$$$delay(255); //延时一会
//$$$$$delay(255); //延时一会
//$$$$$delay(255); //延时一会
delay(255); //延时一会
//$$$$$csszjc(rfbaud); //设置RSBAUD;
delay(255); //延时一会
//$$$$$delay(255); //延时一会
//$$$$$delay(255); //延时一会
//$$$$$delay(255); //延时一会
//$$$$$P4OUT&=~BIT3; // P4.3=0关闭电源
//$$$$$delay(255); //延时一会
//$$$$$delay(255); //延时一会
//$$$$$delay(255); //延时一会
//$$$$$delay(255); //延时一会
//$$$$$P4OUT|=BIT3; // P4.3=1打开电源
//$$$$$delay(255); //延时一会
//$$$$$delay(255); //延时一会
//$$$$$delay(255); //延时一会
delay(255); //延时一会
csszjc(ch); //
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x30; //将信道1发送出去
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0d;
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0a; //发送确认键
delay(255); //延时一会
delay(255); //延时一会
ME2|=URXE1; //允许接收
temp=0x00;
wr1byte(0x0000,temp);
delay(50);
wr1byte(0x0001,temp); //在0地址写入0,表示现有0组数据
delay(50);
temp=0x55;
wr1byte(0x0002,temp); //表示已经初始化
delay(50);
temp=0x00;
wr1byte(0x0003,temp); //表示第一信道
delay(50);
temp=0x00;
wr1byte(0x0004,temp); //初始化设备的地址为零
delay(50);
temp=0xc5; //表示此项目为仰卧起座
wr1byte(0x0005,temp);
delay(50);
P1OUT|=BIT0; //P1.0置位
//$$$$$P4OUT&=~BIT3; // P4.3=0关闭电源
//$$$$$delay(255);
//$$$$$delay(255);
//$$$$$delay(255);
delay(255);
////////////////////////////////////////////////////////////////////
ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD
_DINT(); //
P1OUT&=~BIT0; //P1.0置位
//$$$$$P4OUT|=BIT3; // P4.3=1打开电源
//$$$$$delay(255);
delay(255);
delay(255);
delay(255);
//delay(255); //延时一会
//delay(255); //延时一会
readuart1();
delay(255);
delay(255);
//$$$$$readuart2();
delay(255);
delay(255);
//$$$$$readuart3();
delay(255);
delay(255);
delay(255);
delay(255);
////////////////////////////////////////////////////////////////////////
P1OUT|=BIT0; //P1.0置位
//$$$$$P4OUT&=~BIT3; // P4.3=0关闭电源
//$$$$$delay(255);
//$$$$$delay(255);
//$$$$$delay(255);
//$$$$$delay(255);
//$$$$$P1OUT|=BIT0; //P1.0置位
//$$$$$P4OUT|=BIT3; // P4.3=1打开电源
//$$$$$delay(255);
//$$$$$delay(255);
//$$$$$delay(255);
//$$$$$delay(255);
//$$$$$UBR01 = 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -