sq 不变
实sq =设sqsj+设sqsj*2 * (dl==60); sqsj实=sqsj设
实sq=(dl=>60)?设sqsj:( (dl==0) ? 设sqsj*3 :设sqsj*dl*X);
dl= 0 1 2 …… 59 60
【实sqsj】=【设sqsj】*3 中间【实sqsj】与【设sqsj】成线性 【设sqsj】
3-dl/30
【设sqsj】*X X=(60-dl)*2/60+1;
3到1之间分成59份 (60-dl)*(2/59)
123--60
1 3
dl* 3/60
2-dl/30+1;
3-dl/30
实sq= (dl=>60) ? 设sqsj : ( 设sqsj*(3-dl/30) );
化简
sj=s*(90-dl)/30;
程序
//实sq= (dl=>60) ?
设sqsj : ( 设sqsj*(3-dl/30)
);
unsigned char s=10,sj,dl=0;
void main()
{
//sj=s*(3-dl/30);
sj=s*(90-dl)/30;
sj=10;
while(1);
}
汇编
; .\pca_test.SRC generated from: pca_test.c
; COMPILER INVOKED BY:
; C:\Keil\C51\BIN\C51.EXE pca_test.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND SRC(.\pca_test.SRC)
NAME PCA_TEST
?PR?main?PCA_TEST SEGMENT CODE INBLOCK
?C_INITSEG SEGMENT CODE
?DT?PCA_TEST SEGMENT DATA
EXTRN CODE (?C_STARTUP)
EXTRN CODE (?C?IMUL)
EXTRN CODE (?C?UIDIV)
PUBLIC
s
PUBLIC
sj
PUBLIC
dl
PUBLIC
main
RSEG ?DT?PCA_TEST
dl: DS 1
sj: DS 1
s: DS 1
RSEG ?C_INITSEG
DB 001H
DB s
DB 00AH
DB 001H
DB dl
DB 000H
; //实sq= (dl=>60) ?
设sqsj : ( 设sqsj*(3-dl/30)
);
; unsigned char s=10,sj,dl=0;
; void main()
RSEG ?PR?main?PCA_TEST
main:
USING 0
; SOURCE LINE # 3
; {
; SOURCE LINE # 4
;
; //sj=s*(3-dl/30);
; sj=s*(90-dl)/30;
; SOURCE LINE # 7
CLR C
MOV A,#05AH
SUBB A,dl
MOV R7,A
CLR A
SUBB A,#00H
MOV R6,A
MOV R5,s
MOV R4,#00H
ACALL ?C?IMUL
MOV R5,#01EH
ACALL ?C?UIDIV
MOV sj,R7
;
; sj=10;
; SOURCE LINE # 9
MOV sj,#0AH
?C0001:
; while(1);
; SOURCE LINE # 10
SJMP ?C0001
; END OF main
END