📄 process_bak.c
字号:
#include <iom16.h>
#include <stdio.h>
#include <ina90.h>
#include "Public.h"
#include "Process.h"
void (* reset) (void) ;
/* Return 0 (FALSE) if the receive buffer is empty */
unsigned char DataInReceiveBuffer( void )
{
if(USART_RxHead == USART_RxTail)
return 0;
else
return 1;
}
/* Host 模式下的输入数据*/
signed char Host_Read_Data(uchar * data)
{
while( STBA != 0x00 )
{
/* if(Over_Timer > 10*60) // 等待 1分钟
{
return OVER;
}*/
if(Over_Timer > 10) // 等待 1分钟
{
return OVER;
}
}
IBFA_H;
_NOP();
*data = PINA;
IBFA_L;
return TRUE;
}
/* Host 模式下的输出数据*/
signed char Host_Out_Data(uchar * data)
{
PORTB |= (*data&0x0f) ;
PORTB &= ((*data&0x0f)|0xf0) ;
PORTD |= (*data&0xf0) ;
PORTD &= ((*data&0xf0)|0x0f) ;
Send_Over=FALSE;
while( PC2_IN ==0x00 )
{
if(Send_Over == TRUE)
return OVER;
}
//OBFA_H;
_NOP();
OBFA_L;
while( ACKA !=0x00 )
{
if(Send_Over == TRUE)
{
OBFA_H;
return OVER;
}
}
OBFA_H;
return TRUE;
}
/* Device 模式下的读入数据*/
signed char Device_Read_Data(uchar * data)
{
PC2_H;
ACKA_H;
_NOP();
while( OBFA != 0 )
{
if(Send_Over == TRUE)
{
PC2_L;
return OVER;
}
}
*data = PINA;
PC2_L;
ACKA_L;
_NOP();
//ACKA_H;
return TRUE;
}
/* Device 模式下的输出数据*/
signed char Device_Out_Data(uchar * data)
{
PORTB |= (*data&0x0f) ;
PORTB &= ((*data&0x0f)|0xf0) ;
PORTD |= (*data&0xf0) ;
PORTD &= ((*data&0xf0)|0x0f) ;
STBA_L;
_NOP();
//STBA_H;
/*
while( IBFA != 1 )
{
if(Send_Over == TRUE)
return OVER;
}
*/
while( IBFA != 0 )
{
if(Send_Over == TRUE)
return OVER;
}
STBA_H;
return TRUE;
}
void WatchDog(void)
{
if((time_100ms%6)>=0&&(time_100ms%6)<3)
DOG_H ;
else DOG_L ;
}
void Usart_Process(void)
{
uchar i,j ;
if( DataInReceiveBuffer() == 1 )
{
for(i = USART_RxTail ; i < USART_RxHead ; )
{
if(USART_RxBuf[i++] == '$' && USART_RxBuf[USART_RxHead ] == '^')
{
i ++ ;
switch (USART_RxBuf[i++])
{
case '0':
if(Send_Mode!= 0xA0)
{
Send_Mode= 0xA0 ;
EEPROM_write(0x90,Send_Mode);
}
Send_String("$A0^");
break;
case '1':
if(Send_Mode != 0xA1 )
{
Send_Mode= 0xA1 ;
EEPROM_write(0x90,Send_Mode);
}
Send_String("$A1^");
break;
case '2':
if(Work_Mode != 0xA2 )
{
Work_Mode= 0xA2 ;
EEPROM_write(0x80,Work_Mode);
Send_String("$A2^");
reset=0;
reset ();//while(1); //工作模式发生改变 需要复位CPU,使用外部 Watchdog 完成
}
Send_String("$A2^");
break;
case '3':
if(Work_Mode != 0xA3 )
{
Work_Mode= 0xA3 ;
EEPROM_write(0x80,Work_Mode);
Send_String("$A3^");
reset=0;
reset ();while(1); //工作模式发生改变 需要复位CPU,使用外部 Watchdog 完成
}
Send_String("$A3^");
break;
case '4':
for(j = 0; j < 24 ; j++)
EEPROM_write(0xA0+j,USART_RxBuf[i++]);
for(j = 0; j < 24 ; j++)
tempbuf[j] = EEPROM_read(0xA0+j);
Send_String("$A4");
Send_String(tempbuf);
Send_String("^");
for(j = 0; j < 12 ; j++)
{
Send_DataBuf[j] = AscToHex(EEPROM_read(0xA0+2*j),EEPROM_read(0xA0+2*j+1));
}
break;
case '5':
for(j = 0; j < 24 ; j++)
EEPROM_write(0xC0+j,USART_RxBuf[i++]);
for(j = 0; j < 24 ; j++)
tempbuf[j] = EEPROM_read(0xC0+j);
Send_String("$A5");
Send_String(tempbuf);
Send_String("^");
for(j = 0; j < 12 ; j++)
{
Send_DataBuf[j] = AscToHex(EEPROM_read(0xC0+2*j),EEPROM_read(0xC0+2*j+1));
}
break;
case '8':
Send_Mode=EEPROM_read(0x90);
if(Send_Mode == 0xA0)
Send_String("$A0^");
else if(Send_Mode == 0xA1)
Send_String("$A1^");
else
Send_String("$AE^"); // error
break;
case '9':
Work_Mode=EEPROM_read(0x80);
if(Work_Mode == 0xA2)
Send_String("$A2^");
else if(Work_Mode == 0xA3)
Send_String("$A3^");
else
Send_String("$AE^"); // error
break;
case 'A':
for(j = 0; j < 24 ; j++)
tempbuf[j] = EEPROM_read(0xA0+j);
Send_String("$AA");
Send_String(tempbuf);
Send_String("^");
break;
case 'B':
for(j = 0; j < 24 ; j++)
tempbuf[j] = EEPROM_read(0xA0+j);
Send_String("$AB");
Send_String(tempbuf);
Send_String("^");
break;
case 'C':
Send_String("$AC");
itostr((char*)tempbuf,Report.Ok);
Send_String(tempbuf);
Send_String("-");
itostr((char*)tempbuf,Report.Error);
Send_String(tempbuf);
Send_String("-");
itostr((char*)tempbuf,Report.Over);
Send_String(tempbuf);
Send_String("^");
break;
default:
break;
}
}
}
if( USART_RxBuf[USART_RxHead ] == '^')
USART_RxTail = USART_RxHead = 0 ;
}
}
void Host_Process(void)
{
uchar i ;
signed char flag;
if(Send_Enable == TRUE)
{
Send_Enable = FALSE;
/*
for(i = 0 ;i <12 ; i++ )
{
USART_Transmit( (HexToAsc(Send_DataBuf[i])&0xff00)>>8); // Echo the received character
USART_Transmit( HexToAsc(Send_DataBuf[i])&0x00ff); // Echo the received character
}
*/
// 给下位机产生中断信号
INTRA_H;
INTRA_L;
for(i = 0 ; i < 30 ; i++ )
{
_NOP();
}
INTRA_H;
for(i = 0 ; i < 12 ; i++ )
{
flag = Host_Out_Data(Send_DataBuf+i);
if( flag == FALSE)
{
LED_Mode = 3 ;
#if DEBUG == 1
Send_String("$AR^");
#endif
Report.Error ++;
return ;
}
else if( flag == OVER)
{
#if DEBUG == 1
Send_String("$AV^");
#endif
Report.Over ++;
return ;
}
}
Send_Over = FALSE;
for(i = 0 ; i < 12 ; i++ )
{
flag = Host_Read_Data(Read_DataBuf+i);
if( flag == FALSE || Read_DataBuf[11] != 0xCC
||(Read_DataBuf[0] != 0xAA && Read_DataBuf[0] != 0xA5))
{
LED_Mode = 3 ;
#if DEBUG == 1
Send_String("$AR^");
#endif
Report.Error ++;
return ;
}
else if( flag == OVER)
{
#if DEBUG == 1
Send_String("$AV^");
#endif
Report.Over ++;
return ;
}
}
#if DEBUG == 1
Send_String("$AK^");
#endif
Report.Ok ++;
LED_Mode = 1 ;
}
}
void Device_Process(void)
{
uchar i ;
char s[10];
signed char flag;
flag = 0xaa;
Send_Over = FALSE;
PC2_L;
for(i = 0 ; i < 12 ; i++ )
{
flag = Device_Read_Data(Read_DataBuf+i);
if(flag == FALSE )
break;
}
if( flag == FALSE || Read_DataBuf[11] != 0xCC
||(Read_DataBuf[0] != 0xAA && Read_DataBuf[0] != 0xA5))
{
#if DEBUG == 1
Send_String("$AR^");
#endif
Report.Error ++;
LED_Mode = 4 ;
return ;
}
else if( flag == OVER)
{
#if DEBUG == 1
Send_String("$AV^");
#endif
Report.Over ++;
LED_Mode = 4 ;
return ;
}
Send_DataBuf[0] = Read_DataBuf[0];
Send_DataBuf[10] |= 0xA0 ;
Send_DataBuf[11] = 0xCC ;
for(i = 0 ; i < 12 ; i++ )
{
Device_Out_Data(Send_DataBuf+i);
}
Report.Ok ++;
#if DEBUG == 1
Send_String("$AK^");
/* Read_DataBuf[12]=0;
Send_String(Read_DataBuf);
// sprintf(s,"times= %d\n\r",Report.Ok);
Send_String(" Times= ");
*/
s[0]='0'+(Report.Ok%10000)/1000;
s[1]='0'+(Report.Ok%1000)/100;
s[2]='0'+(Report.Ok%100)/10;
s[3]='0'+(Report.Ok%10);
s[4]=0;
Send_String((uchar*)s);
Send_String("\n\r");
LED_Mode = 2 ;
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -