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:
Post a Comment