$8D RPM/25 calc
#1
Supreme Member
Thread Starter
$8D RPM/25 calc
I was working on using a different scaled rpm value and Rbob set me straight on how to do it. Thanks Rbob.
So here is how the stock code works. Well AUJP anyway.
The short version:
Long version
So here is how the stock code works. Well AUJP anyway.
The short version:
Code:
LDD L00B3 ; get DRP period from FDB L00B3 ASLD ;mult by 2 PSHB PSHA ;move D to the stack Pulx ;put val on stack in x or move D to x LDD #307 ; put 307d in D which is scale to 25 rpm per bit Fdiv ; divide 307 by (DRP * 2) with result in X PSHX ; put RPM/25 on stack Pula Pulb ; move x to d ;limit to 6375 STAA L0058 ; and store at L0058
Code:
Determine # of cylinders first LDAA $8009 ; 00 = 8 CYL- go get constant BNE LB7C8 ; BR if Cyl NE 8,do not br if 8cyl ; .... else LDD L00B3 ; get CURRENT MNR LOOP DRP PERIOD (inv rpm) BRA LB7CB ; Save cnts at L0467 LB7C8: JSR LE33F ; Not 8cyl, then scale to 8 cyl ref by ; (8 x 16 MULT) LB7CB: STD L0467 ; ECM IM RAM, NUM OF 65.5Khz cnts ; between DRPs Then calc rpm ;------------------------------------- ; RPM, RPM P, RPM/25 & RPM/12.5 ; ; Q = (153.6/RPM RER) * 2 ^8 ; ; PER = 1/65.5 Khz per bit ;-------------------------------------- PSHB ;Put DRP per. on stack PSHA ;or move val in D to X ASLD ;multiply D by 2, SET DIVIDE OPER PSHB ;put rpm/2 (D)on stack PSHA ; PULX ;Value from ASLD LDD #0307 ;val= 15 * (512/25) or 153.6 * 2 FDIV ;calc RPM/25 w/256th's in LSB by ;division with remainder in LSB ;result is X=D/X ;SNIP- bunch of code for hi & lo range Qals and limited rpm stored at L0057 ; not relavent to topic PSHX ;Put value from fdiv in x reg on the stack PULA ;Pull RPM/25 off of stack or PULB ;put X in D (which is actually A&B) PSHB ;put back on stack for later use PSHA ;in RPM/12.5 calc ADDD #128 ;Round off by adding 128 to LSB (B reg) BCC LB7FD ;BR if no overflow (LT 6375 rpm (255 x 25)) ;... else LDAA #255 ;limit to 255 or 6375 rpm LB7FD: STAA L0058 ;put rpm/25 in ram ;----------------------- ; MAKE UN-FILT RPM/12.5 ;----------------------- PULA ; non rounded rpm/25 val from above PULB ASLD ; MULT * 2 for scale to Rpm/12.5 BCS LB809 ; IF OVERFLOW LIMIT TO 255, (3187 RPM) ; .... else ADDD #128 ; ROUND by adding 128 to LSB (accB) BCC LB80B ; BR IF NO OVERFLOW ( Br if accA < FF) ; ... else LB809: LDAA #255 ; 3187 RPM (limit accA to FF) LB80B: STAA L0059 ; SAVE UNFILT 12.5 RPM Var in ram
Thread
Thread Starter
Forum
Replies
Last Post