Advertisement
Guest User

Untitled

a guest
Oct 9th, 2018
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MPASM 5.50 KB | None | 0 0
  1. ;Sistemas Electrónicos Digitales.
  2. ;Control de un display modelo NHDC0220 a través del bus i2C.
  3. ;Curso 2013/2014: Camilo Quintáns
  4.  
  5. LIST P=PIC18F45K20
  6. #INCLUDE <P18F45K20.INC>
  7.  
  8. ;configuración para después de un reset
  9. CONFIG FOSC=INTIO67 ;Internal oscillator clock,
  10.                     ;port function on RA6 and RA7
  11.                     ;por defecto el reloj está a 1 MHz=> 1 us 
  12. CONFIG LVP=OFF      ;Deshabilitado ISCP (In-Circuit Serial Programming)
  13. CONFIG WDTEN=OFF
  14. CONFIG PBADEN=OFF   ;deshabilite los bits del puerto b<4:0> como entradas analógicas
  15.  
  16. ;posiciones de memoria para los datos
  17. CBLOCK 0x00         ;Inicio de las variables
  18.     i2c_dato
  19.     DelayCtr2
  20.     DelayCtr1
  21. ENDC
  22.  
  23. ORG 0x00
  24.     GOTO principal
  25. ORG 0x20
  26.  
  27.  
  28. ;subrutina de inicialización de puertos
  29. ini_puertos
  30.     CLRF  TRISD,0
  31.     CLRF  LATD
  32.     RETURN
  33. ;fin de subrutina ini_puertos
  34.  
  35. ;subrutina de inicialización del módulo SSP en modo I2C master
  36. i2c_ini
  37.     BSF SSPSTAT,SMP     ; Se deshabilita el control de la Slew Rate
  38.     BSF SSPCON1,SSPM3   ; El hardware SSP se configura en modo I2C master
  39.     BSF SSPCON1,SSPEN   ; Se habilita el módulo SSP
  40.  
  41.                     ;(ADD+1)*4]/Fosc=SCL_periodo
  42.     MOVLW   0x04    ;[(4+1)*4]/1E6]E-1=50 kHz
  43.     MOVWF   SSPADD  ;frecuecnia del reloj I2C = 50 kHz
  44.  
  45.     BSF TRISC,3     ;Configura el terminal del I2C SCL como entrada
  46.     BSF PORTC,3     ;(lo controlará el módulo SSP)
  47.     BSF TRISC,4     ;Configura el terminal del I2C SDA como estrada
  48.     BSF PORTC,4     ;(lo controlará el módulo SSP)
  49. RETURN
  50. ;fin de subrutina
  51.  
  52. ;subrutina de inicio de transmisión i2c
  53. ;envio del bit de START
  54. i2c_start
  55.     BSF     SSPCON2,SEN ;envio bit START
  56.  
  57. espera_bit_start_borrado:
  58.     BTFSC   SSPCON2,SEN ;se espera a que se boore
  59.     BRA espera_bit_start_borrado
  60. RETURN
  61. ;fin de subrutina
  62.  
  63. ;subrutina que envia un STOP
  64. i2c_stop
  65.     BSF     SSPCON2,PEN     ;se envia un bit de stop
  66.  
  67. espera_bit_stop:
  68.     BTFSC   SSPCON2,PEN     ;se comprueba si se ha enviado
  69.     BRA     espera_bit_stop ;si no se espera
  70. RETURN
  71. ;fin de subrutina
  72.  
  73. ;subrutina de transmisión i2c
  74. ;envio del dato desde el WREG al dipositivo
  75. i2c_tx
  76.  
  77.     BCF     PIR1,SSPIF      ;se borra el flag de interrupción
  78.     MOVFF   i2c_dato,SSPBUF ;se escribe el dato en el buffer
  79.  
  80. espera_fin_serializacion:
  81.     BTFSS   PIR1,SSPIF               ;comprueba si se ha serializado el dato
  82.     BRA     espera_fin_serializacion ;si no, se espera
  83.  
  84. espera_bit_reconocimiento:
  85.     BTFSC   SSPCON2,ACKSTAT           ;comprueba que se recibe el reconocimiento
  86.     BRA     espera_bit_reconocimiento ;si no, se espera
  87.  
  88. RETURN
  89.  
  90. inicio_temp
  91.  
  92.     movlw   b'00000111'
  93.     movwf   T0CON
  94.  
  95.     BCF     INTCON,TMR0IF
  96.     BSF     INTCON,TMR0IE
  97.     BCF     INTCON2,TMR0IP
  98.  
  99.     CALL    RecargaTmr
  100.    
  101.     RETURN
  102.  
  103. RecargaTmr
  104.    
  105.     movlw   0xFF
  106.     movwf   TMR0H
  107.     movlw   0x3C
  108.     movwf   TMR0L
  109.  
  110.     RETURN
  111.  
  112. inicio_temp1
  113.  
  114.     movlw   b'10111000'
  115.     movwf   T1CON
  116.  
  117.     BCF     PIR1,TMR1IF
  118.     BSF     PIE1,TMR1IE
  119.     BCF     IPR1,TMR1IP
  120.  
  121.     CALL    RecargaTmr1
  122.    
  123.     RETURN
  124.  
  125. RecargaTmr1
  126.    
  127.     movlw   0xC2
  128.     movwf   TMR1H
  129.     movlw   0xF7
  130.     movwf   TMR1L
  131.  
  132.     RETURN
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139. retardo
  140.     movlw   0x0A
  141.     movwf   DelayCtr2   ; preset
  142.     clrf    DelayCtr1   ; clear counter
  143. Delay1
  144.     decfsz  DelayCtr1   ; decrement counter
  145.     bra Delay1      ; back to top of loop
  146.  
  147.     decfsz  DelayCtr2   ; decrement counter
  148.     bra Delay1      ; back to top of loop
  149.     NOP
  150.     RETURN
  151. ;fin de subrutina
  152.  
  153. ;subrutina de inicialización del display
  154. ini_display
  155.     MOVLW   0x78        ;dirección i2c del display
  156.     MOVWF   i2c_dato
  157.     CALL    i2c_start
  158.     CALL    i2c_tx
  159. BSF LATD,1
  160.     MOVLW   0x00        ;envio de comandos de control
  161.     MOVWF   i2c_dato
  162.     CALL    i2c_tx
  163.    
  164.     MOVLW   0x38
  165.     MOVWF   i2c_dato
  166.     CALL    i2c_tx
  167.     CALL    retardo
  168.    
  169.     MOVLW   0x39
  170.     MOVWF   i2c_dato
  171.     CALL    i2c_tx
  172.     CALL    retardo
  173.  
  174.     MOVLW   0x14
  175.     MOVWF   i2c_dato
  176.     CALL    i2c_tx
  177.  
  178.     MOVLW   0x78        ;control del contraste
  179.     MOVWF   i2c_dato
  180.     CALL    i2c_tx
  181.  
  182.     MOVLW   0x5E
  183.     MOVWF   i2c_dato
  184.     CALL    i2c_tx
  185.  
  186.     MOVLW   0x6D
  187.     MOVWF   i2c_dato
  188.     CALL    i2c_tx
  189.  
  190.     ;bit4=1, bit3=display on, bit2= cursor on, bit1=posición cursor on
  191.     MOVLW   0x0F;C
  192.     MOVWF   i2c_dato
  193.     CALL    i2c_tx
  194.  
  195.     MOVLW   0x01        ;clear display
  196.     MOVWF   i2c_dato
  197.     CALL    i2c_tx
  198.  
  199.     MOVLW   0x06
  200.     MOVWF   i2c_dato
  201.     CALL    i2c_tx
  202.  
  203.     CALL    retardo
  204.     CALL    i2c_stop
  205.     RETURN
  206. ;fin de subrutina
  207.  
  208. principal
  209.     CALL    ini_puertos
  210.     CALL    i2c_ini
  211.     CALL    inicio_temp
  212.     CALL    inicio_temp1
  213.     BSF     LATD,0
  214.     CALL    ini_display
  215.     BSF     LATD,2
  216.     Cuentaatras equ 0x51
  217.     MOVLW   0x0A
  218.     MOVWF   Cuentaatras
  219.  
  220.  
  221.     CALL    i2c_start
  222.  
  223.     MOVLW   0x78   ; Direccion
  224.     MOVWF   i2c_dato
  225.     CALL    i2c_tx
  226.  
  227.     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)
  228.     MOVWF   i2c_dato
  229.     CALL    i2c_tx
  230.  
  231.     MOVLW   0x83 ; Set DDRAM Address
  232.     MOVWF   i2c_dato
  233.     CALL    i2c_tx
  234.  
  235.     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)
  236.     MOVWF   i2c_dato
  237.     CALL    i2c_tx
  238.  
  239.     MOVLW   0x80 ; Set DDRAM Address
  240.     MOVWF   i2c_dato
  241.     CALL    i2c_tx
  242.  
  243.     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)
  244.     MOVWF   i2c_dato
  245.     CALL    i2c_tx
  246.  
  247.     MOVLW   0x34
  248.     MOVWF   i2c_dato
  249.     CALL    i2c_tx
  250.  
  251.     MOVLW   0x78
  252.     MOVWF   i2c_dato
  253.     CALL    i2c_tx
  254.  
  255.  
  256.     MOVLW   0x35
  257.     MOVWF   i2c_dato
  258.     CALL    i2c_tx
  259.  
  260.     MOVLW   0x3D
  261.     MOVWF   i2c_dato
  262.     CALL    i2c_tx
  263.  
  264.     MOVLW   0x32
  265.     MOVWF   i2c_dato
  266.     CALL    i2c_tx
  267.  
  268.     MOVLW   0x30
  269.     MOVWF   i2c_dato
  270.     CALL    i2c_tx
  271.  
  272.  
  273.  
  274. bucle
  275.     CALL    retardo
  276.     CALL    retardo
  277.     BTG LATD,3
  278. BRA bucle
  279. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement