Programación en lenguaje ensamblador de diseño de generador de onda cuadrada
; bit de control (definición de transistor)
kzBW bit p2.6
KZSW BIT P2.5
KZGW BIT P2.4
; ******************************************* *
BAIW EQU 7FH; área de almacenamiento total
SHIW EQU 7EH; área de almacenamiento de decenas de dígitos
GEW EQU 7DH; >
BBBWT EQU 6Fh
BBSWT EQU 6EH
BBGWT EQU 6DH
TTY EQU 22H
;***** * ***********************************
ORG 000H
LJMP INICIO
ORG 001BH ; Inicio del programa
LJMP DOS
ORG 0030H
;******* ***** ****************************
Inicialización del programa
INICIO: mov r4, #0h
CLR p2.3
CLR BBBWT; ¿El tubo digital salta cuando se determina la melodía?
CLR BBSWT
CLR BBGWT ; ¿El tubo digital de tiempo compartido salta
MOV BAIW, #00h ; MOV SHIW, #00H
MOV GEW, #00H
MOV SP, #60H
MOV 7bh, #8
mov r0 , #00h
MOV TH1, 75h; Enviar valor de interrupción inicial
MOV TL1, 76h
SETB EA; SETB ET1
SETB TR1
;********************************* ***** *****
; Programa principal
PRINCIPAL: ; Llamar a la modularización de subrutinas
>
;********************************************* *** ****************
Programa de clave independiente
JJPP: LCALL XSO
JB P1 .7 , jzpd;
LCALL XSO
JB P1.7, jzpd
FOO: LCALL XSO;
JnB P1.7, FOO
MOV TH1, #3ch; enviar valor inicial de interrupción
MOV TL1, #0b0h
clr p2.2; Ingrese FM
INC R4
cjne r4, #4, jzpd
mov r4, #00h
MOV TH1 , 75h; enviar valor inicial de interrupción
MOV TL1, 76h
jzpd: cjne r4, #1, swj
SETB BBbwT
JB P1.6, bwjy;
LCALL XSO
JB P1.6, bwjy
ROO: LCALL XSO
JnB; P1.6, roo
bwj: mov a, baiw
inc a
cjne a, #0ah, loop
mov a , #00h
bucle: mov baiw, a
bwjy: JB P1.5, principal
LCALL XSO
JB P1; .5, principal
RO: LCALL XSO; relajarse
JnB P1.5, ro
baiwj: mov a, baiw
cjne a, #00h, fll
mov baiw, #9
ljmp swj
fll: dec baiw
swj: cjne r4 , #2, gwj
clr BBbwT
setb bbswt
JB P1.6, shiwjy;
LCALL XSO
JB P1.6, shiwjy
ROOn: LCALL , shiw
inc a
cjne a, #0ah, loop2
mov a, #00h
loop2: mov shiw, a
shiwjy: JB P1.5, lmain
LCALL XSO;
JB P1.5, lmain
Rll: LCALL XSO; relajarse
JnB P1.5,rll
shiwj:mov a , shiw
cjne a, #00h, flls
mov shiw , #9
ljmp gwj
flls: dec shiw p>
gwj: cjne r4, #3, hh
clr BBswT
p>setb bbgwt
JB P1.6, gewjy; p>
LCALL XSO
JB P1.6, gewjy
ROOl: LCALL XSO
JnB P1.6,rool
swjnl: mov a, gew
inc a
cjne a , #0ah, loop2l
mov a, #00h
loop2l: mov gew, a
gewjy: JB P1.5, lmain
LCALL XSO
JB P1.5, lmain
Rllll: LCALL > gewj: mov a, gew
cjne a, #00h, flllg
mov gew, #9
ljmp hh
flllg : dec gew
hh: LCALL XSO
clr bbgwt
lmain: cjne r4, #00h, jj
mov a, baiw
cjne a, #0, zzhh
mov a, shiw
cjne a, #0, zzhh
mov a, gew
cjne a, #0, zzhh
clr p2.0; después del encendido, es 0000 y no suena para identificar la interrupción
jj: ljmp principal p>
;******************************************
zzhh: setb p2.0; no suena 0000 después del encendido para identificación de interrupción
jb p2.2, jj
setb p2.2; El indicador FM está ajustado Solo va una vez
mov a, baiw
mov b, #100; 8*100 8*10 8*1=888 (guardado automáticamente como hexadecimal) p>
mul ab
mov 60h, a
mov 61h, b
mov a, shiw
mov b, #10
mul ab
mov 62h, a
mov 63h, b
mov a, gew
mov b, #1
mul ab
mov 64h, a
mov 65h, b
mov a, 60h p>
agregar a, 62h
mov 70h, a
mov a, 61h
agregarc a, 63h
mov 71h, a
clr c
mov a, 70h
add a, 64h
mov 51h, a
mov a, 71h
addc a, 65h
mov 52h, a
clr c
cjne a, #00h, ddh; 1~~10hz no se puede cronometrar
mov a, 51h
cjne a, #0ah, bbjj
mov th1, 3ch
mov tl1, #0b0h
ljmp main
bbjj: jc xdh
ljmp ddh
xdh: mov 75h, #9eh
mov 76h, #58H
cjne a, #1, qq
mov 74h, #20
mov r5, 74h
ljmp main
qq: cjne a, #2, rrr
mov 74h, #10
mov r5, 74h
ljmp principal
rrr: cjne a, #3, tt
mov 74h, #6
mov r5, 74h
ljmp main
tt: cjne a, #4, yy
mov 74h, #5
mov r5, 74h
ljmp main
yy: cjne a, #5, uu
mov 74h, #4
mov r5, 74h
ljmp main
uu: cjne a, #6, ii
mov 74h, #3
mov r5, 74h
ljmp main
ii: cjne a, #7, oo
ljmp main
oo: cjne a, #8, pp
mov 74h, #2
mov r5, 74h
ljmp main
pp: cjne a, #9, lm
mov 74h, #2
mov r5, 74h
lm: ljmp main
************************************************ ****
ddh: mov r5, #00h; xxx * 2
mov a, 51h
mov b, #2
mul ab
mov 41h, b
mov 40h, a
mov b, #2
mov a, 52h
mul ab
mov 43h, b
mov 42h, a
mov a, 41h
añadir a , 42h
mov 41h, a
mov a, 43h
addc a, #00h
mov 43h, a
************************************************ ** *******************
mov 54h, #40h 56h 55h 54h/43h 41h 40h==r7 r6
mov 55h, #42h
mov 56h, #0fh
mov r6, #00h
mov r7, #00h
www: mov a, 54h
subb a, 40h
mov 54h, a
mov a, 55h
subb a, 41h
p>mov 55h,a
mov a,56h
subb a,43h
mov 56h,a
jc jhq
mov a, r6 quotient
add a, #01
mov r6, a
mov a, r7; cociente
addc a, #00h
mov r7, a
jnb p1.7, llm
LCALL >
mov 54h, a; resto
mov a, 55h
addc a, 41h
mov 55h, resto
mov a, 56h
addc a, 43h
mov 56h, a; ** ***************************
mov 77h, #1h
mov 78h , # 00h
mov 79h, #00h
mov a, 79h
subb a, r7
mov 75h, a; - * **** bit alto
mov r1, a
mov a, 78h
subb a, r6
añadir a , #01h
mov 76h, a; 65536 - ***** mediana
mov r2, a
mov a, 77h
subb a, #00h
mov 77h, a; ***** abajo
mov r3, a
llm: ljmp main
p>;******************************************
;Mostrar subrutina
XSO: JNB BBbwT, SSBTT
JB TTY, SSBTT
MOV A, #0FFH
LJMP MMM
SSBTT: MOV A, baiw
MOV DPTR, #TAB
MOVC A, @A DPTR
MMM : MOV P0 , A
CLR KZbw
DJNZ R0, $
SETB KZbw
S
GT: JNB BBswT, SGBTT
JB TTY, SGBTT
MOV A, #0FFH
LJMP NNN
SGBTT: MOV A, shiw
MOV DPTR, #TABS
MOVC A, @A DPTR
NNN: MOV P0, A
CLR KZSw p> p>
DJNZ R0, $
SETB KZSw
FST: JNB BBgwT, FSBTT
JB TTY, FSBTT
MOV A, #0FFH
LJMP LLL
FSBTT: MOV A, gew
MOV DPTR, #TAB
MOVC A, @A DPTR
LLL: MOV P0, A
CLR KZgw
DJNZ R0, $
SETB KZgw
RET
;*************************************** *
p>; subrutina de interrupción de tiempo
DOS: PUSH ACC
PUSH PSW
jb p2.2, eee;
MOV TH1, #3ch
MOV TL1, #0b0h
djnz 7bh, dale 250ms para limitar la velocidad de salto
mov 7bh, #8
CPL TTY
clr p2.3
setb p2.1
SALIDA LJMP
eee: jnb p2.0, salir
mov TH1, 75h
mov TL1, 76h
djnz r5, salir
mov r5 , 74h
CPL P2.3
cpl p2.1
SALIDA: POP PSW
POP ACC
RETi
*************************************** *
TAB: DB 0c0h, 0f9h, 0a4h, 0b0h, 99h, 92h, 82h, 0f8h, 80h, 90h
TABS: DB 0c0h, 0f9h, 64H, 70H, 59H, 52H, 42H, 0F8H, 40H, 50H
FIN