?? serial.h
字號:
void Serial_init(void)
{
Set_28F040_Page(1);
Machine_ID=Flash[0x2400];
if((Machine_ID<101)||(Machine_ID>132)){
b_Serial_mode=RS232_MODE;
Machine_ID=0x53;
RS485_SEND
}else{
b_Serial_mode=RS485_MODE;
RS485_RECV
}
Recv_pointer=Recv_stat=0;
b_Recv_done=0;
b_Send_busy=0;
Send_buf[0]=Send_buf[1]=Send_buf[2]=Machine_ID;
if(b_Serial_mode==RS232_MODE){
#ifdef BAUD_57600
RCAP2L=0xFA; RCAP2H=0xFF; // 11.0592MHz 57600B=0xFFFA(-6)
#else
RCAP2L=0xDC; RCAP2H=0xFF; // 11.0592MHz 9600B=0xFFDC(-36)
#endif
}else{ // RS485 mode
RCAP2L=0xFA; RCAP2H=0xFF; // 11.0592MHz 57600B=0xFFFA(-6)
}
}
void Send_Data(void)
{
BYTE i, j;
j=Send_buf[5];
for(i=6; i<22; i++)
j+=Send_buf[i];
Send_buf[22]=0-j;
Send_pointer=1;
b_Send_busy=1;
if(b_Serial_mode==RS485_MODE)
RS485_SEND
SBUF=Send_buf[0];
}
void Serial_interrupt(void) interrupt SIO_VECTOR
{
BYTE s;
if(RI){
RI=0;
s=SBUF;
switch(Recv_stat){
case 0:
if(s==Machine_ID)
Recv_stat=1;
break;
case 1:
if(s==Machine_ID)
Recv_stat=2;
else
Recv_stat=0;
break;
case 2:
if(s==Machine_ID){
Recv_stat=3;
Recv_pointer=0;
}else
Recv_stat=0;
break;
case 3:
Recv_buf[Recv_pointer]=s;
Recv_pointer++;
Recv_stat=4;
break;
case 4:
if(s==(~Recv_buf[0]))
Recv_stat=5;
else
Recv_stat=0;
break;
case 5:
Recv_buf[Recv_pointer]=s;
Recv_pointer++;
if(Recv_pointer==19){
Recv_stat=0;
b_Recv_done=1;
REN=0;
}
break;
}
}else{
TI=0;
if(Send_pointer<23){
SBUF=Send_buf[Send_pointer];
Send_pointer++;
}else{
b_Send_busy=0;
if(b_Serial_mode==RS485_MODE)
RS485_RECV
}
}
}
void Recv_Process(void)
{
BYTE i, j;
j=Recv_buf[1];
for(i=2; i<19; i++)
j+=Recv_buf[i];
if(j==0){
switch(Recv_buf[0]){
case 0: // Get User/Total_record/Version
if(!b_Send_busy){
Send_buf[3]=0; Send_buf[4]=~0;
Send_buf[5]=Total_User%256; Send_buf[6]=Total_User/256;
Send_buf[7]=Total_Record%256; Send_buf[8]=Total_Record/256;
Send_buf[9]='V'; Send_buf[10]='1';
Send_buf[11]='.'; Send_buf[12]='1';
for(i=13; i<22; i++)
Send_buf[i]=0;
Send_Data();
}
break;
case 1: // Read user infomation
if(!b_Send_busy){
Set_28F040_Page(8);
Flash_p=Recv_buf[2]*256+Recv_buf[1];
Send_buf[3]=1; Send_buf[4]=~1;
for(i=0; i<17; i++)
Send_buf[i+5]=Flash[Flash_p+i];
Send_Data();
}
break;
case 2: // Calculate USER and RECORD
Calc_Total_User();
Calc_Total_Record();
if(!b_Send_busy){
Send_buf[3]=2; Send_buf[4]=~2;
Send_buf[5]=Total_User%256; Send_buf[6]=Total_User/256;
Send_buf[7]=Total_Record%256; Send_buf[8]=Total_Record/256;
Send_buf[9]='V'; Send_buf[10]='1';
Send_buf[11]='.'; Send_buf[12]='1';
for(i=13; i<22; i++)
Send_buf[i]=0;
Send_Data();
}
break;
case 3: // Write user information
Set_28F040_Page(8);
Flash_p=Total_User*17;
Total_User++;
for(i=0; i<17; i++)
Write_28F040(Flash_p+i, Recv_buf[i+1]);
if(!b_Send_busy){
Send_buf[3]=3; Send_buf[4]=~3;
for(i=0; i<17; i++)
Send_buf[i+5]=Flash[Flash_p+i];
Send_Data();
}
break;
case 4: // Write to a sector, the target must be 0xFF
if((Recv_buf[1]==0xAA)&&(Recv_buf[2]==0x55)){
Set_28F040_Page(Recv_buf[3]);
Flash_p=Recv_buf[5]*256+Recv_buf[4];
for(i=0; i<Recv_buf[6]; i++)
Write_28F040(Flash_p+i, Recv_buf[7+i]);
if(!b_Send_busy){
Send_buf[3]=4; Send_buf[4]=~4;
for(i=0; i<17; i++)
Send_buf[i+5]=Flash[Flash_p+i];
Send_Data();
}
}
break;
case 5: // Erase a sector of Flash
if((Recv_buf[4]==0x55)&&(Recv_buf[5]==0xAA)){
Flash_p=Recv_buf[3]*256+Recv_buf[2];
Erase_28F040(Recv_buf[1]);
if(!b_Send_busy){
Send_buf[3]=5; Send_buf[4]=~5;
for(i=0; i<17; i++)
Send_buf[i+5]=Flash[Flash_p+i];
Send_Data();
}
}
break;
case 6: // Read record
if(!b_Send_busy){
Set_28F040_Page(Recv_buf[1]);
Flash_p=Recv_buf[3]*256+Recv_buf[2];
Send_buf[3]=6; Send_buf[4]=~6;
for(i=0; i<17; i++)
Send_buf[i+5]=Flash[Flash_p+i];
Send_Data();
}
break;
case 8: // Set timer
for(i=0; i<8; i++){
Time_buf[i]=Recv_buf[i+1];
}
HT1380_WriteTime();
case 9: // Read timer
if(!b_Send_busy){
HT1380_ReadTime();
Send_buf[3]=9; Send_buf[4]=~9;
for(i=0; i<8; i++)
Send_buf[i+5]=Time_buf[i];
for(i=8; i<17; i++)
Send_buf[i+5]=0;
Send_Data();
}
break;
case 10: // Write LCD
Send_buf[3]=0xa; Send_buf[4]=~0xa;
if((Recv_buf[1]&7)==4){ // Now only support LCD line 4
if(Recv_buf[1]&0x80){ // LCD line 4 is controled by Machine
b_LCD_line4=0;
}else{ // LCD line 4 is controled by PC
b_LCD_line4=1;
mystrcpy(Recv_buf+2);
LCD_writeline(6); // LCD line 4 display
}
Send_buf[5]='O'; Send_buf[6]='K';
}else{ // Command not support,return 'NO'
Send_buf[5]='N'; Send_buf[6]='O';
}
for(i=7; i<22; i++)
Send_buf[i]=0;
Send_Data();
break;
case 11: // System pause
if((Recv_buf[1]==0x55)&&(Recv_buf[2]==0xAA)){
if(!b_Send_busy){
Send_buf[3]=11; Send_buf[4]=~11;
Send_buf[5]=0xAA; Send_buf[6]=0x55;
for(i=7; i<22; i++)
Send_buf[i]=0;
Send_Data();
}
Pause_time=50; // System pause time=1s
}
break;
case 12: // Get Last Card_no
if((Recv_buf[1]==0x55)&&(Recv_buf[2]==0xAA)){
if(!b_Send_busy){
Send_buf[3]=12; Send_buf[4]=~12;
for(i=0; i<7; i++)
Send_buf[i+5]=Last_Card_no[i];
for(i=7; i<17; i++)
Send_buf[i+5]=0;
Send_Data();
}
}
break;
}
}
b_Recv_done=0;
REN=1;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -