📄 uart4800.c
字号:
}
/*****************************************************************/
/*功能描述:向TCB发送show_mode */
/*函数说明:show_mode=0or1 */
/*调用函数: checkbcc() TX_NBYTE(uchar) */
/*全局变量: RXTXBUF[0~6] addr表地址 */
/*输入: */
/*****************************************************************/
void read_show_mode_res(void)
{
RXTXBUF[0]=0XE9;
RXTXBUF[1]=0X3A;
RXTXBUF[2]=0X05;
RXTXBUF[3]=addr;
RXTXBUF[4]=show_mode;
RXTXBUF[6]=0XF0;
checkbcc(5);
TX_NBYTE(7);
}
/*****************************************************************/
/*功能描述:向TCB发送版本号 */
/*函数说明: */
/*调用函数: checkbcc() TX_NBYTE(uchar) */
/*全局变量: RXTXBUF[0~8] addr表地址 */
/*输入: */
/*****************************************************************/
void read_version_res(void)//读版本号
{
RXTXBUF[0]=0XE9;
RXTXBUF[1]=0X3E;
RXTXBUF[2]=0X07;
RXTXBUF[3]=addr;
RXTXBUF[4]=VERSION0;
RXTXBUF[5]=VERSION1;
RXTXBUF[6]=VERSION2;
checkbcc(7);
RXTXBUF[8]=0xF0;
TX_NBYTE(9);
}
/*****************************************************************/
/*功能描述:向TCB发送data xx.xxxxxx */
/*函数说明:00008.104 low~high 04 81 00 00 */
/*调用函数: checkbcc() TX_NBYTE(uchar) */
/*全局变量: RXTXBUF[0~9] addr表地址 */
/*输入: */
/*****************************************************************/
void read_data_verify_res(void)
{
RXTXBUF[0]=0XE9;
RXTXBUF[1]=0X32;
RXTXBUF[2]=0X08;
RXTXBUF[3]=addr;
RXTXBUF[4]=wt_who[1];
RXTXBUF[5]=wt_who[2];
RXTXBUF[6]=wt_who[3];
RXTXBUF[7]=wt_who[4];
RXTXBUF[9]=0xF0;
checkbcc(8);
TX_NBYTE(10);
}
/*****************************************************************/
/*功能描述:向TCB发送uart_mode */
/*函数说明:show_mode=0x55 or 0 */
/*调用函数: checkbcc() TX_NBYTE(uchar) */
/*全局变量: RXTXBUF[0~6] addr表地址 */
/*输入: */
/*****************************************************************/
void read_uart_mode_res(void)
{
RXTXBUF[0]=0XE9;
RXTXBUF[1]=0X36;
RXTXBUF[2]=0X05;
RXTXBUF[3]=addr;
RXTXBUF[4]=uart_mode;
RXTXBUF[6]=0XF0;
checkbcc(5);
TX_NBYTE(7);
}
/************************************************************/
/*功能描述:跟据收到的命令 调用不同的处理函数 */
/*函数说明: */
/*调用函数: */
/*全局变量: uart_w RXTXBUF[0~14] */
/*输入: wt_who[] 8位;//L NNNNNNNN.NNNNNN H +ADDR */
/* conster[] 3位:L----H */
/************************************************************/
void comand(void)
{
if(uart_w>6)
{
if(RXTXBUF[0]==0XE1)
{
if(RXTXBUF[4]==password[0]&RXTXBUF[5]==password[1]&RXTXBUF[6]==password[2])
{
if(RXTXBUF[3]==addr)
{
if(RXTXBUF[2]==0x0A)
{
switch(RXTXBUF[1])
{
case 0x2C: write_time_res(RXTXBUF+7);break;
case 0x21: write_password_res(RXTXBUF+7);break;
}
}
else if(RXTXBUF[2]==0x08)
{
switch (RXTXBUF[1])
{
case 0x2A: write_show_mode_res(RXTXBUF+7);break;
case 0x2F: write_lcd_show_res(RXTXBUF+7);break;
case 0x26: write_uart_mode_res(RXTXBUF+7);break;
}
}
else if(RXTXBUF[1]==0X22&RXTXBUF[2]==0X0B)
{
if(WRDATA_FLG==0)
{
write_data_res(RXTXBUF+7);
}
}
else if(RXTXBUF[1]==0X29&RXTXBUF[2]==0X0D)
{
write_constant_res(RXTXBUF+7);
}
}
else if(RXTXBUF[3]==0XFF)
{
if(RXTXBUF[1]==0x28&RXTXBUF[2]==0x08)
{
write_address_res(RXTXBUF+7);
}
}
}
}
}
else
{
if(RXTXBUF[0]==0XE1)
{
if(RXTXBUF[2]==4&RXTXBUF[3]==addr)
{
switch(RXTXBUF[1])
{
case 0x3C: read_time_res();break;
case 0x39: read_constant_res();break;
case 0x3A: read_show_mode_res();break;
case 0x3e: read_version_res();break;
case 0x32: read_data_verify_res();break;
case 0x36: read_uart_mode_res();break;
}
}
else if(RXTXBUF[1]==0X38&RXTXBUF[2]==0X04&RXTXBUF[3]==0XFF)
{
read_address_res();
}
}
else if(RXTXBUF[0]==0XC0&RXTXBUF[1]==addr&RXTXBUF[3]==0XD0)
{
read_data_res();
}
}
}
/**************************************************************/
/*功能描述:接收N 个字节数据 */
/*函数说明:在本函数中还有对发送时间限定和规的一些处理 */
/*调用函数: RX_BYTE() comand() */
/*全局变量:RX_FLG uart start_flg uart_w RXTXDATA RXTXBUF[0~14]*/
/*输入: */
/**************************************************************/
void RX_NBYTE(void)
{
static unsigned char checksum;
while( RX_FLG )//是否接收到数据
{
RX_FLG=0;
if(RXTXDATA==0XE1|RXTXDATA==0XC0)//判断是否为起始数据
{
if(uart_w==0)//uart_w=接收到的数据长度
{
start_flg=1;//收到起始数据的标志位
uart=UART_SPAN;//时间限制
}
if(uart_w==1)uart_w--;
checksum=0;
}
if(start_flg)
{
RXTXBUF[uart_w]=RXTXDATA&0xff;
checksum+=RXTXBUF[uart_w];
uart_w++;
}
if(RXTXDATA==0xD0|RXTXDATA==0XF0)
{
start_flg=0;
checksum-=RXTXBUF[uart_w-1];//checksum为CRC校验码
checksum-=RXTXBUF[uart_w-2];
if((checksum&0x7f)==RXTXBUF[uart_w-2]){comand();}
uart_w=0;
}
RX_BYTE();
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
if(time1>3)
{CCR0+=Bitimel;time1=0;} // Add Offset to CCR0
else {CCR0+=Bitimem;time1++;}
// RX
if (CCTL0 & CCIS0) //判断是否收到数据
{
if( CCTL0 & CAP ) //是否start位
{
CCTL0 &= ~ CAP; //设置成比较模式
CCR0 += Bitime_5;
}
else
{
RXTXDATA = RXTXDATA >> 1;
if (CCTL0 & SCCI) // Get bit waiting in receive latch
RXTXDATA |= 0x80;
BitCnt --; //是否收到1字节数据
if ( BitCnt == 0)
{
CCTL0 &= ~ CCIE;// 数据收完结束中断
LPM3_EXIT; //LPM3
RX_FLG=1;
}
}
}
// TX
else
{
if ( BitCnt == 0)
{ CCTL0 &= ~ CCIE; //数据发完关中断
LPM3_EXIT;
}
else
{
CCTL0|= OUTMOD2; //101复位
if (RXTXDATA & 0x01)
CCTL0&=~OUTMOD2; //置位
RXTXDATA = RXTXDATA >> 1;
BitCnt --;
}
}
}
#pragma vector=TIMERA1_VECTOR
__interrupt void timea(void)
{
if(CCTL1&CCIFG)
{
time2++;
if(time2&2)
{
CCR1+=time_20msm;
time2=0;
} // Add Offset to CCR0
else
{
CCR1+=time_20msl;
}
CCTL1&=~CCIFG;
time_t++;
if(start_flg)
{
if(uart>=1)
{uart--;}
else
{
uart_w=0;
start_flg=0;
}
}
/*if(int_flg)
{
int_flg--;
if(PULL_FLG){int_flg=0;return;}
if(int_flg==0)
{
if(PULL_FLG==0)
{
if(span1==0)
{
int_sum++;//记录脉冲个数
//span1=SPAN;//脉冲速度限制
LPM3_EXIT;
}
}
span1=SPAN;//脉冲速度限制
}
}*/
if(int_flg)
{
if(filter_port1_flg)
{
if(span1==0)
{
int_sum++;
}
int_flg=0;
filter_port1_flg=0;
span1=SPAN;
}
else {filter_port1_flg=1;}
}
if(span1>0){span1--;}
}
LPM3_EXIT;
}
/************************************************************/
/*功能描述:外部中断处理函数 */
/*函数说明:外部中断 P1.5引脚中断 */
/*调用函数: 无 */
/*全局变量: int_flg spanl int_sum */
/*输入: */
/************************************************************/
#pragma vector=PORT1_VECTOR
__interrupt void in0(void)
{
/*if(P1IFG&BIT5)
{
P1IFG&=~BIT5;
int_flg=2;//脉冲标志位
}*/
if(P1IFG&BIT5)
{
if(P1IES &BIT5) // H -> L
{
P1IES &= ~BIT5;
int_flg=1;
}
else // L -> H
{
P1IES |=BIT5;
int_flg=0;
filter_port1_flg=0;
}
P1IFG &=~BIT5;
}
if(POWER_FLG)//上电检测
{
P1IFG&=~BIT2;
rest=1;
}
// LPM3_EXIT;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -