Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- T0_G EQU 0 ;GATE
- T0_C EQU 0 ;COUNTER/-TIMER
- T0_M EQU 0 ;MODE (0..3)
- TIM0 EQU T0_M+T0_C*4+T0_G*8
- T1_G EQU 0 ;GATE
- T1_C EQU 0 ;COUNTER/-TIMER
- T1_M EQU 2 ;MODE (0..3)
- TIM1 EQU T1_M+T1_C*4+T1_G*8
- TMOD_SET EQU TIM0+TIM1*16
- TR_M EQU 1 ;tryb transmisji (1..3)
- TR_R EQU 1 ;zezwolenie na odbi�r
- SCON_SET EQU TR_M*64+TR_R*16
- ;SMOD=1
- ;ustaw 96 cykli na bit (57600/9600bod�w=6)
- TH1_SET EQU 256-6
- TL1_SET EQU 256-6
- number1 DATA 60h
- number2 DATA 61h
- nCounter DATA 62h
- currentNumber DATA 63h
- temp DATA 64h
- multi DATA 65h
- init:
- ljmp start
- org 100H
- clear:
- mov number1,#0h
- mov number2,#0h
- mov nCounter,#0h
- mov currentNumber,#0h
- mov temp,#0h
- mov multi,#1h
- ret
- start:
- lcall clear
- mov SCON,#SCON_SET ;port szeregowy
- orl PCON,#80H ;SMOD=1
- mov TMOD,#TMOD_SET ;Timer 1 dla transmisji
- mov TH1,#TH1_SET
- mov TL1,#TL1_SET
- setb TR1 ;start Timera 1
- setb TI
- loopAgain:
- loop:
- jnb RI,loopAgain
- clr RI
- mov A,SBUF
- jnb TI,$
- clr TI
- mov SBUF,A
- ljmp onChar
- addNumber:
- cjne A,#0DH,addNumber1
- ljmp loopAgain
- addNumber1:
- subb A,#30H
- mov R1,A
- push 1
- inc nCounter
- ljmp loop
- onSpace:
- cjne A,#20H,addNumber
- inc currentNumber
- mov multi,#1
- onSpace2:
- pop 1
- mov A,R1
- mov B,multi
- mul AB
- add A,temp
- mov temp,A
- mov A,multi
- mov B,#10
- mul AB
- mov multi,A
- dec nCounter
- mov A,nCounter
- cjne A,#0,onSpace2
- mov A,currentNumber
- cjne A,#1,setOtherNumber
- mov number1,temp
- mov temp,#0
- ljmp loop
- setOtherNumber:
- mov number2,temp
- mov temp,#0
- ljmp loop
- onChar:
- cjne A,#2BH,onMinus
- onPlus:
- mov A,number1
- mov B,number2
- add A,B
- ljmp send
- onMinus:
- cjne A,#2DH,onMultiply
- mov A,number1
- mov B,number2
- subb A,B
- ljmp send
- onMultiply:
- cjne A,#2AH,onDivide
- mov A,number1
- mov B,number2
- mul AB
- ljmp send
- onDivide:
- cjne A,#2FH,onNewLine
- mov A,number1
- mov B,number2
- div AB
- ljmp send
- onNewLine:
- cjne A,#0AH,onSpace
- ljmp loop
- send:
- mov DPTR,#numbers
- mov R4,A
- mov A,#20H
- jnb TI,$
- clr TI
- mov SBUF,A
- mov A,#3DH
- jnb TI,$
- clr TI
- mov SBUF,A
- mov A,#20H
- jnb TI,$
- clr TI
- mov SBUF,A
- mov A,R4
- mov B,#100
- div AB
- jnb TI,$
- clr TI
- movc A,@A+DPTR
- mov SBUF,A
- mov A,B
- mov B,#10
- div AB
- jnb TI,$
- clr TI
- movc A,@A+DPTR
- mov SBUF,A
- mov A,B
- jnb TI,$
- clr TI
- movc A,@A+DPTR
- mov SBUF,A
- mov A,#0AH
- jnb TI,$
- clr TI
- mov SBUF,A
- lcall clear
- ljmp loop
- ;0AH - nowa linia
- ;2BH - +
- ;2DH - -
- ;2AH - *
- ;2FH - /
- ;20H - spacja
- ;0DH - do wywalenia
- ;3D - =
- numbers:
- DB '0'
- DB '1'
- DB '2'
- DB '3'
- DB '4'
- DB '5'
- DB '6'
- DB '7'
- DB '8'
- DB '9'
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement