$MOD652

ORG 23h

MOV A,S0BUF
MOV R4,A
;CLR P3.7
CLR RI
RETI

org 100h

RPMDES EQU R0
TON EQU R3
TOFF EQU R2 
RPMACT EQU R7


INIT:


SETB ES0 ; enable serial interrupt
MOV S0CON,#50H ; SET TO SERIAL MODE1
MOV TMOD,#20H ; SET TIMER 1 TO MODE 2 (8 BIT AUTO RELAOD)
MOV TH1,#253 ;SET BAUD TO 9600
SETB TR1
SETB EA

RPMINPUT:

MOV RPMDES, #00Bh;

MOV A,#0FFh
MOV TOFF,A ; SET OFF TIME TO 100%

MOV A,#000h
MOV TON,A ; SET ON TIME TO 0% 

RAMP:

CALL RAMPUP

RPMREAD:
 
ADJUSTPWM:
CALL PWMOUT

JMP RPMREAD

RAMPUP:
INC TON
DEC TOFF
MOV A,TON
SUBB A,#150 ; ramp up to half speed - min 50, max 200
JNZ RAMPUP
CLR C
RET

PWMOUT:
SETB P3.7
CALL DELAYON
CLR P3.7
CALL DELAYOFF
RET

DELAYON:
;MOV TON,R4
MOV R5,#000h
DELAYONA:
INC R5
MOV A,TON
SUBB A,R5
JNZ DELAYONA
CLR C
RET

DELAYOFF:

DELAYOFFA:
INC R5
MOV A,R5
CJNE A,#0FFh,CONT
CONT:
RET

end