📄 tpublic.c
字号:
asm ldb value, [portioa];
KR_LAST[11]=value;
value=~value;
value=value & 0x0f; // 低四位
value=value<<4;
YXBUF[9]|=value; // 低四位 高字节
break;
case 0x04: /* 5 遥信板 */
value=YX_BOARD_5_KRL;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[12]=value;
YXBUF[10]=~value;
value=YX_BOARD_5_KRM;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[13]=value;
YXBUF[11]=~value;
value=YX_BOARD_5_KRH;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[14]=value;
value=~value;
value=value & 0x0f;
YXBUF[12]|=value;
break;
case 0x05: /* 6 遥信板 */
value=YX_BOARD_6_KRL;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[15]=value;
value=~value;
image=value & 0xf0;//高四位
image=image>>4;
value=value & 0x0f;
value=value<<4;
YXBUF[12]|=value; // 低四位 高字节
YXBUF[13]=image; // 高四位 低字节
value=YX_BOARD_6_KRM;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[16]=value;
value=~value;
image=value & 0xf0;//高四位
image=image>>4;
value=value & 0x0f;
value=value<<4;
YXBUF[13]|=value; // 低四位 高字节
YXBUF[14]=image; // 高四位 低字节
value=YX_BOARD_6_KRH;
asm stb value, [portiob];
asm ldb value, [portioa];
KR_LAST[17]=value;
value=~value;
value=value & 0x0f;
value=value<<4;
YXBUF[14]|=value; // 低四位 高字节
break;
}
}
for(i=0;i<13;i++)
{
Temp.Word=kgbf[i];
YXBUF[2*i] =YXBUF[2*i] ^ Temp.B.Low;
YXBUF[2*i+1]=YXBUF[2*i+1] ^ Temp.B.High;
}
for(i=15;i<26;i++)
{
YXBUF[i]=0;
}
for(i=0;i<120;i++)
{
BVTM[i]=bvtm[i];
JGTM[i]=0;
}
for(i=120;i<200;i++)
{
BVTM[i]=bvtm[i];
JGTM[i]=0;
}
XMFlag=0;
XMCount=0;
XM0FullFlag=0;
XM1FullFlag=0;
YS_addr=(unsigned long)YXBUF0;
YSIPR=(unsigned long)SoeBuf;
for(i=0;i<25;i++)
{
YSFG[i]=0;
}
portioa=PIO_A_CMD;
value=0xff;
asm stb value, [portioa];/* PIO_A_CMD=0 inpout */
}
void InitYk(void)
{
unsigned int i,j;
pVar->maxyknum=0;
for(i=0;i<11;i++)
{
ClearYknum(i);
}
pVar->maxyknum=kcnum*6;
pVar->yksum=kcnum*6;
}
void DataBusOut(register unsigned char addr,register unsigned char value)
{
register unsigned int pio_addr;
register unsigned char data;
pio_addr=PIO_B_DAT; /* output 地址总线 */
data=0xff;
asm stb data, [pio_addr]; //清地址总线
pio_addr=PIO_A_DAT; /* outpout 数据总线 */
asm stb value, [pio_addr];
pio_addr=PIO_B_DAT; /* output 地址总线 */
asm stb addr, [pio_addr];
pio_addr=PIO_B_DAT; /* output 地址总线 */
data=0xff;
asm stb data, [pio_addr]; //清地址总线
}
unsigned char DataBusIn(register unsigned char addr)
{
register unsigned int pio_addr;
register unsigned char data,value;
pio_addr=PIO_B_DAT; /* output 地址总线 */
asm stb addr, [pio_addr];
pio_addr=PIO_A_DAT; /* outpout 数据总线 */
asm ldb data, [pio_addr];
pio_addr=PIO_B_DAT; /* output 地址总线 */
value=0xff;
asm stb value, [pio_addr]; //清地址总线
return data;
}
void ClearYknum(int unit)
{
disable();
switch(unit)
{
case 0x00:DataBusOut(YK_BOARD_1_KC0_4, YK_BOARD_NULL_1);
DataBusOut(YK_BOARD_1_KC5_8, YK_BOARD_NULL_2);
DataBusOut(YK_BOARD_1_KC9_12,YK_BOARD_NULL_3);
break;
case 0x01:DataBusOut(YK_BOARD_2_KC0_4, YK_BOARD_NULL_1);
DataBusOut(YK_BOARD_2_KC5_8, YK_BOARD_NULL_2);
DataBusOut(YK_BOARD_2_KC9_12,YK_BOARD_NULL_3);
break;
case 0x02:DataBusOut(YK_BOARD_3_KC0_4, YK_BOARD_NULL_1);
DataBusOut(YK_BOARD_3_KC5_8, YK_BOARD_NULL_2);
DataBusOut(YK_BOARD_3_KC9_12,YK_BOARD_NULL_3);
break;
case 0x03:DataBusOut(YK_BOARD_4_KC0_4, YK_BOARD_NULL_1);
DataBusOut(YK_BOARD_4_KC5_8, YK_BOARD_NULL_2);
DataBusOut(YK_BOARD_4_KC9_12,YK_BOARD_NULL_3);
break;
case 0x04:DataBusOut(YK_BOARD_5_KC0_4, YK_BOARD_NULL_1);
DataBusOut(YK_BOARD_5_KC5_8, YK_BOARD_NULL_2);
DataBusOut(YK_BOARD_5_KC9_12,YK_BOARD_NULL_3);
break;
case 0x05:DataBusOut(YK_BOARD_6_KC0_4, YK_BOARD_NULL_1);
DataBusOut(YK_BOARD_6_KC5_8, YK_BOARD_NULL_2);
DataBusOut(YK_BOARD_6_KC9_12,YK_BOARD_NULL_3);
break;
case 0x07:DataBusOut(YK_BOARD_7_KC0_4, YK_BOARD_NULL_1);
DataBusOut(YK_BOARD_7_KC5_8, YK_BOARD_NULL_2);
DataBusOut(YK_BOARD_7_KC9_12,YK_BOARD_NULL_3);
break;
case 0x08:DataBusOut(YK_BOARD_8_KC0_4, YK_BOARD_NULL_1);
DataBusOut(YK_BOARD_8_KC5_8, YK_BOARD_NULL_2);
DataBusOut(YK_BOARD_8_KC9_12,YK_BOARD_NULL_3);
break;
case 0x09:DataBusOut(YK_BOARD_9_KC0_4, YK_BOARD_NULL_1);
DataBusOut(YK_BOARD_9_KC5_8, YK_BOARD_NULL_2);
DataBusOut(YK_BOARD_9_KC9_12,YK_BOARD_NULL_3);
break;
case 0x0A:DataBusOut(YK_BOARD_10_KC0_4, YK_BOARD_NULL_1);
DataBusOut(YK_BOARD_10_KC5_8, YK_BOARD_NULL_2);
DataBusOut(YK_BOARD_10_KC9_12,YK_BOARD_NULL_3);
break;
case 0x0B:DataBusOut(YK_BOARD_11_KC0_4, YK_BOARD_NULL_1);
DataBusOut(YK_BOARD_11_KC5_8, YK_BOARD_NULL_2);
DataBusOut(YK_BOARD_11_KC9_12,YK_BOARD_NULL_3);
break;
default: break;
}
enable();
}
unsigned char SetYknum(unsigned int num,unsigned char type)
{//遥控预置
int unit,offset;
if(num+1>pVar->yksum) return (FALSE);
if((type!=0x33)&&(type!=0xcc)) return (FALSE);
unit=num/6;
offset=num % 6;
disable();
switch(type)
{
case 0x33:DataBusOut(YK_KC0[unit], YK_T0[offset]);
DataBusOut(YK_KC1[unit], YK_T1[offset]);
DataBusOut(YK_KC2[unit], YK_T2[offset]);
break;
case 0xcc:DataBusOut(YK_KC0[unit], YK_H0[offset]);
DataBusOut(YK_KC1[unit], YK_H1[offset]);
DataBusOut(YK_KC2[unit], YK_H2[offset]);
break;
}
enable();
return (TRUE);
}
void ExeYknum(unsigned int num,unsigned int type)
{
int unit,offset;
unsigned char addr,data;
if(num+1>pVar->yksum) return;
if((type!=0x33)&&(type!=0xcc)) return;
unit=num/6;
offset=num % 6;
addr=YK_KC0[unit];
switch(type)
{
case 0x33:data=YK_T0[offset];
break;
case 0xcc:data=YK_H0[offset];
break;
}
data=data | YK_BOARD_POWER_OR_1;
data=data & YK_BOARD_POWER_AND_1;
disable();
DataBusOut(addr, data);
enable();
}
void EscYknum(unsigned int num)
{
int unit,offset;
unsigned char addr,data;
if(num+1>pVar->yksum) return;
unit=num/6;
disable();
DataBusOut(YK_KC0[unit], YK_BOARD_NULL_1);
DataBusOut(YK_KC1[unit], YK_BOARD_NULL_2);
DataBusOut(YK_KC2[unit], YK_BOARD_NULL_3);
enable();
}
void freqsum(void)
{
long l,lx,ly;
int i,j,k,m;
//
// 2500*50.00HZ*ARCVL 2500*5*ARCVL 1562.5*5*ARCVL *2 15625*ARCVL
// 50HZ = -------------------=--------------=------------------=--------------
// freqdivsum*90.00 freqdivsum*9 freqdivsum*18 freqdivsum*18
//
// 2500*50.00HZ*ARCVL 3125*5*ARCVL
// 50HZ = -------------------=--------------
// freqdivsum*90.00 freqdivsum*18
//
ly=(long)ARCVL-4;
lx=(long)15625;
l=lx*ly;
lx=(long)pVar->freqdivsum;
if(lx==0) return;
l=l/lx;
l=l/18;
if(l>5550) return;
if(l<4500) return;
lx=(long) freqvalue;
ly=lx-l;
if(ly<0)ly=-ly;
if(ly>=20)
{
if(pVar->freqsplt<4)
{
pVar->freqsplt++;
return;
}
for(i=0;i<10;i++)
{
pVar->freqvalue[i]=l;
}
pVar->oldfreqvalue=l;
}else pVar->freqsplt=0;
if(pVar->freqcount>=10) pVar->freqcount=0;
pVar->freqvalue[pVar->freqcount]=l;
pVar->freqcount++;
l=0;
for(i=0;i<10;i++)
{
l=l+pVar->freqvalue[i];
}
l=l/10;
j=(int)l;
k=(int)pVar->oldfreqvalue;
m=j-k;
if(m<0) m=-m;
if(m<6)
{
k=k*3;
m=k+j;
m=(m)/4;
freqvalue=(unsigned int)m;
}else
{
freqvalue=(unsigned int)j;
}
pVar->oldfreqvalue=freqvalue;
l=15625000;
if(freqvalue<4500) freqvalue=4500;
if(freqvalue>5550) freqvalue=5550;
WORK=(unsigned int)(l/freqvalue);
pVar->freqdivsum=WORK;
Init_EPA0_Freq(WORK);
// outport(ADFREQ_COEF, WORK);
}
void freqdefault(void)
{
int i,j,k;
k=0;
for(i=0;i<8;i++)
{
j=ADCLIB[i].AVALUE;
if(j>=400)
{
k=0xff;
break;
}
}
if(k==0)
{
pVar->freqdivsum=3125;
Init_EPA0_Freq(3125);
// outport(ADFREQ_COEF, 6250);
}
}
void LCD_Device(void)
{
unsigned char ch;
int i;
if(LcdAready()<0x80)
{
if(pVar->LcdAChg!=0)
{
if(pVar->LcdAChg==2)
{
LcdAcmd(0xB8+pVar->LcdAy);//0 - 7 行
} else LcdAcmd(0x40); //0 ~ 63 列
pVar->LcdAChg--;
}else
{
LcdAdat(LcdBuf[pVar->LcdACount]);
pVar->LcdACount++;
pVar->LcdAx++;
if(pVar->LcdAx>=64)
{
pVar->LcdAx=0;
pVar->LcdAy++;
if(pVar->LcdAy>=8)
{
pVar->LcdAy=0;
pVar->LcdACount=0;
} else pVar->LcdACount=pVar->LcdACount+64;
pVar->LcdAChg=2;
}
// LastLcdBuf[pVar->LcdACount]=LcdBuf[pVar->LcdACount];
}
}
if(LcdBready()<0x80)
{
if(pVar->LcdBChg!=0)
{
if(pVar->LcdBChg==2) LcdBcmd(0xB8+pVar->LcdBy);
else LcdBcmd(0x40);
pVar->LcdBChg--;
}else
{
LcdBdat(LcdBuf[pVar->LcdBCount]);
pVar->LcdBCount++;
pVar->LcdBx++;
if(pVar->LcdBx>=64)
{
pVar->LcdBx=0;
pVar->LcdBy++;
if(pVar->LcdBy>=8)
{
pVar->LcdBy=0;
pVar->LcdBCount=64;
}else pVar->LcdBCount=pVar->LcdBCount+64;
pVar->LcdBChg=2;
}
// LastLcdBuf[pVar->LcdBCount]=LcdBuf[pVar->LcdBCount];
}
}
}
void LCD_Write(void)
{
if(pVar->LcdAChg!=0)
{
if(pVar->LcdAChg==2)
{
LcdAcmd(0xB8+pVar->LcdAy);
} else LcdAcmd(0x40);
pVar->LcdAChg--;
}else
{
LcdAdat(LcdBuf[pVar->LcdACount]);
pVar->LcdACount++;
pVar->LcdAx++;
if(pVar->LcdAx>=64)
{
pVar->LcdAx=0;
pVar->LcdAy++;
if(pVar->LcdAy>=8)
{
pVar->LcdAy=0;
pVar->LcdACount=0;
} else pVar->LcdACount=pVar->LcdACount+64;
pVar->LcdAChg=2;
}
}
if(pVar->LcdBChg!=0)
{
if(pVar->LcdBChg==2) LcdBcmd(0xB8+pVar->LcdBy);
else LcdBcmd(0x40);
pVar->LcdBChg--;
}else
{
LcdBdat(LcdBuf[pVar->LcdBCount]);
pVar->LcdBCount++;
pVar->LcdBx++;
if(pVar->LcdBx>=64)
{
pVar->LcdBx=0;
pVar->LcdBy++;
if(pVar->LcdBy>=8)
{
pVar->LcdBy=0;
pVar->LcdBCount=64;
}else pVar->LcdBCount=pVar->LcdBCount+64;
pVar->LcdBChg=2;
}
}
}
void flashwrite_all(unsigned int addr,unsigned int *pData)
{
register unsigned int portid;
register unsigned int value;
unsigned int adrbak;
unsigned int sum;
unsigned int ui;
int i;
flash_boot_reset();// reset flash, read array mode
portid=addr;
portid=portid-PSD_FLASH_BASE;
value=portid/8192;
portid=PSD_FLASH_BASE+value*8192;
adrbak=portid;
sum=0;
for(ui=0;ui<4095;ui++)
{
sum=sum+pData[ui];
}
pData[4095]=sum;
portid=addr;
flash_boot_erase_sector(portid);
portid=adrbak;
for(i=0;i<4096;i++)
{
rst_wdog();
flash_bo
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -