Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- LIST P=PIC16F84A ; Pic a usar
- #INCLUDE P16F84A.INC ; Lista de etiquetas de microchip
- ;**************************************************************
- _CP_ON EQU H'000F' ; Activa code protect
- _CP_OFF EQU H'3FFF' ; Desactiva code protect
- _PWRTE_ON EQU H'3FF7' ; Activa power on reset
- _PWRTE_OFF EQU H'3FFF' ; Desactiva power on reset
- _WDT_ON EQU H'3FFF' ; Activa Watchdog
- _WDT_OFF EQU H'3FFB' ; Desactiva Watchdog
- _LP_OSC EQU H'3FFC' ; Oscilador LP
- _XT_OSC EQU H'3FFD' ; Oscilador XT
- _HS_OSC EQU H'3FFE' ; Oscilador HS
- _RC_OSC EQU H'3FFF' ; Oscilador RC
- __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
- ;**************************************************************
- ;STATUS equ 0x03 ; Aquí le asignamos nombres a los
- ;TRISA equ 0x05 ; registros indicando la posición
- ;PORTA equ 0x05
- ;TRISB equ 0x06 ; en la que se encuentran
- TXREG EQU 0x0D ; Registro de transmisión
- BITS EQU 0x0E ; Número de bits de datos
- CNTMSEC EQU 0x0F ; Número de milisegundos de retardo
- ;**************************************************************
- ORG 0 ;Comando que indica al Ensamblador
- ;la dirección de la memoria de programa
- ;donde situar la siguiente instrucción
- ;**************************************************************
- INICIO
- BSF STATUS,RP0 ; Activa el banco de memoria 1.
- MOVLW 0 ; son salidas
- MOVWF TRISA ; en el puerto A
- MOVLW 0XFF ; SON ENTRADAS
- MOVWF TRISB ; EN EL PUERTO B
- BCF STATUS,RP0 ; Activa el banco de memoria 0.
- BSF PORTA,0 ; ponemos a nivel alto la salida serie. Línea en reposo.
- MOVLW 0xC8 ; retardo de 200 msec.
- CALL NMSEC ; para que no afecten las fluctuaciones del encendido
- MOVF TRISB,0 ; Cargo w con el valor del puerto B
- CALL OUTCH ; llama a la rutina de comunicación serie
- MOVLW 0X0D ;
- CALL OUTCH ;
- MOVLW 0X0A ;
- CALL OUTCH ;
- MOVLW 0X00 ;
- CALL OUTCH ;
- DATO NOP
- GOTO DATO ; nos quedamos aqui, en un bucle infinito
- ;**************************************************************
- OUTCH
- MOVWF TXREG ; coloca W en el registro de transmisión
- MOVLW 8 ; 8 bits de datos serán transmitidos
- MOVWF BITS ; BITS es un contador para los bits
- BCF PORTA,0 ; bit de inicio en la salida serie (activo a nivel bajo)
- TXLOOP
- MOVLW 0x31 ; Retardo de 196 microsegundos 31h = 49d
- CALL MIC4 ; 49 x 4 = 196 microsegundos
- RRF TXREG, f ; rotamos a la derecha el bit en el acarreo
- BTFSC STATUS, C ; si el acarreo es 0 saltamos y ponemos la línea a nivel bajo
- GOTO SETUNO ; si no, ponemos la línea a nivel alto
- SETCERO
- BCF PORTA,0 ; Ponemos la salida serie a nivel bajo (transmitir un 0)
- GOTO TDONE ; Comprobar si se han transmitido todos los bits de TXREG
- SETUNO
- BSF PORTA,0 ; Ponemos la salida serie a nivel alto (transmitir un 1)
- NOP ; pasamos a probar si acabamos, directamente
- TDONE
- DECFSZ BITS, f ; se decrementa BITS por el bit transmitido y salta cuando llega a cero
- GOTO TXLOOP ; quedan más bits, vamos a transmitir el siguiente
- MOVLW 0x34 ; Retardo de 208 microsegundos 34h = 52d
- CALL MIC4 ; 52 x 4 = 208 microsegundos para el último bit de datos que queda
- BSF PORTA,0 ; Salida serie a nivel alto para el bit de stop
- MOVLW 0x68 ; retardo de 104 x 4 microsegundos 68h = 104d
- CALL MIC4 ; 104 x 4 = 416 microsegundos para dos bits de parada
- RETURN
- ;**************************************************************
- NMSEC
- MOVWF CNTMSEC ; mueve W al registro msec
- MSLOOP
- MOVLW 0xF8 ; cuenta 8 microsegundos por encima
- CALL MIC4 ; 248 * 4 + 2 = 994
- NOP ; realiza el resto del bucle
- NOP ; añade 6 microsegundos
- DECFSZ CNTMSEC, f ; decrementa el contador y salta cuando llega a cero
- GOTO MSLOOP ; vuelve a realizar el bucle
- RETURN
- ;**************************************************************
- MIC4
- ADDLW 0xFF ; substrae 1 de W
- BTFSS STATUS,Z ; salta cuando llega a cero
- GOTO MIC4 ; si no llega a cero vuelve a restar
- RETURN
- ;**************************************************************
- END
- INICIO
- BSF STATUS,RP0 ; Activa el banco de memoria 1.
- MOVLW 0 ; son salidas
- MOVWF TRISA ; en el puerto A
- MOVLW 0XFF ; SON ENTRADAS
- MOVWF TRISB ; EN EL PUERTO B
- BCF STATUS,RP0 ; Activa el banco de memoria 0.
- BSF PORTA,0 ; ponemos a nivel alto la salida serie. Línea en reposo.
- MOVLW 0xC8 ; retardo de 200 msec.
- CALL NMSEC ; para que no afecten las fluctuaciones del encendido
- MOVF TRISB,0 ; Pone en el registro de trabajo "0x86"
- CALL OUTCH ; llama a la rutina de comunicación serie y envia al puerto el valor del registro de trabajo.
- MOVLW 0X0D ; Retorno de Carro
- CALL OUTCH ;
- MOVLW 0X0A ; Nueva Linea
- CALL OUTCH ;
- MOVLW 0X00 ; Final del Mensaje
- CALL OUTCH ;
Add Comment
Please, Sign In to add comment