算法

dl  0  1     60 


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黄人软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值