Wednesday, October 29, 2014

Ejemplo en PicSimLab

Escribiendo caracteres al LCD del picsim:



Al programa aun le falta compactar, o sea, poner ciclos donde hay codigo duplicado, etc.
El programa funciona y puede ser un buen punto de partida para explicar algunos conceptos.

En ensamblador:
; LCD del picsim
;
; ZONA DE DATOS **********************************************************************

LIST P=16F628A
INCLUDE
__CONFIG   _XT_OSC & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _BODEN_OFF & _LVP_OFF

CBLOCK 0x20
ctr
val
ENDC

; ZONA DE CÓDIGOS ********************************************************************
BANCO0 MACRO
BCF STATUS,RP0
BCF STATUS,RP1
ENDM
BANCO1 MACRO
BSF STATUS,RP0
BCF STATUS,RP1
ENDM
PUERTOS MACRO
BANCO1
CLRF VRCON
MOVLW H'1E'
MOVWF TRISA
CLRF TRISB
BANCO0
MOVLW 7
MOVWF CMCON
BCF PORTA,0
CLRF PORTB
ENDM

ORG 0
PUERTOS
call lcd_init
movlw H'4A'
movwf val
call lcd_dat
movlw H'4F'
movwf val
call lcd_dat
movlw H'52'
movwf val
call lcd_dat
movlw H'47'
movwf val
call lcd_dat
movlw H'45'
movwf val
call lcd_dat
sleep
lcd_init
bcf PORTA,0
bsf PORTB,3
call Retardo_20ms
bsf PORTA,0 ;
;
movlw H'30'
movwf val
call lcd_cmd
call Retardo_5ms
;
movlw H'30'
movwf val
call lcd_cmd
call Retardo_1ms
;
movlw H'38'
movwf val
call lcd_cmd
;
movlw H'08'
movwf val
call lcd_cmd
;
movlw H'0F'
movwf val
call lcd_cmd
;
movlw H'01'
movwf val
call lcd_cmd
;
movlw H'38'
movwf val
call lcd_cmd
return

; envia comando
lcd_cmd
bsf PORTA,0 ;
call lcd_wr ;
bcf PORTB,3
call Retardo_2ms
call Retardo_1ms
bcf PORTA,0
call Retardo_2ms
call Retardo_1ms
bsf PORTA,0
return
; envia dato
lcd_dat
bsf PORTA,0 ;
call lcd_wr ;
bsf PORTB,3
call Retardo_2ms
call Retardo_1ms
bcf PORTA,0
call Retardo_2ms
call Retardo_1ms
bsf PORTA,0
return
; escribe al LCD
lcd_wr
bcf PORTB,4
movlw d'8'
movwf ctr ;
again
btfsc val,7
goto envia1
bcf PORTB,3
goto rota
envia1
bsf PORTB,3
rota
rlf val
bsf PORTB,4
bcf PORTB,4
decfsz ctr,F ;
goto again
return

;
INCLUDE  
END

No comments: