org 0000H ; začátek programu po resetu
jmp init
org 000BH ; přerušení od čítače/časovače0
jmp T0int
org 0023H ; přerušení od sériové linky
jmp Sint
org 30H
C0L EQU 30h
C0H EQU 31h
REZIM EQU 32h
CAS EQU 33h
roste BIT 0
init:
; inicializace čítače/časovače T0
;mov tmod,#00000001B ;časovač0-mód1
;mov th0,#high 15535 ;perioda přetečení čas0 = 50ms
;mov tl0,#low 15535
mov C0H,#high 15535 ;perioda přetečení čas0 = 50ms
mov C0L,#low 15535
setb ea ;globální povolení všech přerušení
setb et0 ;povolení přerušení od č/č0
setb tr0 ;spuštění č/č0
setb pt0 ;zapne vyšší prioritu přerušení pro T0
mov r0,#10 ;počítadlo pro získání intervalu 500ms
; inicializace sériového kanálu
mov scon,#01010000B ;nastavení ser.linky+časovače1
setb tr1 ;spuštění časovače1
mov tmod,#00100001B ;časovač1-mód2 časovač0-mód1
mov th1,#0FDH ;perioda pro 9600 (11,0592MHz)
setb REN ;povolení příjmu
setb es ;povolení přerušení od sériového kanálu
clr RI
clr TI
MOV P1,#0
mov REZIM,#02h
setb roste
main:
;mov SBUF,#0x4a ;'J'
jmp main
;*****************************************************************
pp:
DJNZ C0L,dal01
DEC C0H
MOV C0L,#0FFH
dal01:
;mov SBUF,C0h
ret
mm:
CLR C
MOV A,C0L
ADDC A,#01h
JNC dal02
INC C0H
MOV C0L,#0
dal02:
MOV C0L,A
;mov SBUF,C0h
ret
;*****************************************************************
; přerušení
;*****************************************************************
Sint:
jb TI,konecI
push acc
push b
push psw
mov R1,SBUF
;mov SBUF,R1
; budeme testovat data T - trojúhelník, P - pila, S - sinus, + nebo -
cjne R1,#54H,dal1 ;T
MOV REZIM,#3
dal1: cjne R1,#50H,dal2 ;P
MOV REZIM,#0
dal2: cjne R1,#53H,dal3 ;S
MOV REZIM,#2
dal3: cjne R1,#04FH,dal4 ;O
MOV REZIM,#1
MOV P1,#0
dal4: cjne R1,#2BH,dal5 ;+
;MOV C0H,#0EEH
call pp
dal5: cjne R1,#2DH,neplatny ;-
call mm
;MOV C0H,#01H
neplatny:
pop psw
pop b
pop acc
konecI:
clr RI
clr TI
reti
;*****************************************************************
T0int:
mov th0,C0H ; obnovení hodnot časovače
mov tl0,C0L
push acc
push b
push psw
mov R1,REZIM
cjne R1,#0H,dal_1 ;pila
;-----------------------------------------------------------
;tady bude pila
inc P1
dal_1: cjne R1,#01H,dal_2
;-----------------------------------------------------------
;tady bude obdelnik
XRL P1,#0xFF
dal_2: cjne R1,#02H,dal_3
;-----------------------------------------------------------
;tady bude sinus
MOV A,CAS
CLR C
SUBB A,#32
JC hopla01
MOV CAS,#0
hopla01:
MOV DPTR,#sinus
MOV A,CAS
MOVC A,@A+DPTR
MOV P1,A
INC CAS
dal_3: cjne R1,#03H,konec01
;-----------------------------------------------------------
;tady bude trojúhelník
MOV A,P1
jnb roste,neroste ; if (roste=0) skoč
CLR C
ADDC A,#01h
JNC dal_01
clr roste
jmp konec01
dal_01:
inc P1
jmp konec01
neroste:
mov R0,A
DJNZ R0,sem01
dal_02: ; když je A nula
setb roste
sem01:
DEC P1
konec01:
pop psw
pop b
pop acc
reti
sinus: DB 80H, 99H, 0B1H, 0C7H, 0DAH, 0EAH, 0F5H, 0FDH, 0FFH, 0FDH, 0F5H, 0EAH, 0DAH, 0C7H, 0B1H, 99H, 80H, 67H, 4FH, 39H, 26H, 16H, 0BH, 3H, 1H, 3H, 0BH, 16H, 26H, 39H, 4FH, 67H
;*****************************************************************
END
Žádné komentáře:
Okomentovat