📄 msp430ywqztry.c
字号:
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!=0x50) //如果没有进行过初始化则需进行初始化工作
{
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=0x30; //发送信道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=0x50;
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 = 0xA0; // 3.58Mhz/9600 - 372
//$$$$$UBR11 = 0x01; // 4Mhz/9600 - 416.6666666667
//$$$$$UMCTL1 = 0x6B; //将UART1恢复到9600波特
}
}
void trytry(void)
{
while(1)
{
}
}
/*************远程升级和连续读24C64数据处理数据及写设备地址,无线信道********/
void ycsjre64(void)
{
uchar temp;
uchar temp1;
uchar temp2;
if((FLAG3&BIT0)!=0) //如果存储器为写地址
{
delay(255); //等待往上位机发送完毕
disp_lcd(0x0d,0x0d,0x0d,0x01,0); //显示---1表示正在进行写地址操作
delay(255);
delay(255);
delay(255); //为了使显示清楚
_DINT(); //禁止中断
wr1byte(0x0004,deviceadr);
delay(50);
temp=re1byte(0x0004);
if(temp!=deviceadr) //再读一边如果不成功在写一次
wr1byte(0x0004,deviceadr);
delay(50);
_EINT();
//FLAG3&=~BIT0; //清楚存储器写标志
}
if((FLAG3&BIT1)!=0)
{
delay(255);
disp_lcd(0x0d,0x0d,0x0d,0x02,0); //显示---2表示正在进行写无线模块的信道
delay(255);
delay(255);
reloop:
delay(255); //为了使显示清楚
for(i=0;i<33;i++)
r232buf[i]=0; //将r232buf清零
//$$$$$UBR01 =0x82; // 4MHZ/2400 - 1666.666666667
//$$$$$UBR11 =0x06; //调整寄存器
//$$$$$UMCTL1=0x6B;
ME2 |=URXE1+UTXE1; // Enable USART1 TXD/RXD //禁止中断
//$$$$$P4OUT&=~BIT3; // P4.3=0关闭电源
P1OUT&=~BIT0; // P1.0=0复位
//$$$$$delay(255);
//$$$$$delay(255);
//$$$$$delay(255);
//$$$$$delay(255);
delay(255);
//IE2|=URXIE1; // 允许接收中断
_DINT(); //暂时关闭中断
//P4OUT|=BIT3; // P4.3=1打开电源
//$$$$$readuart(); //读取串口数据
FLAG4&=~BIT2; // 先清接收"FRIENDCOM....."正确位
//$$$$$for(i=0;i<2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -