Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;Sistemas Electrónicos Digitales.
- ;Control de un display modelo NHDC0220 a través del bus i2C.
- ;Curso 2013/2014: Camilo Quintáns
- LIST P=PIC18F45K20
- #INCLUDE <P18F45K20.INC>
- ;configuración para después de un reset
- CONFIG FOSC=INTIO67 ;Internal oscillator clock,
- ;port function on RA6 and RA7
- ;por defecto el reloj está a 1 MHz=> 1 us
- CONFIG LVP=OFF ;Deshabilitado ISCP (In-Circuit Serial Programming)
- CONFIG WDTEN=OFF
- CONFIG PBADEN=OFF ;deshabilite los bits del puerto b<4:0> como entradas analógicas
- ;posiciones de memoria para los datos
- CBLOCK 0x00 ;Inicio de las variables
- i2c_dato
- DelayCtr2
- DelayCtr1
- ENDC
- ORG 0x00
- GOTO principal
- ORG 0x20
- ;subrutina de inicialización de puertos
- ini_puertos
- CLRF TRISD,0
- CLRF LATD
- RETURN
- ;fin de subrutina ini_puertos
- ;subrutina de inicialización del módulo SSP en modo I2C master
- i2c_ini
- BSF SSPSTAT,SMP ; Se deshabilita el control de la Slew Rate
- BSF SSPCON1,SSPM3 ; El hardware SSP se configura en modo I2C master
- BSF SSPCON1,SSPEN ; Se habilita el módulo SSP
- ;(ADD+1)*4]/Fosc=SCL_periodo
- MOVLW 0x04 ;[(4+1)*4]/1E6]E-1=50 kHz
- MOVWF SSPADD ;frecuecnia del reloj I2C = 50 kHz
- BSF TRISC,3 ;Configura el terminal del I2C SCL como entrada
- BSF PORTC,3 ;(lo controlará el módulo SSP)
- BSF TRISC,4 ;Configura el terminal del I2C SDA como estrada
- BSF PORTC,4 ;(lo controlará el módulo SSP)
- RETURN
- ;fin de subrutina
- ;subrutina de inicio de transmisión i2c
- ;envio del bit de START
- i2c_start
- BSF SSPCON2,SEN ;envio bit START
- espera_bit_start_borrado:
- BTFSC SSPCON2,SEN ;se espera a que se boore
- BRA espera_bit_start_borrado
- RETURN
- ;fin de subrutina
- ;subrutina que envia un STOP
- i2c_stop
- BSF SSPCON2,PEN ;se envia un bit de stop
- espera_bit_stop:
- BTFSC SSPCON2,PEN ;se comprueba si se ha enviado
- BRA espera_bit_stop ;si no se espera
- RETURN
- ;fin de subrutina
- ;subrutina de transmisión i2c
- ;envio del dato desde el WREG al dipositivo
- i2c_tx
- BCF PIR1,SSPIF ;se borra el flag de interrupción
- MOVFF i2c_dato,SSPBUF ;se escribe el dato en el buffer
- espera_fin_serializacion:
- BTFSS PIR1,SSPIF ;comprueba si se ha serializado el dato
- BRA espera_fin_serializacion ;si no, se espera
- espera_bit_reconocimiento:
- BTFSC SSPCON2,ACKSTAT ;comprueba que se recibe el reconocimiento
- BRA espera_bit_reconocimiento ;si no, se espera
- RETURN
- inicio_temp
- movlw b'00000111'
- movwf T0CON
- BCF INTCON,TMR0IF
- BSF INTCON,TMR0IE
- BCF INTCON2,TMR0IP
- CALL RecargaTmr
- RETURN
- RecargaTmr
- movlw 0xFF
- movwf TMR0H
- movlw 0x3C
- movwf TMR0L
- RETURN
- inicio_temp1
- movlw b'10111000'
- movwf T1CON
- BCF PIR1,TMR1IF
- BSF PIE1,TMR1IE
- BCF IPR1,TMR1IP
- CALL RecargaTmr1
- RETURN
- RecargaTmr1
- movlw 0xC2
- movwf TMR1H
- movlw 0xF7
- movwf TMR1L
- RETURN
- retardo
- movlw 0x0A
- movwf DelayCtr2 ; preset
- clrf DelayCtr1 ; clear counter
- Delay1
- decfsz DelayCtr1 ; decrement counter
- bra Delay1 ; back to top of loop
- decfsz DelayCtr2 ; decrement counter
- bra Delay1 ; back to top of loop
- NOP
- RETURN
- ;fin de subrutina
- ;subrutina de inicialización del display
- ini_display
- MOVLW 0x78 ;dirección i2c del display
- MOVWF i2c_dato
- CALL i2c_start
- CALL i2c_tx
- BSF LATD,1
- MOVLW 0x00 ;envio de comandos de control
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x38
- MOVWF i2c_dato
- CALL i2c_tx
- CALL retardo
- MOVLW 0x39
- MOVWF i2c_dato
- CALL i2c_tx
- CALL retardo
- MOVLW 0x14
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x78 ;control del contraste
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x5E
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x6D
- MOVWF i2c_dato
- CALL i2c_tx
- ;bit4=1, bit3=display on, bit2= cursor on, bit1=posición cursor on
- MOVLW 0x0F;C
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x01 ;clear display
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x06
- MOVWF i2c_dato
- CALL i2c_tx
- CALL retardo
- CALL i2c_stop
- RETURN
- ;fin de subrutina
- principal
- CALL ini_puertos
- CALL i2c_ini
- CALL inicio_temp
- CALL inicio_temp1
- BSF LATD,0
- CALL ini_display
- BSF LATD,2
- Cuentaatras equ 0x51
- MOVLW 0x0A
- MOVWF Cuentaatras
- CALL i2c_start
- MOVLW 0x78 ; Direccion
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x80 ; (1000 0000) Co=1 (Dentro de dos bloques vuelve a ser un byte de comando) RS=0(por lo que el siguient bloque de instrucciones es una instruccion para el panel)
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x83 ; Set DDRAM Address
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x80 ; (1000 0000) Co=1 (Dentro de dos bloques vuelve a ser un byte de comando) RS=0(por lo que el siguient bloque de instrucciones es una instruccion para el panel)
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x80 ; Set DDRAM Address
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x40 ; (0100 0000) Co=0 (Dentro de dos bloques no vuelve a ser un byte de comando)RS=1(por lo que el siguient bloque de instrucciones es un dato)
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x34
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x78
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x35
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x3D
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x32
- MOVWF i2c_dato
- CALL i2c_tx
- MOVLW 0x30
- MOVWF i2c_dato
- CALL i2c_tx
- bucle
- CALL retardo
- CALL retardo
- BTG LATD,3
- BRA bucle
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement