Guest User

Untitled

a guest
May 23rd, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.20 KB | None | 0 0
  1. LIST P=PIC16F84A ; Pic a usar
  2.  
  3. #INCLUDE P16F84A.INC ; Lista de etiquetas de microchip
  4.  
  5. ;**************************************************************
  6.  
  7. _CP_ON EQU H'000F' ; Activa code protect
  8. _CP_OFF EQU H'3FFF' ; Desactiva code protect
  9. _PWRTE_ON EQU H'3FF7' ; Activa power on reset
  10. _PWRTE_OFF EQU H'3FFF' ; Desactiva power on reset
  11. _WDT_ON EQU H'3FFF' ; Activa Watchdog
  12. _WDT_OFF EQU H'3FFB' ; Desactiva Watchdog
  13. _LP_OSC EQU H'3FFC' ; Oscilador LP
  14. _XT_OSC EQU H'3FFD' ; Oscilador XT
  15. _HS_OSC EQU H'3FFE' ; Oscilador HS
  16. _RC_OSC EQU H'3FFF' ; Oscilador RC
  17.  
  18. __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
  19.  
  20. ;**************************************************************
  21.  
  22. ;STATUS equ 0x03 ; Aquí le asignamos nombres a los
  23. ;TRISA equ 0x05 ; registros indicando la posición
  24. ;PORTA equ 0x05
  25. ;TRISB equ 0x06 ; en la que se encuentran
  26.  
  27. TXREG EQU 0x0D ; Registro de transmisión
  28. BITS EQU 0x0E ; Número de bits de datos
  29. CNTMSEC EQU 0x0F ; Número de milisegundos de retardo
  30.  
  31. ;**************************************************************
  32. ORG 0 ;Comando que indica al Ensamblador
  33. ;la dirección de la memoria de programa
  34. ;donde situar la siguiente instrucción
  35. ;**************************************************************
  36.  
  37. INICIO
  38. BSF STATUS,RP0 ; Activa el banco de memoria 1.
  39. MOVLW 0 ; son salidas
  40. MOVWF TRISA ; en el puerto A
  41. MOVLW 0XFF ; SON ENTRADAS
  42. MOVWF TRISB ; EN EL PUERTO B
  43. BCF STATUS,RP0 ; Activa el banco de memoria 0.
  44. BSF PORTA,0 ; ponemos a nivel alto la salida serie. Línea en reposo.
  45. MOVLW 0xC8 ; retardo de 200 msec.
  46. CALL NMSEC ; para que no afecten las fluctuaciones del encendido
  47. MOVF TRISB,0 ; Cargo w con el valor del puerto B
  48. CALL OUTCH ; llama a la rutina de comunicación serie
  49.  
  50. MOVLW 0X0D ;
  51. CALL OUTCH ;
  52. MOVLW 0X0A ;
  53. CALL OUTCH ;
  54. MOVLW 0X00 ;
  55. CALL OUTCH ;
  56.  
  57.  
  58.  
  59. DATO NOP
  60.  
  61. GOTO DATO ; nos quedamos aqui, en un bucle infinito
  62.  
  63. ;**************************************************************
  64.  
  65. OUTCH
  66. MOVWF TXREG ; coloca W en el registro de transmisión
  67. MOVLW 8 ; 8 bits de datos serán transmitidos
  68. MOVWF BITS ; BITS es un contador para los bits
  69. BCF PORTA,0 ; bit de inicio en la salida serie (activo a nivel bajo)
  70. TXLOOP
  71. MOVLW 0x31 ; Retardo de 196 microsegundos 31h = 49d
  72. CALL MIC4 ; 49 x 4 = 196 microsegundos
  73. RRF TXREG, f ; rotamos a la derecha el bit en el acarreo
  74. BTFSC STATUS, C ; si el acarreo es 0 saltamos y ponemos la línea a nivel bajo
  75. GOTO SETUNO ; si no, ponemos la línea a nivel alto
  76. SETCERO
  77. BCF PORTA,0 ; Ponemos la salida serie a nivel bajo (transmitir un 0)
  78. GOTO TDONE ; Comprobar si se han transmitido todos los bits de TXREG
  79. SETUNO
  80. BSF PORTA,0 ; Ponemos la salida serie a nivel alto (transmitir un 1)
  81. NOP ; pasamos a probar si acabamos, directamente
  82. TDONE
  83. DECFSZ BITS, f ; se decrementa BITS por el bit transmitido y salta cuando llega a cero
  84. GOTO TXLOOP ; quedan más bits, vamos a transmitir el siguiente
  85. MOVLW 0x34 ; Retardo de 208 microsegundos 34h = 52d
  86. CALL MIC4 ; 52 x 4 = 208 microsegundos para el último bit de datos que queda
  87. BSF PORTA,0 ; Salida serie a nivel alto para el bit de stop
  88. MOVLW 0x68 ; retardo de 104 x 4 microsegundos 68h = 104d
  89. CALL MIC4 ; 104 x 4 = 416 microsegundos para dos bits de parada
  90. RETURN
  91.  
  92. ;**************************************************************
  93.  
  94. NMSEC
  95. MOVWF CNTMSEC ; mueve W al registro msec
  96. MSLOOP
  97. MOVLW 0xF8 ; cuenta 8 microsegundos por encima
  98. CALL MIC4 ; 248 * 4 + 2 = 994
  99. NOP ; realiza el resto del bucle
  100. NOP ; añade 6 microsegundos
  101. DECFSZ CNTMSEC, f ; decrementa el contador y salta cuando llega a cero
  102. GOTO MSLOOP ; vuelve a realizar el bucle
  103. RETURN
  104.  
  105. ;**************************************************************
  106.  
  107. MIC4
  108. ADDLW 0xFF ; substrae 1 de W
  109. BTFSS STATUS,Z ; salta cuando llega a cero
  110. GOTO MIC4 ; si no llega a cero vuelve a restar
  111. RETURN
  112.  
  113.  
  114. ;**************************************************************
  115.  
  116. END
  117.  
  118. INICIO
  119. BSF STATUS,RP0 ; Activa el banco de memoria 1.
  120. MOVLW 0 ; son salidas
  121. MOVWF TRISA ; en el puerto A
  122. MOVLW 0XFF ; SON ENTRADAS
  123. MOVWF TRISB ; EN EL PUERTO B
  124. BCF STATUS,RP0 ; Activa el banco de memoria 0.
  125. BSF PORTA,0 ; ponemos a nivel alto la salida serie. Línea en reposo.
  126. MOVLW 0xC8 ; retardo de 200 msec.
  127. CALL NMSEC ; para que no afecten las fluctuaciones del encendido
  128.  
  129. MOVF TRISB,0 ; Pone en el registro de trabajo "0x86"
  130. CALL OUTCH ; llama a la rutina de comunicación serie y envia al puerto el valor del registro de trabajo.
  131.  
  132. MOVLW 0X0D ; Retorno de Carro
  133. CALL OUTCH ;
  134. MOVLW 0X0A ; Nueva Linea
  135. CALL OUTCH ;
  136. MOVLW 0X00 ; Final del Mensaje
  137. CALL OUTCH ;
Add Comment
Please, Sign In to add comment