Red de conocimiento informático - Aprendizaje de código fuente - Programación en lenguaje ensamblador de diseño de generador de onda cuadrada

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

gwj: cjne r4, #3, hh

clr BBswT

p>

setb bbgwt

JB P1.6, gewjy;

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

;******************************************

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)

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

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>

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