📄 msp430sgtznew.c
字号:
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=0x31; //将信道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);
wr1byte(0x0001,temp); //在0地址写入0,表示现有0组数据
temp=0x56;
wr1byte(0x0002,temp); //表示已经初始化
temp=0x01;
wr1byte(0x0003,temp); //表示第一信道
temp=0x00;
wr1byte(0x0004,temp); //初始化设备的地址为零
temp=0xc5; //表示此项目为仰卧起座
wr1byte(0x0005,temp);
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<20;i++)
{
delay(255); // 延时
if(r232buf[0]>=32) // 如果接收的数据大于等于32
{
for(r232buf[0]=1;r232buf[0]<32;r232buf[0]++)
{
if((r232buf[r232buf[0]+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 exitxh; // 跳出循环
}
}
}
}
exitxh:
//ME2&=~URXE1;
tempmem= RXBUF1; //先暂时关闭串口接收
if((FLAG4&BIT2)!=0) //如果接收到正确"FRIENDCOM....."
{
delay(255); //延时一会
csszjc(ch); //
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=(devicexd&0x0f)+0x30; //将信道发送出去
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0d;
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=0x0a; //发送确认键
}
else goto reloop; //如果没有正确接收"FRIENDCOM.....",则重新开始
delay(255);
ME2|=URXE1; //重新允许接收
P1OUT|=BIT0; //P1.0置位
P4OUT&=~BIT3; // P4.3=0关闭电源
delay(255);
delay(255);
P1OUT|=BIT0; //P1.0置位
P4OUT|=BIT3; // P4.3=1打开电源
delay(255);
delay(255);
UBR01 = 0xA0; // 3.58Mhz/9600 - 372
UBR11 = 0x01; // 4Mhz/9600 - 416.6666666667
UMCTL1 = 0x6B; //将UART1恢复到9600波特
_DINT(); //禁止中断
wr1byte(0X0003,devicexd); //将信道的值写入存储器
temp=re1byte(0x03);
if(temp!=devicexd) //再读一边如果不成功在写一次
wr1byte(0x0003,devicexd);
_EINT(); //打开中断
//FLAG3&=~BIT1; //清除上位机写信道标志位
}
if((FLAG3&BIT2)!=0)
{
//delay(255);
disp_lcd(0x0d,0x0d,0x0d,0x03,0); //显示---3表示清除存储器的全部数据
//delay(255);
//delay(255);
_DINT();
temp1=0x00;
wr1byte(0X0000,temp1); //将信道的值写入存储器
delay(50);
temp=re1byte(0x0000);
if(temp!=0x00) //再读一边如果不成功在写一次
wr1byte(0x0000,temp1);
delay(50);
temp1=0x00;
wr1byte(0X0001,temp1); //将信道的值写入存储器
temp=re1byte(0x0001);
if(temp!=0x00) //再读一边如果不成功在写一次
wr1byte(0x0001,temp1);
at64count=0;
_EINT();
delay(50);
//FLAG3&=~BIT2; //清除清存储器标志位
FLAG2&=~BIT0; //清有数据标志////////////////////
}
if((FLAG3&BIT3)!=0) //如果要进行远程升级
{
delay(255);
disp_lcd(0x0d,0x0d,0x0d,0x04,0); //显示---4表示清除存储器的全部数据
delay(255);
delay(255);
ycsj(); //进行远程升级
}
if((FLAG3&BIT4)!=0) //如果要连续传输数据
{
delay(255);
disp_lcd(0x0d,0x0d,0x0d,0x05,0); //显示---5表示向上位机发送存储器的全部数据
delay(255);
delay(255);
while(1)
{
}
}
if((FLAG3&0x07)!=0) checkcard(); //检查卡
FLAG3&=0Xf8;
}
/*******************参数设置检查***********************/
/*******************不用打开中断***********************/
void csszjc(const uchar * data) //进行参数设置
{
//const uchar * datapoint;
//datapoint=data;
while((*data)!='\0')
{
while ((IFG2 & UTXIFG1) == 0); //USART1 TX buffer ready?
TXBUF1=(*data); //发送出去
data++; //指针增加
delay(20);
}
}
//0D 0A 46 52 49 45 4E 44 43 4F 4D 20 54 45 4C 45 43 4F 4D 20 43 4F 2E 2C 4C 54 44 2E 0D 0A 46 43 32 30 31 2F 53 20 56 34 2E 30 0D 0A
//00 0D 0A 46 52 49 45 4E 44 43 4F 4D 20 54 45 4C 45 43 4F 4D 20 43 4F 2E 2C 4C 54 44 2E 0D 0A 46 43 32 30 31 2F 53 20 56 34 2E 30 0D 0A FE
/***************时间TIMERB中断******************/
#pragma vector=TIMERB1_VECTOR
__interrupt void TIMERBHandler( void )
{
TBCTL&=0XFFFE;
TBR=0XFC17; //1MS定时
//TBCCR0=0XFC17;
TBCCR0=0XFC17;
if(zwtqqjsq<100)
zwtqqjsq++;
if(startjsq<16)
startjsq++; //加到5MS到时
if((P2IN&BIT1)!=0) exitjsq=0;
else
{
if(exitjsq<10000)
exitjsq++;
}
}
/*********************IO口中断**********************/
#pragma vector=PORT2_VECTOR
__interrupt void PORT2Handler( void ) //
{
P2IFG&=~BIT6;
//EX0 = 0; //
P2IE&=~BIT6; //清BIT6,禁止中断
if(subf==0xb0)
{
tljish++;
//TR1 = 1;
//EX0 = 1;
P2IE|=BIT6; //清BIT6,禁止中断
//PX0 = 1;
//IT0 = 1;
}
else
{
tljish--;
if (tljish <0)
{
//EX0 = 0;
P2IE&=~BIT6; //清BIT6,禁止中断
//TR1 = 1;
//PX0 = 1;
//IT0 = 1;
subf = 0xb0;
}
else
{
//TR1 = 1;
//EX0 = 1;
P2IE|=BIT6;
//PX0 = 1;
//IT0 = 1;
}
}
}
/********************通讯中断(接收)**************************/
/********************接收标志位在FLAG1的低四位***************/
#pragma vector=USART1RX_VECTOR
__interrupt void USART1RXTXHandler( void )
{
tempmem= RXBUF1; //读取临时存储器
//if((tempmem==0xaa)&&(startjsq>4))
//if(tempmem==0xaa)
if((tempmem==0xaa)&&(startjsq>8))
{
FLAG1|=BIT0; //建立起始标志
startjsq=0; //重新赋0
r232buf[0]=0; //接收到第一个字节
FLAG3=0X00;
FLAG4=0X00;
}
else
{
startjsq=0; //接收到一个字节startjsq清零
if((FLAG1&BIT0)!=0) //如果找到起始位则处理,没有找到起始位就不做处理
{
r232buf[0]++; //
if(r232buf[0]==0X01)
{
r232buf[1]=tempmem; //将接受的数据放到缓存区里
}
if(r232buf[0]==0X02)
{
r232buf[2]=tempmem; //将接受的数据放到缓存区里
//tempmem1=tempmem; //后面要接受的数据长度(高位)
}
if(r232buf[0]==0X03)
{
r232buf[3]=tempmem; //将接受的数据放到缓存区里
tempmem1=tempmem; //后面要接受的数据长度(低位)
}
if(r232buf[0]>0x03)
{
r232buf[r232buf[0]]=tempmem; //保存接收到的数据
tempmem1--;
if(tempmem1==0) //表示接收数据完毕
{
if(tempmem==0xbc)
FLAG3|=BIT0;
if((r232buf[4]==xmdmbuf)&&((FLAG3&BIT0)!=0)) goto skip;
if((r232buf[4]!=xmdmbuf)||(r232buf[5]!=deviceadr))//如果接收的不是本机的项目代码或者地址
{ //则清标志状态位,结束退出
r232buf[0]=0;
//FLAG3=0X00; //
//FLAG4=0X00;
FLAG1&=~BIT0; //清找到起始位标志
goto end;
}
skip:
tempmem3=3+r232buf[3]; //在中断中接收的数据长度占一个字节
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -