Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
02/13/09 19:24
Read: times


 
#162371 - Sorry
Responding to: ???'s previous message
Here is the full code


.equ    locat, 0x2000           	;Location for this program
.equ	lcd_horiz_size, 20
.equ	lcd_vert_size, 2
.equ	lcd_bytes_per_line, (128 / lcd_vert_size)
.equ	lcd_clear_cmd, 0x01		;clears display
.equ	lcd_home_cmd, 0x02		;put cursor at home position
.equ	lcd_on_cmd, 0x0C		;turn on display (cursor off)
.equ	lcd_shift_cmd, 0x10
.equ	lcd_config_cmd, 0x38		;config 8 bit, 2 lines, 5x7
.equ	lcd_command_wr, 0xFE00
.equ	lcd_status_rd, 0xFE01
.equ	lcd_data_wr, 0xFE02
.equ	lcd_data_rd, 0xFE03
.equ	cout, 0x0030
.equ	cin, 0x0032
.equ	phex, 0x0034
.equ	phex16, 0x0036
.equ	pstr, 0x0038
.equ	newline, 0x0048

.equ  	port_a, 0xF800
.equ	port_abc_pgm, 0xF803

.org    locat
.db     0xA5,0xE5,0xE0,0xA5     	;signiture bytes
.db     35,255,0,0              	;id (35=prog)
.db     0,0,0,0                 	;prompt code vector
.db     0,0,0,0                 	;reserved
.db     0,0,0,0                 	;reserved
.db     0,0,0,0                 	;reserved
.db     0,0,0,0                 	;user defined
.db     255,255,255,255         	;length and checksum (255=unused)
.db     "Practica 2: LCD",0     	;max 31 characters, plus the zero
.org    locat+64                	;executable code begins here

begin:
	mov	dptr, #mesg_start	;print a message for the user
	lcall	pstr
	acall	lcd_init
	acall	lcd_clear		;setup the LCD
	acall	lcd_home
	mov	r4, #0			;r4/r5 will remember cursor position
	mov	r5, #1
	mov	dptr, #mesg_start_lcd
	acall	lcd_pstr		;print a message on the LCD top line
	sjmp	reposition_cursor	;start the cursor on second line
main2:	acall	lcd_cout
	inc	r4			;keep up with cursor position
	cjne	r4, #lcd_horiz_size, main_loop
	mov	r4, #0			;if right edge, return to left side
	inc	r5
	cjne	r5, #lcd_vert_size, reposition_cursor
	mov	r5, #0			;if bottom edge, return to top line
reposition_cursor:
	mov	a, r4
	mov	r2, a
	mov	a, r5
	mov	r3, a
	acall	lcd_set_xy		;set the cursor back onto screen
	sjmp	main_loop
main_loop:
        mov     dptr, #port_a
	movx	a,@dptr
      	anl 	a,#0Fh
	jz 	msg00 ;
      	dec	a
      	jz	msg01 ;
      	dec	a ;	
      	jz	msg02;	
      	dec	a;	
      	jz	msg03;	
	dec 	a;	
	jz	msg04;	
      	dec 	a;	
	jz 	msg05 ;
      	dec	a
      	jz	msg06 ;
      	dec	a ;	
      	jz	msg07;	
      	dec	a;	
      	jz	msg08;	
	dec 	a;	
	jz	msg09;	
      	dec 	a;	
	jz 	msg0A ;
      	dec	a
      	jz	msg0B ;
      	dec	a ;	
      	jz	msg0C;	
      	dec	a;	
      	jz	msg0D;	
	dec 	a;	
	jz	msg0E;	
      	dec 	a;	
	jz 	msg0F ;
	cjne	a, #27, main2
	ljmp	0
msg00:
	mov	dptr, #msg0
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg01:
	mov	dptr, #msg1
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg02:
	mov	dptr, #msg2
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg03:
	mov	dptr, #msg3
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg04:
	mov	dptr, #msg4
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg05:
	mov	dptr, #msg5
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg06:
	mov	dptr, #msg6
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg07:
	mov	dptr, #msg7
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg08:
	mov	dptr, #msg8
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg09:
	mov	dptr, #msg9
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg0A:
	mov	dptr, #msgA
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg0B:
	mov	dptr, #msgB
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg0C:
	mov	dptr, #msgC
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg0D:
	mov	dptr, #msgD
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg0E:
	mov	dptr, #msgE
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
msg0F:
	mov	dptr, #msgF
	acall 	lcd_pstr
	ljmp main_loop ;ajmp main_loop 
mesg_start:
	.db	"Ingresa un valor binario",13,10
	.db	"mediante el uso del DIP Switch",13,10,0
mesg_start_lcd:
	.db	"Ingresa un valor Bin",0
msg0:
	.db	"El camino, mal viaje",0
msg1:
	.db	"Ahora hay que seguir",0
msg2:
	.db	"Si tu no comprendes ",0
msg3:
	.db	"Todo estara igual...",0
msg4:
	.db	"Solo sigue adelante ",0
msg5:
	.db	"Olvidate de lo demas",0
msg6:
	.db	"Escucha todo momento",0
msg7:
	.db	"Observa cada lamento",0
msg8:
	.db	"Notaras solo la luz ",0
msg9:
	.db	"Olvidaras el futuro ",0
msgA:
	.db	"Conoceras el pasado ",0
msgB:
	.db	"A pesar de todo eso ",0
msgC:
	.db	"No importara conocer",0
msgD:
	.db	"Ya que todo al final",0
msgE:
	.db	"Dependera de tu boca",0
msgF:
	.db	"Y del camino en ti. ",0


;----------------------------------------------------------------
;         General purpose routines for accessing the LCD
;----------------------------------------------------------------

lcd_cout:
	push	dpl
	push	dph
	push	acc
	acall	lcd_busy
	mov	dptr, #lcd_data_wr
	pop	acc
	movx	@dptr, a
	pop	dph
	pop	dpl
	ret
lcd_pstr:
	clr	a
	movc	a, @a+dptr
	inc	dptr
	jz	lcd_pstr_end
	acall	lcd_cout
	sjmp	lcd_pstr
lcd_pstr_end:
	ret
lcd_busy:
	mov	dptr, #lcd_status_rd
lcd_busy_wait:
	movx	a, @dptr
	jb	acc.7, lcd_busy_wait
	ret
lcd_set_xy:
	mov	a, r2
	add	a, #256 - lcd_horiz_size
	jnc	lcd_set_xok
	mov	r2, #lcd_horiz_size - 1
lcd_set_xok:
	mov	a, r3
	add	a, #256 - lcd_vert_size
	jnc	lcd_set_yok
	mov	r3, #lcd_vert_size - 1
lcd_set_yok:
	acall	lcd_busy
	mov	a, r3
	mov	b, #lcd_bytes_per_line
	mul	ab
	add	a, r2
	orl	a, #0x80	;msb set for set DD RAM address
	mov	dptr, #lcd_command_wr
	movx	@dptr, a
	ret
lcd_init:
	lcall	lcd_busy
	mov	dptr, #lcd_command_wr
	mov	a, #lcd_config_cmd
	movx	@dptr, a
	lcall	lcd_busy
	mov	dptr, #lcd_command_wr
	mov	a, #lcd_on_cmd
	movx	@dptr, a
	lcall	lcd_busy
	mov	dptr, #lcd_command_wr
	mov	a, #lcd_shift_cmd
	movx	@dptr, a
	ret
lcd_clear:
	lcall	lcd_busy
	mov	dptr, #lcd_command_wr
	mov	a, #lcd_clear_cmd
	movx	@dptr, a
	ret
lcd_home:
	lcall	lcd_busy
	mov	dptr, #lcd_command_wr
	mov	a, #lcd_home_cmd
	movx	@dptr, a
	ret
 
 



List of 15 messages in thread
TopicAuthorDate
Need some help with port reading and LCD displaying.            01/01/70 00:00      
   be more specific in your statement of the problem!            01/01/70 00:00      
      is other part(LCD) working?            01/01/70 00:00      
         The LCD actually is working            01/01/70 00:00      
            It worked better than mine            01/01/70 00:00      
               You still have no loop            01/01/70 00:00      
                  Nearly perfectly working            01/01/70 00:00      
                     what is Your default code?            01/01/70 00:00      
                        My actual code            01/01/70 00:00      
                           that's not 'code'            01/01/70 00:00      
                              Sorry            01/01/70 00:00      
                                 Is this really all of it?            01/01/70 00:00      
                                    Yeah, it's all of it            01/01/70 00:00      
      thank you for the answer            01/01/70 00:00      
   Compare Jump NOT Equal            01/01/70 00:00      

Back to Subject List