You are on page 1of 14

SWITCH SELECTION

ORG 0000H

SELECTCIRCUIT:

CLR A

CALL DELAY

MOV A, P2

RCIRCUIT:

CJNE A, #11111110B, RLCIRCUIT

JMP $

RLCIRCUIT:

CJNE A, #11111101B, RCCIRCUIT

JMP $

RCCIRCUIT:

CJNE A, #11111011B, DCIRCUIT

JMP $

DCIRCUIT:

CJNE A, #11110111B, SELECTCIRCUIT

JMP $

DELAY:

MOV R0, #01H

DJNZ R0, $

RET

END

INTERFACING ADC

ORG 0

JMP main

ORG 3
JMP ext0ISR

ORG 0BH

JMP timer0ISR

ORG 30H

main:

SETB IT0

SETB EX0

CLR P0.7

MOV TMOD, #2

MOV TH0, #-50

MOV TL0, #-50

SETB TR0

SETB ET0

SETB EA

JMP $

timer0ISR:

CLR P3.6

SETB P3.6

RETI

ext0ISR:
CLR P3.7

MOV R0, P2

SETB P3.7

RETI

DIODE

MOV R0, #35

MOV A, R0

Diode:

MOV 40H, A

MOV R1, #40H

SUBB A, #34

JC diodeLessThan

diodeGreaterThan:

MOV A, #64

diodeLoopB:

MOV @R1, #34

DEC A

INC R1

JNZ diodeLoopB

CALL DONE

diodeLessThan:

MOV A, #125

diodeLoopA:

MOV @R1, 40H

DEC A

INC R1

JNZ diodeLoopA

CALL DONE
DONE:

JMP $

MORE VOLTAGE A

MOREVOLTAGEA:

CLR C

MOV A, R0

MOV R1, #40H

MOV @R1, A

INC R1

SUBB A, #24

MOV @R1, A

INC R1

SUBB A, #22

MOV @R1, A

INC R1

SUBB A, #20

MOV @R1, A

INC R1

SUBB A, #18

MOV @R1, A

INC R1

SUBB A, #16

MOV @R1, A

INC R1

SUBB A, #15

MOV @R1, A

INC R1

SUBB A, #13
MOV @R1, A

INC R1

SUBB A, #12

MOV @R1, A

INC R1

SUBB A, #11

MOV @R1, A

INC R1

SUBB A, #10

MOV @R1, A

INC R1

SUBB A, #9

MOV @R1, A

INC R1

MOV R2, #2

VOLTAGEA_LOOPA:

SUBB A, #8

MOV @R1, A

INC R1

DJNZ R2, VOLTAGEA_LOOPA

MOV R2, #3

VOLTAGEA_LOOPB:

SUBB A, #6

MOV @R1, A

INC R1

DJNZ R2, VOLTAGEA_LOOPB

SUBB A, #5

MOV @R1, A

INC R1
MOV R2, #3

VOLTAGEA_LOOPC:

SUBB A, #4

MOV @R1, A

INC R1

DJNZ R2, VOLTAGEA_LOOPC

MOV R2, #3

VOLTAGEA_LOOPD:

SUBB A, #3

MOV @R1, A

INC R1

DJNZ R2, VOLTAGEA_LOOPD

MOV R2, #7

VOLTAGEA_LOOPE:

SUBB A, #2

MOV @R1, A

INC R1

DJNZ R2, VOLTAGEA_LOOPE

VOLTAGEA_LOOPF:

SUBB A, #1

MOV @R1, A

INC R1

JNZ VOLTAGEA_LOOPF

RL AND RC CIRCUIT

RLCIRCUIT:

CALL VOLTAGERANGE ;selects the suitable voltange range for simluating Vin
;already includes storing 64 plot points of Vin*e^-t at memory positions 30H to 7FH

CALL SHOWIN_SCOPE ;no need for recomputation, Vl = Vin*e^-t


;plots the 64 points in the show scope

RET

RCCIRCUIT:

CALL VOLTAGERANGE ;similar to VOLTAGERANGE explained in RLCIRCUIT

MOV R1, #40H ; start address of 64 plot points in #40H

RCLOOP: ; needs to recompute, Vc = Vin - Vin*e^-t

MOV A, @R1

SUBB A, R0 ; subtraction only allowed in Accumulator

MOV @R1, A

INC R1

CJNE R1, #7FH, RCLOOP ; process repeats until all 64 points are converted.

CALL SHOWIN_SCOPE

RET

RESISTOR

MOV A, R0

Resistor:

MOV 40H, A

MOV R1, #40H

MOV A, #64

LoopResistor:

MOV @R1, 40H

DEC A

INC R1

JNZ LoopResistor

CALL DONE

DONE:

JMP $
VOLTAGE RANGE

VOLTAGERANGE:

MOV R0,#100 ;Assign Value of Vin

VOLTAGEA:

CJNE R0, #246, NOT_EQUALA

JMP MOREVOLTAGEA

NOT_EQUALA:

JC VOLTAGEB

MOREVOLTAGEA:

JMP $ ;Vin = 4.80- 5.00

VOLTAGEB:

CJNE R0, #236, NOT_EQUALB

JMP MOREVOLTAGEB

NOT_EQUALB:

JC VOLTAGEC

MOREVOLTAGEB:

JMP $ ;Vin = 4.60- 4.79

VOLTAGEC:

CJNE R0, #226, NOT_EQUALC

JMP MOREVOLTAGEC

NOT_EQUALC:

JC VOLTAGED

MOREVOLTAGEC:

JMP $ ;Vin = 4.40- 4.59

VOLTAGED:

CJNE R0, #215, NOT_EQUALD

JMP MOREVOLTAGED

NOT_EQUALD:

JC VOLTAGEE
MOREVOLTAGED:

JMP $ ;Vin = 4.20- 4.39

VOLTAGEE:

CJNE R0, #205, NOT_EQUALE

JMP MOREVOLTAGEE

NOT_EQUALE:

JC VOLTAGEF

MOREVOLTAGEE:

JMP $ ;Vin = 4.00- 4.19

VOLTAGEF:

CJNE R0, #195, NOT_EQUALF

JMP MOREVOLTAGEF

NOT_EQUALF:

JC VOLTAGEG

MOREVOLTAGEF:

JMP $ ;Vin = 3.80- 3.99

VOLTAGEG:

CJNE R0, #185, NOT_EQUALG

JMP MOREVOLTAGEG

NOT_EQUALG:

JC VOLTAGEH

MOREVOLTAGEG:

JMP $ ;Vin = 3.60- 3.79

VOLTAGEH:

CJNE R0, #174, NOT_EQUALH

JMP MOREVOLTAGEH

NOT_EQUALH:

JC VOLTAGEI

MOREVOLTAGEH:
JMP $ ;Vin = 3.40- 3.59

VOLTAGEI:

CJNE R0, #164, NOT_EQUALI

JMP MOREVOLTAGEI

NOT_EQUALI:

JC VOLTAGEJ

MOREVOLTAGEI:

JMP $ ;Vin = 3.20- 3.39

VOLTAGEJ:

CJNE R0, #154, NOT_EQUALJ

JMP MOREVOLTAGEJ

NOT_EQUALJ:

JC VOLTAGEK

MOREVOLTAGEJ:

JMP $ ;Vin = 3.00- 3.19

VOLTAGEK:

CJNE R0, #144, NOT_EQUALK

JMP MOREVOLTAGEK

NOT_EQUALK:

JC VOLTAGEL

MOREVOLTAGEK:

JMP $ ;Vin = 2.80- 2.99

VOLTAGEL:

CJNE R0, #134, NOT_EQUALL

JMP MOREVOLTAGEL

NOT_EQUALL:

JC VOLTAGEM

MOREVOLTAGEL:

JMP $ ;Vin = 2.60- 2.79


VOLTAGEM:

CJNE R0, #123, NOT_EQUALM

JMP MOREVOLTAGEM

NOT_EQUALM:

JC VOLTAGEN

MOREVOLTAGEM:

JMP $ ;Vin = 2.40- 2.59

VOLTAGEN:

CJNE R0, #113, NOT_EQUALN

JMP MOREVOLTAGEN

NOT_EQUALN:

JC VOLTAGEO

MOREVOLTAGEN:

JMP $ ;Vin = 2.20- 2.39

VOLTAGEO:

CJNE R0, #103, NOT_EQUALO

JMP MOREVOLTAGEO

NOT_EQUALO:

JC VOLTAGEP

MOREVOLTAGEO:

JMP $ ;Vin = 2.00- 2.19

VOLTAGEP:

CJNE R0, #92, NOT_EQUALP

JMP MOREVOLTAGEP

NOT_EQUALP:

JC VOLTAGEQ

MOREVOLTAGEP:

JMP $ ;Vin = 1.80- 1.99

VOLTAGEQ:
CJNE R0, #82, NOT_EQUALQ

JMP MOREVOLTAGEQ

NOT_EQUALQ:

JC VOLTAGER

MOREVOLTAGEQ:

JMP $ ;Vin = 1.60- 1.79

VOLTAGER:

CJNE R0, #72, NOT_EQUALR

JMP MOREVOLTAGER

NOT_EQUALR:

JC VOLTAGES

MOREVOLTAGER:

JMP $ ;Vin = 1.40- 1.59

VOLTAGES:

CJNE R0, #62, NOT_EQUALS

JMP MOREVOLTAGES

NOT_EQUALS:

JC VOLTAGET

MOREVOLTAGES:

JMP $ ;Vin = 1.20- 1.39

VOLTAGET:

CJNE R0, #51, NOT_EQUALT

JMP MOREVOLTAGET

NOT_EQUALT:

JC VOLTAGEU

MOREVOLTAGET:

JMP $ ;Vin = 1.00- 1.19

VOLTAGEU:

CJNE R0, #41, NOT_EQUALU


JMP MOREVOLTAGEU

NOT_EQUALU:

JC VOLTAGEV

MOREVOLTAGEU:

JMP $ ;Vin = 0.80- 0.99

VOLTAGEV:

CJNE R0, #31, NOT_EQUALV

JMP MOREVOLTAGEV

NOT_EQUALV:

JC VOLTAGEW

MOREVOLTAGEV:

JMP $ ;Vin = 0.60- 0.79

VOLTAGEW:

CJNE R0, #21, NOT_EQUALW

JMP MOREVOLTAGEW

NOT_EQUALW:

JC VOLTAGEX

MOREVOLTAGEW:

JMP $ ;Vin = 0.40- 0.59

VOLTAGEX:

CJNE R0, #10, NOT_EQUALX

JMP MOREVOLTAGEX

NOT_EQUALX:

JC VOLTAGEY

MOREVOLTAGEX:

JMP $ ;Vin = 0.20- 0.39

VOLTAGEY:

CJNE R0, #0, NOT_EQUALY

JMP MOREVOLTAGEY
NOT_EQUALY:

JC VOLTAGEZ

MOREVOLTAGEY:

JMP $ ;Vin = 0.00- 0.19

VOLTAGEZ: ;Vin = 0.00

JMP $

END

You might also like