Red de conocimiento informático - Material del sitio web - Diseño de voltímetro digital basado en microcontrolador (no complete el plagio)

Diseño de voltímetro digital basado en microcontrolador (no complete el plagio)

Les mostraré el voltímetro digital que hice antes, ensamblado

COM EQU 50H; registro de comando

DAT EQU 51H; p>RS EQU P2.1; señal de selección de registro LCD

RW EQU P2.2; señal de selección de lectura/escritura de LCD

E EQU P2.3 señal de habilitación de LCD; p>

ORG 0000H

LJMP MAIN; Dirección de entrada del programa principal

ORG 000BH

Entrada de interrupción LJMP T0

ORG 0030H; Programa principal, inicialización

PRINCIPAL:

MOV SP, #60H

LCALL INT

MOV 30H, #30H; Dígitos enteros de voltaje

MOV 31H, #02EH; Dígitos de punto decimal

MOV 32H, #30H; Dígitos decimales

MOV 33H, #30H;

MOV 34H, #30H; Dígitos de centenas decimales

MOV 35H, #56H; Carácter "V"

MOV R7, # 30H

LCALL STR0; Mostrar cadena 0

LCALL DELAY

LCALL STR1; Mostrar cadena 1

LCALL DELAY

LCALL N2; Voltaje=0.000V

;************Programa de inicialización del temporizador******************

MOV TMOD, #00H; Establece el temporizador T0 en modo 0

MOV TH0, #00H Constante de sincronización de carga para 100us

MOV TL0, #00H

SETB; TR0; Iniciar T0

MOV 24H, #08H; Cargar tiempos de interrupción T0

MOV IE, #82H Activar interrupción

LP :

MOV R7, #30H; Muestra la primera dirección del búfer

LCALL DISPLY

Visualización de bucle SJMP

LED1: CLR P3.0

RET

DISPLY: ; subrutina de pantalla LCD

MOV COM, #0CAH

LCALL PR1

MOV DAT, 30H

LCALL PR2

MOV DAT, 31H

LCALL PR2

MOV DAT, 32H

LCALL PR2

MOV DAT, 33H

LCALL PR2

MOV DAT, 34H

LCALL PR2

MOV DAT, 35H

LCALL PR2

RET

STR0:

MOV COM, #01H

LCALL PR1

MOV COM, #06H

LCALL PR1

MOV COM, #090H; Establecer dirección DDRAM

LCALL PR1; Llamar y escribir subrutina de código de instrucción

MO

V DPTR, #TAB4

MOV R2, #16

MOV R3, #00H

WRIN0:

MOV A, R3

MOVC A, @A DPTR

MOV DAT, A

LCALL PR2

INC R3

DJNZ R2 , WRIN0

MOV COM, #0D0H

LCALL PR1

MOV DPTR, #TAB5

MOV R2, #16

MOV R3, #00H

WRIN1:

MOV A, R3

MOVC A, @A DPTR

MOV DAT, A

LCALL PR2

INC R3

DJNZ R2, WRIN1

MOV R3, #10H

ZUOYI:

MOV COM, #18H

LCALL PRX

DJNZ R3, ZUOYI

LCALL DELAY00

LCALL DELAY00

LCALL DELAY00

LCALL DELAY00

RET

RET

STR1:

MOV COM, #01H; comando LCD borrar 0

LCALL PR1; escribir subrutina de código de comando

MOV COM, #06H comando de modo de entrada, el cursor se mueve hacia la derecha

LCALL PR1; subrutina de código de instrucción de transferencia

MOV COM, #40H

LCALL PR1

MOV R5, #20H

p>

MOV DPTR, #ZI

MOV R4, #0

BUCLE1: MOV A, R4

MOVC A, @A DPTR

MOV DAT, A

LCALL PR2

INC R4

DJNZ R5, LOOP1

MOV COM, #80H

LCALL PR1

MOV DPTR, #TAB2

MOV A, #00H

MOVC A, @A DPTR

MOV DAT, A

LCALL PR2

MOV A, #01H

MOV DPTR, #TAB2

MOVC A, @A DPTR

MOV DAT, A

LCALL PR2

MOV A, #02H

MOV DPTR, #TAB2

MOVC A, @A DPTR

MOV DAT, A

LCALL PR2

MOV A, #03H

MOV DPTR, #TAB2

MOVC A, @A DPTR

MOV DAT, A

LCALL PR2

MOV R1, #00H

MOV R0, #0dH

MOV DPTR, #TAB3

BUCLE2: MOV A, R1

MOVC A, @A DPTR

MOV DAT,A

p>

LCALL PR2

INC R1

DJNZ R0, LOOP2

RET

N2: MOV COM, #0C0H

LCALL PR1

MOV DPTR, #TAB1

MOV R2, #10

MOV R3, #00H

WRIN:

MOV A, R3

MOVC A, @A DPTR

MOV DAT, A

LCALL PR2

INC R3

DJNZ R2, WRIN

RET

TAB1: DB "VOLTAGE = "

TAB2: DB 00H

DB 01H

DB 02H

DB 03H

DB 04H

DB 05H

TAB3: DB "10701 tcw "

ZI: DB 009H, 00AH, 00CH, 01FH, 00CH, 00AH, 00CH, 009H

DB 004H, 004H, 01FH, 004H, 00AH, 00AH, 011H, 000H

DB 004H, 004H, 01FH, 01FH, 01FH, 004H, 007H, 000H

DB 004H, 00EH, 010H, 00EH, 000H, 00EH, 003H, 000H

TAB4: DB " ¡bienvenido! "

TAB5: DB "DISEÑO POR tcw"

TAB6: DB "123456"

************************************************ *********************

; La subrutina de servicio de interrupción del temporizador T0 lee el resultado de la conversión A/D del canal 0 de ADC0809 y Convert. para mostrar el valor*

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

BT0:

PUSH ACC

PUSH PSW

MOV PSW, #08H

CLR TR0

MOV TH0, #00H recargar valor inicial

MOV TL0, #00H

DIC 24H

MOV A, 24H

JNZ RTN1

MOV 24H, #08H

LCALL ADC

RTN1: SETB TR0

POP PSW

POP ACC

RETI

ADC:

MOV DPTR, #0F6FFH

MOV A, #0; seleccione el canal 0

MOVX @DPTR, A; iniciar conversión AD<; /p>

MOV A, #40H

DJNZ ACC, $

MOVX A, @DPTR

MOV 22H, A

MOV 21H, #0CCH

CJNE A, 21H, BJ0

BJ0: LED JNC

SJMP LL0

>

LL0: SETB P3.0

SJMP LL

LED: LCALL LED1

LL: MOV A, 22H

MOV B, #05H; el resultado de la conversión A/D se convierte en valor de visualización

MUL AB; (AD*5)/256

MOV 30H, B 5 La sección es la parte entera

MOV B, #0AH

MUL AB; el byte bajo de AD*5 es el resultado de /256, que es la parte decimal

MOV 32H, B; Convertir decimal binario a número decimal

MOV B, #0AH

MUL AB

MOV 33H, B

MOV B, #0AH

MUL AB

MOV 34H, B

MOV A, 30H

MOV DPTR, #TAB

MOVC A, @A DPTR

MOV 30H, A

MOV A, 32H

MOVC A, @A DPTR

MOV 32H, A

MOV A, 33H

MOVC A, @A DPTR

MOV 33H, A

MOV A, 34H

MOVC A, @A DPTR

MOV 34H, A

RET

TAB: DB " 0123456789"

****************************************** *******

;****Subrutina de inicialización en modo de control indirecto LCD******

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

INT:

RETARDO DE LLAMADA LC

MOV COM, #38H; Establecer modo de trabajo

LCALL PR1

MOV COM, #01H

LCALL PR1

MOV COM, #06H

LCALL PR1

MOV COM, #0CH

LCALL PR1

RET

DELAY: ; Subrutina de Retardo

MOV R6, #0FH

MOV R7, #00H

DELAY1:

NOP

DJNZ R7, DELAY1

DJNZ R6, DELAY1

RET

DELAY00: ; Subrutina de retardo

MOV R6 , #0FFH

MOV R7, #0FFH

DELAY0:

NOP

DJNZ R7, DELAY1

DJNZ R6, DELAY1

RET

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

;**********Subrutina del controlador en modo de control indirecto LCD******** *

****************************************** ******

;2 Escribir subrutina de código de instrucción

>

PRX:

PUSH ACC

CLR RS

SETB RW

PR110:

MOV P0, #0FFH

SETB E

LCALL DELAY00

NOP

MOV A, P0

CLR E

JB ACC.7, PR11

CLR RW

MOV P0, COM

SETB E

CLR E

POP ACC

RET

PR1:

PUSH ACC

CLR RS

SETB RW

PR11:

MOV P0, #0FFH

SETB E

RETARDO DE LLAMADA LC

NOP

MOV A, P0

CLR E

JB ACC.7, PR11

CLR RW

MOV P0, COM

SETB E

CLR E

POP ACC

RET

3 pantalla de escritura; Subrutina de datos

PR2:

PUSH ACC

CLR RS

SETB RW

PR21:

p>

MOV P0, #0FFH

SETB E

LCALL DELAY

MOV A, P0

CLR E

p>

JB ACC.7, PR21

SETB RS

CLR RW

MOV P0, DAT

SETB E

CLR E

POP ACC

RET

END