📄 ycn1mn.plm
字号:
/*32 points FFT Algorithm, with BDBH, can sample without synchronous signal*/
/*resample after calculation*/
/*------------------------SSC-2 RTU YC card program----------------------*/
/* Filename : YCN1MN.PLM */
/* Programed by : Huang Jun */
/* Modified by : Steelen */
/* Version : NEW VERSION 3.04 */
/* Date : from 05/10/98 to dd/mm/yy */
/* Print on : */
/*-----------------------------------------------------------------------*/
YCN1MN: DO;
$INCLUDE (C196.PLM)
$INCLUDE (YCN1MN.DEF)
$INCLUDE (YCN1INT.PLM)
START: /*system initialization*/
DISABLE;
IOC1=0111$0000B; /*Select TXD*/
IOPORT1=0FH; /*Clear 74LS74*/
CALL RS485R_CTL;
CALL TIME(1000); /*Delay 100ms*/
WSR=0;
IOC0=0000$0101B; /*80C196KB initialization*/
HSI_MODE=0000$1010B; /*HSI mode set*/
IOC1=0111$0000B; /*Select TXD,HSO.4,HSO.5 ENABLE*/
BAUD_RATE=38H; /*12MHZ 2400bits/s*/
BAUD_RATE=81H;
SP_CON=0AH; /*Serial command mode 2,0AH*/
INT_PENDING=0;
INT_PEND1=0;
INT_MASK=1110$0110B; /*Open EXT,SIO,STM,HSI,AD*/
INT_MASK1=0;
HSO_COMMAND=38H; /*10ms SFT INT*/
HSO_TIME=TIMER1+7490;
TC8253_COM=36H; /*8253 initializing command*/
TC8253_COM=76H;
TC8253_COM=0B0H;
TC8253_A=0FFH; /*Set counter initial value*/
TC8253_A=0FFH;
TC8253_B=80H; /*20/32*1.8432*1000=1152=0480H,*/
TC8253_B=04H; /*32 points per cycle*/
TC8253_C=0FFH;
TC8253_C=0FFH;
/*variables initialization*/
ACLINES=12; /*the default AC lines is 12*/
DCLINES=1; /*the default DC lines is 1*/
DO M0=0 TO 15;
UUXS(M0)=UUXSZH; /*1000/(100/(2.94/10*4096))=12042*/
IIXS(M0)=IIXSZH; /*10/(5/(2.94/10/4096))=2408*/
PXS(M0)=PXSZH; /*UUXS*IIXS/1000=29003*/
QXS(M0)=QXSZH; /* PXS*1.732=50432*/
END;
TRLEN(0)=2; /*YCML*/
TRLEN(1)=2; /*FML*/
TRLEN(2)=8; /*WML*/
TRLEN(3)=4; /*the number of DC lines, (=4)*/
/*determine what items(COS,Uab,Ia,Ucb,Ic,P,Q) to be sent*/
DO M0=0 TO 11;
YCML(M0)=0FFH;
END;
FML(0)=0FFH; /*determine which line's frequency to be sent*/
FML(1)=0FFH;
DO M0=0 TO 7;
WML(M0)=0FFH;/*determine which line's WPQ to be sent*/
END;
TRXH=0; /*the No. of transmission*/
WAY=0; /*the line number*/
TRBZ=0; /*the flag of transmission*/
TRPT=0; /*the count of transmission*/
RECONT=0; /*the count of receive*/
IOS1_IMAGE=0;
OVTM_COUNT=0; /*TC8253_A Timer Overflow Count*/
CNVT$END=0;
IF DATA$VALID<>0AA55H THEN
DO;
RST$CNT=0;
DATA$VALID=0AA55H;
DO M0=0 TO 3;
EAST(0).BCD(M0)=0;
EAST(1).BCD(M0)=0;
END;
DO M0=0 TO 255;
DO M1=0 TO 3;
WEST(M0).BCD(M1)=0;
END;
END;
DO M0=0 TO 255;
DO M1=0 TO 3;
BUF1(M0).BIN(M1)=0;
END;
END;
DO M0=0 TO N2-1;
Wp(M0)=0;
Wq(M0)=0;
WpF(M0)=0;
WqF(M0)=0;
WpDIV(M0)=0;
WqDIV(M0)=0;
WpFDIV(M0)=0;
WqFDIV(M0)=0;
END;
END;
RST$CNT=RST$CNT+1;
IF RST$CNT>200 THEN
DO;CALL RST_DOG;
RST$CNT=0;
DEAD$LOOP:GOTO DEAD$LOOP;
END;
FNUM=36864; /*50 Hz*/
T1END=36864;
ITEM=0FFH; /*1:Uab;2:Ia;3:Ucb;4:Ic;0ffh:no item selected*/
SAMP$NO=0;
P1_IMAGE=0FH; /*choose line 0,item 0, clear 74LS74, sampling*/
IOPORT1=P1_IMAGE;
ENABLE;
AGAIN: CALL RST_DOG;
/*get the address of the board and running mode*/
BHAD=(IOPORT0 AND 0FH)+1;
IF (IOPORT0 AND 80H)<>0 THEN YC_TEST_FLAG=1;
ELSE YC_TEST_FLAG=0;
IF (IOPORT0 AND 40H)<>0 THEN CHECK_FLAG=1;
ELSE CHECK_FLAG=0;
SAMP$EN=0FFH; /*enable sample*/
CALL START$RUN; /*ignite LED 'start'*/
/*wait for FCK signal*/
IF CHECK_FLAG=1 THEN P1_IMAGE=0DFH;/*item 5*/
ELSE P1_IMAGE=(NOT WAY) AND 8FH;/*line WAY,item 0*/
IOPORT1=P1_IMAGE;
WAIT:
CALL RST_DOG;
IF SAMP$END THEN GOTO BUSY;
GOTO WAIT;
BUSY: SAMP$END=0;
CALL START$RUN; /*quench the LED 'START'*/
LASTWAY=WAY; /*store the last WAY*/
CALL FREQUENCY;
/*set next line,sampling*/
WAY=WAY+1;
IF WAY>=(ACLINES+DCLINES) THEN DO;WAY=0;
CNVT$END=0FFFFH;
END;
IF CHECK_FLAG=1 THEN P1_IMAGE=5FH;
ELSE P1_IMAGE=(NOT WAY) AND 0FH;
IOPORT1=P1_IMAGE;
/*calculate*/
POS=SHL(LASTWAY,4);
IF CHECK_FLAG=1 THEN
CALL CHECK_SUB;
ELSE IF LASTWAY>=ACLINES THEN DO; CALL DC$CAL;
CALL RST_DOG;
CALL WPQ;
END;
ELSE DO; CALL RST_DOG;
CALL UIPQ;
CALL RST_DOG;
CALL BDBH;
END;
GOTO AGAIN;
END YCN1MN;
EOF;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -