hola a todos soy estudiante de tele en la universidad de Pinar del Rio y necesito ayuada en un ejercicioc que estoy haciendo y que tengo que entregar. El ejercicio consiste en hacer un sistema de adquisición de datos que permita sensar la temperatura y humedad. El problema es que tengo q mostrar los datos en un display lcd y no doy pie con bola a la hora de poner el dato en el display, ya pongo los nombres y se que para poner los numeros debo llevarlos a ascii pero el problema es que no se como.
Aqui les pongo mi programa y una foto del proteus, espero que alguien me ayude lo mas rapido posible.
GRACIAS
Aqui les pongo mi programa y una foto del proteus, espero que alguien me ayude lo mas rapido posible.
GRACIAS
Código:
; LCD Display Driver Demo.
; Timing code assumes 1.2MHz Clock
;LCD Registers addresses
LCD_CMD_WR equ 0
LCD_DATA_WR equ 1
LCD_BUSY_RD equ 2
LCD_DATA_RD equ 3
;LCD Commands
LCD_CLS equ 1
LCD_HOME equ 2
LCD_SETMODE equ 4
LCD_SETVISIBLE equ 8
LCD_SHIFT equ 16
LCD_SETFUNCTION equ 32
LCD_SETCGADDR equ 64
LCD_SETDDADDR equ 128
;Reset vector
org 00h
jmp start
org 03h
jmp Ext_0
org 13h
jmp Ext_1
org 1Bh
jmp timer_1
;Start of the program
org 0100h
string1a:db 'SISTEMA DE MEDICION'
db 0
string1b:db 'WILMER Y JUAN CARLOS'
db 0
string2:db 'TEMPERATURA: '
db 0
string3:db 'HUMEDAD: '
db 0
start:
mov IE, #8Dh //inicio los registros del micro
mov TCON, #5h
mov TMOD, #10h
mov TH1, #0FCh
mov TL1, #18h
mov R1, #30h //pongo el puntero a apuntar a la 30h
mov R2, #5d //inicio las ctes del timer
mov R3, #200d
mov R5, #2d
clr P2.0 //limpio P2.0
clr P3.5
mov A,#038h
call wrcmd
loop:
mov A,#LCD_SETVISIBLE+6 ;Make the display & blink visible:
call wrcmd
; mov R7,#2
loop2:
mov DPTR,#string1a ;muetra cartel stringa
call wrstr
; mov DPTR,#200 ;espera 200ms
; call wtms
mov A,#LCD_SETDDADDR+64 ;pasa a proxima linea
call wrcmd
mov DPTR,#string1b ;muestra cartel stringb
call wrstr
; mov DPTR,#4000 ;espera 4 seg
; call wtms
; mov A,#LCD_CLS ;Clear screen
; call wrcmd
; jmp loop2
; mov A,#LCD_SETDDADDR+64
; call wrcmd
; mov DPTR,#string2
; call wrstr
; mov DPTR,#200
; call wtms
; mov A,#LCD_CLS ;Clear screen
; call wrcmd
; mov DPTR,#string3
; call wrstr
; mov A,#LCD_SETVISIBLE+7 ;Show the blink cursor as well.
; call wrcmd
; mov DPTR,#2000
; call wtms
; mov A,#LCD_CLS ;Clear screen
; call wrcmd
; jmp loop
Ext_0:
mov A, P1 //leo los datos del P0
mov @R0,A //los guardo en la 30h la temp
inc R1 //incremento el ptero para guardar la humed en la 31h
djnz R5, Otro_canal //decremento R5 para saber q canal estoy leyendo
mov R5,#2d //recargo las cte
mov R1,#30h
clr P2.0
Otro_canal:
setb P2.0
clr P3.5
nop
setb P3.5
reti
timer_1:
mov TH1, #0FCh
mov TL1, #18h
djnz R2,Fin_t1
mov R2,#5d
djnz R3,Fin_t1
mov R3, #200d
setb P3.5
nop
clr P3.5
Fin_t1:
reti
Ext_1:
jnb P2.3,Ver_Temp
jnb P2.4,Ver_Humed
Ver_Temp:
mov A,#LCD_CLS ;Clear screen
call wrcmd
mov A,#LCD_SETDDADDR+64
call wrcmd
mov DPTR,#string2 ;muestra el cartel de la temperatura
call wrstr
mov DPTR,#8000
call wtms
mov A,#LCD_CLS ;Clear screen
call wrcmd
; mov A,30h
jmp start
Ver_Humed:
mov A,#LCD_CLS ;Clear screen
call wrcmd
mov A,#LCD_SETDDADDR+64
call wrcmd
mov DPTR,#string3 ;muestra el cartel de la temperatura
call wrstr
mov DPTR,#8000
call wtms
mov A,#LCD_CLS ;Clear screen
call wrcmd
jmp start
;Sub routine to write null terminated string at DPTR in program ram.
wrstr: mov R0,#LCD_DATA_WR
wrstr1: clr A
movc A,@A+DPTR
jz wrstr2
movx @R0,A
call wtbusy
inc DPTR
push DPL
push DPH
pop DPH
pop DPL
jmp wrstr1
wrstr2: ret
;Sub routine to write null terminated string at DPTR in program ram. Slowly
wrslow: mov R0,#LCD_DATA_WR
wrslw1: clr A
movc A,@A+DPTR
jz wrslw2
movx @R0,A
call wtbusy
inc DPTR
push DPL
push DPH
mov DPTR,#100
call wtms
pop DPH
pop DPL
jmp wrslw1
wrslw2: ret
;Sub routine to write command:
wrcmd: mov R0,#LCD_CMD_WR
movx @R0,A
jmp wtbusy
;Sub routine to write character:
wrchar: mov R0,#LCD_DATA_WR
movx @R0,A
;Subroutine to wait for busy clear
wtbusy: mov R1,#LCD_BUSY_RD
movx A,@r1
jb ACC.7,wtbusy
ret
;Wait for number of seconds in A
wtsec: push ACC
call wtms
pop ACC
dec A
jnz wtsec
ret
;Wait for number of milliseconds in DPTR
wtms: xrl DPL,#0FFh ;Can't do DEC DPTR, so do the loop by forming 2's complement
xrl DPH,#0FFh ;and incrementing instead.
inc DPTR
wtms1: mov TL0,#19Ch ;100 ticks before overflow = 1ms at 1.2MHz Clock
mov TH0,#0FFh
mov TMOD,#1 ;Timer 0 mode 1
setb TCON.4 ;Timer 0 runs
wtms2: jnb TCON.5,wtms2
clr TCON.4 ;Timer 0 stops
clr TCON.5
inc DPTR
mov A,DPL
orl A,DPH
jnz wtms1
ret
Adjuntos
Última edición por un moderador: