Necesito un salve para una tarea que estoy haciendo

:cry: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.:unsure:
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

  • ayuda.jpg
    ayuda.jpg
    88.1 KB · Visitas: 16
Última edición por un moderador:
Atrás
Arriba