📄 main.c
字号:
vvvv=1;
default:
break;
}
}
void timer2(void) interrupt 5 using 1
{
mscounter++;
mscounter1++;
if(st_1==1)
{
if(mscounter>2200)
{
off_led(outnum);
st_1=0;
}
}
if(st_cance==1)
{
if(mscounter1>2200)
{
SECOND_3=1;
SECOND_8=1;
st_cance=0;
}
}
TF2=0;
}
unsigned char CMP_STRING(unsigned char *pt1,
unsigned char *pt2,unsigned char len)
{
unsigned char ct; // fixed lenth 4.
for (ct=0;ct<len;ct++)
{
if (*pt1++ != *pt2++)
return 1;
}
return 0; // equal return 0.
}
/////////////////////////////////////////////////////////////////
void delay_10ms (uint _10ms)
{
ET2 = 0; // Disable timer2 interrupt
T2CON = 0x04; // 16-bit auto-reload, clear TF2, start timer
while (_10ms--)
{
while (!TF2)
{
// if (CmdValid || CmdReceived)
{
TR2 = FALSE;
TF2 = FALSE;
return;
}
}
TF2 = FALSE;
}
TR2 = FALSE;
}
/****************************************************************************
****************************************************************************/
void isr_timer0(void) interrupt 1 using 1
{
// TH0=0xfe;
// TL0=0x2b;
if(M_FLAG==1)return;
if(M_STA==0)
{
if(M_BIT==1)
{
TR0=0;
M_STA=0;
SHORT_FLAG=0;
M_FLAG=0;
error_flag=1;
return;
}
else
{
M_STA=1;
SHORT_FLAG=1;
HALF_FLAG=!HALF_FLAG;
return;
}
}
else if(M_STA==1)
{
if(M_BIT==1)
{
TR0=0;
M_STA=0;
SHORT_FLAG=0;
M_FLAG=0;
error_flag=1;
return;
}
else
{
HALF_FLAG=0;
RCV_BIT=0;
M_STA=2;
M_DATA_FLAG=0;
M_BITS=0;
R_MRC=0;
SHORT_FLAG=1;
HALF_FLAG=!HALF_FLAG;
return;
}
}
else if(M_STA==2)
{
if(HALF_FLAG==0)
{
RCV_BIT=M_BIT;
SHORT_FLAG=1;
HALF_FLAG=!HALF_FLAG;
return;
}
else
{
if((RCV_BIT==1)&&(M_BIT==1)) //出错返回
{
TR0=0;
M_STA=0;
SHORT_FLAG=0;
M_FLAG=0;
error_flag=1;
return;
}
if((RCV_BIT==0)&&(M_BIT==0)) //出错返回
{
TR0=0;
M_STA=0;
SHORT_FLAG=0;
M_FLAG=0;
error_flag=1;
return;
}
if(((RCV_BIT==0)&&(M_BIT==1))||((RCV_BIT==1)&&(M_BIT==0)))
{
if(M_DATA_FLAG==0) //接受9个bit的头
{
if(RCV_BIT==0)
{
M_BITS=0;
SHORT_FLAG=1;
HALF_FLAG=!HALF_FLAG;
return;
}
else
{
M_BITS++;
if(M_BITS==9)
{
M_DATA_FLAG=1;
M_BITS=0;
R_MRC=0;
RCV_BYTE=0;
M_BYTES=0;
M_LRC=0;
R_MRC=0;
SHORT_FLAG=1;
HALF_FLAG=!HALF_FLAG;
return;
}
SHORT_FLAG=1;
HALF_FLAG=!HALF_FLAG;
return;
}
}
else //处理真实接受的数据 M_DATA_FLAG=1
{
if(M_BITS==4) //处理第五位偶效验位
{
if(M_BYTES==10) //处理最后列效验的四个bit
{
if(RCV_BIT==1) //为高电平出错
{
TR0=0;
M_STA=0;
SHORT_FLAG=0;
M_FLAG=0;
error_flag=1;
return;
}
else
{
RCV_BYTE^=M_LRC; //进行异或运算进行每列位校验
if(RCV_BYTE==0) //校验正确
{
M_FLAG=1;
error_flag=0;
// IE=0;
TR0=0;
return;
}
else //校验不正确
{
TR0=0;
M_STA=0;
SHORT_FLAG=0;
M_FLAG=0;
error_flag=1;
return;
}
}
}
else
{
if((RCV_BIT==0)&&(R_MRC==1)) //出错返回
{
TR0=0;
M_STA=0;
SHORT_FLAG=0;
M_FLAG=0;
error_flag=1;
return;
}
if((RCV_BIT==1)&&((!R_MRC)==1)) //出错返回
{
TR0=0;
M_STA=0;
SHORT_FLAG=0;
error_flag=1;
M_FLAG=0;
return;
}
if((M_BYTES%2)==0)
{
M_IDATA[M_BYTES/2]=RCV_BYTE&0x0f;
M_LRC^=RCV_BYTE;
}
else if((M_BYTES%2)==1)
{
yyj=M_IDATA[M_BYTES/2];
yyj=yyj<<4;
RCV_BYTE=RCV_BYTE&0x0f;
M_LRC^=RCV_BYTE;
yyj=yyj+RCV_BYTE;
M_IDATA[M_BYTES/2]=yyj;
}
M_BYTES++;
RCV_BYTE=0;
M_BITS=0;
SHORT_FLAG=1;
R_MRC=0;
HALF_FLAG=!HALF_FLAG;
return;
}
}
else //处理接受的四个bit数据
{
RCV_BYTE=RCV_BYTE<<1;
if(RCV_BIT==1)
{
RCV_BYTE=RCV_BYTE|0x01;
R_MRC=!R_MRC;
}
M_BITS++;
SHORT_FLAG=1;
HALF_FLAG=!HALF_FLAG;
return;
}
}
}
}
}
else
{
TR0=0;
M_STA=0;
SHORT_FLAG=0;
M_FLAG=0;
return;
}
}
///////////////////////////////////////////
void flash_led(void)
{
unsigned int i;
led_3=0;
for(i=0;i<2800;i++);
led_3=1;
}
/////////////////////////////////////////////////
void receive_send() interrupt 4
{
unsigned char s;
ES=0;
if(RI)
{
RI=0;
s=SBUF;
if((rxhead==0)&&(s!=0x02))
{
rxhead=0;
ES=1;
}
receive_buf1[rxhead++]=s;
if(s==0x03)
{
receive_flag=1;
rxhead=0;
ES=1;
}
}
else if(TI)
{
TI=0;
if(txhead>2)
{
txhead=0;
ES=1;
return;
}
SBUF=send_buf[txhead++];
ES=1;
return;
}
ES=1;
}
void EM_REV (void) interrupt 0 using 1
{
TR0=0;
TL0=0x89; //定时为130uS; 0x89=137 137=256-(x*(11059200/12000000)) x=130
// TL0=0x10;
// TH0=0xff;
// TL0=0x0f;
TF0=0;
TR0=1;
ET0=1;
if(M_FLAG==0)
{
if(SHORT_FLAG==0)
M_STA=0;
else
SHORT_FLAG=0;
}
return;
}
/***************************************************************************/
//;;;;;;;;;;read inter data flash(EEPROM)program ;;;;;;;;;;;;;;;;
//;;;;;;;;;;;;;;ext address data is form 0~29696;;;;;;;;;;;;;;;;;;;;
unsigned char read_eeprom(unsigned int addrdata)
{
unsigned int address;
unsigned char data1;
address=0x2000+addrdata;
ISP_ADDRH=(unsigned char)(address>>8);
ISP_ADDRL=(unsigned char)address;
// EA=0;
ISP_CONTR=WAIT_TIME;
ISP_CONTR=0x80;
ISP_CMD=ISP_IAP_BYTE_READ;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
;;;
data1=ISP_DATA;
// EA=1;
return data1;
}
//;;;;;;;;;;write data flash(EEPROM) program;;;;;;;;;;;;;;;;;;
//;;;;;;;;;;;ext address 0~29696 data :;;;;;;;;;;;;;;;;;;;;
void write_eeprom(unsigned int addrdata,unsigned char data2)
{
unsigned int address;
address=0x2000+addrdata;
ISP_DATA=data2;
ISP_ADDRH=(unsigned char)(address>>8);
ISP_ADDRL=(unsigned char)address;
// EA=0;
ISP_CONTR=WAIT_TIME;
ISP_CONTR=0x80;
ISP_CMD=ISP_IAP_BYTE_PROGRAM;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
// EA=1;
}
void write_pagedata(unsigned char pagenumber)
{
unsigned int i;
unsigned char sectors;
sectors=pagenumber;
erase_eeprom(sectors);
for(i=0;i<4;i++)
write_eeprom(sectors*512+i,snr[i]);
for(i=4;i<512;i++)
write_eeprom(sectors*512+i,00);
}
void erase_eeprom(unsigned char sectors)
{
unsigned int addr;
addr=0x2000+sectors*0x200; //89c51rc is 0x2000 89c54rd+ is 0x8000
ISP_ADDRH=(unsigned char)(addr>>8);
ISP_ADDRL=(unsigned char)addr;
// EA=0;
ISP_CONTR=WAIT_TIME;
ISP_CONTR=0x80;
ISP_CMD=ISP_IAP_SECTOR_ERASE;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
// EA=1;
}
void read_cardno(void)
{
unsigned char i;
for(i=0;i<4;i++)
snr4[i]=read_eeprom(i);
}
void read_first(void)
{
unsigned int i;
unsigned char j;
unsigned char ss1;
select_500(0);
for(i=0;i<53;i++)
{
ss1=readcard1();
if(ss1==0)
{
for(i=0;i<4;i++)
snr4[i]=snr[i];
write_pagedata(0);
led_light(0);
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -