Created
November 20, 2013 19:38
-
-
Save jerivas/7569607 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;Muestra en el puerto serial el valoar analógico leído al presionar el boton | |
title "PIC18F4550 Valor analógico por comunicación serie" | |
list p=18F4550 ;Tipo de procesador | |
#include <p18f4550.inc> ;Incluye archivo de cabecera del PIC | |
CONFIG FOSC = INTOSCIO_EC | |
CONFIG WDT = OFF | |
CONFIG PBADEN = OFF | |
CONFIG MCLRE = ON | |
CONFIG DEBUG = ON | |
CONFIG LVP = OFF | |
CBLOCK 0x20 ;Bloque de variables de datos en memoria de programa | |
Dato | |
Char ; Variable de conteo de datos en blanco. | |
Cont_char ; Variable que apunta los caracteres. | |
var50us ; Contador de 50 microsegundos | |
var10ms ; Contador para 10 ms | |
var600ms ; Variable de 600 ms para retardos | |
ENDC | |
;******************************************************** | |
org 0x00 ;Vector de Reset para el programa principal | |
goto Inicio | |
org 0x08 ;Vector de rutina de servicio | |
goto inttim | |
;******************************************************** | |
; Cadenas de Mensajes | |
ORG 0x20 | |
Msg1: | |
addwf PCL,1 ; Salto indexado, sumar al PC lo que tenga w | |
DT "************************",0x0D,0x0A | |
DT " Universidad Don Bosco",0x0D,0x0A | |
DT "***********************",0x0D,0x0A | |
DT "Escriba caracteres ASCII:_",0x0D,0x0A,0x00 | |
;********************************************************* | |
ORG 0x150 | |
Inicio: | |
bsf OSCCON,6 ;Divisor de preescala | |
bsf OSCCON,5 ;fosc= 8Mhz | |
bsf OSCCON,4 | |
clrf PORTC | |
movlw 0xB0 ; Tx Rx | |
movwf TRISC ; Configurar puerto C | |
clrf SPBRGH ; FOSC/[16 (n + 1)] | |
movlw 0x33 ;((8000000/9600)/16)-1 = (833.33/16)-1 = 51 | |
movwf SPBRG ; Ver página 245 del Datasheet | |
movlw 0x2C ; CSRC TX9 TXEN(1) SYNC SENDB BRGH TRMT TX9D | |
movwf TXSTA ; X 0 1 0 1 1 0 0 | |
movlw 0x90 ; SPEN RX9 SREN CREN ADDEN FERR OERR RX9D | |
movwf RCSTA ; 1 0 X 1 0 0 0 0 | |
movlw 0x00 ; ABDOVF RCIDL RXDTP TXCKP BRG16 - WUE ABDEN | |
movwf BAUDCON ; 0 0 0 0 0 X 0 0 | |
movlw B'00001110' | |
movwf ADCON1 ;Configura PORTA0 como entrada analogica | |
movlw B'10000000' | |
movwf ADCON2 ;Tiempo de adquisición 0TAD y velocidad FOSC/2 | |
bcf PIR1, ADIF ;Limpiar bandera del A/D | |
bsf PIE1, ADIE ;Habilitar interrupcion del A/D | |
bsf INTCON, PEIE ;Habilitar interrupciones perifericas | |
movlw 0x07 | |
movwf CMCON | |
movlw 0xF0 | |
movwf TRISA | |
bsf TRISB,0 ; Configura pin RB0 como entrada para pulsador. | |
movlw 0xFF | |
movwf TRISD ; Configura el puerto D como entradas digitales | |
clrf PORTC | |
clrf PORTA | |
clrf var50us ;limpia las variables necesarias para los eventos de tiempo. | |
clrf var10ms | |
clrf var600ms | |
movlw 0x64 ;Registro de período 100 | |
movwf PR2 ;100/2000000 = 50uS | |
movlw 0x04 ;Post y pre escala de 1 | |
movwf T2CON ;Configurar el Timer2 | |
bsf INTCON,GIE ;Habilitación de máscara global | |
bsf INTCON,PEIE | |
bsf PIE1,TMR2IE ;Activación máscara local T2 | |
bsf IPR1,TMR2IP ;Bit de prioridad alto | |
;******************************************************* | |
; Subrutina de control de teclado | |
Init: | |
call Mess1 | |
Init2: | |
btfsc PORTB,0 ;Detecta si hubo activación del pulsador | |
goto Lee_PC | |
clrf var50us | |
clrf var10ms | |
clrf var600ms | |
espera: | |
btfss var600ms,0 ;Retardo de 600ms | |
goto espera | |
goto Lee_ADC | |
Lee_PC: | |
btfss PIR1,RCIF ;Detecta si hubo Recepción de dato | |
goto Init2 ;Si no hubo, vuelve a leer al pulsador. | |
movf RCREG,W ; Manda a W el dato recibido | |
movwf Dato ; Lo envía a la variable “Dato” | |
andlw 0x0F ;Enmascara los bits menos significativos | |
movwf PORTA ;Envía al puerto A los bits menos significativos del dato en puerto D | |
swapf Dato,W ;Intercambia Nibbles en “Dato” y guarda en W | |
andlw 0x0F ;Enmascara los bits menos significativos | |
movwf PORTC ;Envía a puerto C | |
goto Init2 | |
Lee_ADC: | |
bsf ADCON0,GO ;Inicia la conversion A/D | |
Espera_ADC: | |
btfsc ADCON0,GO ;Se completo la conversion? | |
goto Espera_ADC ;No: Esperar al ADC | |
movf ADRESL,W ;Si: Copiar la parte baja de la conversión | |
movwf TXREG ;Enviar dato | |
andlw 0x0F ;Enmascara los bits menos significativos | |
movwf PORTA ;Envía al puerto A los bits menos significativos del dato en puerto D | |
swapf Dato,W ;Intercambia Nibbles en “Dato” y guarda en W | |
andlw 0x0F ;Enmascara los bits menos significativos | |
movwf PORTC ;Envía a puerto C | |
Tx_complete2: | |
clrf var50us | |
espera1: | |
btfss var50us,0 ;Retardo de 50us | |
goto espera1 | |
btfss TXSTA,TRMT ;Verifica si ya se terminó la transmisión | |
goto Tx_complete2 | |
goto Init2 ;Vuelve a verificar pulsador en RB0 | |
;******************************************************* | |
; Subrutinas de mensajes | |
Mess1: | |
movlw h'01' | |
movwf Cont_char | |
Other: | |
clrwdt | |
movf Cont_char, w ;Se obtienen datos ASCII de la tabla al inicio del código | |
call Msg1 | |
movwf Char | |
movf Char,W | |
btfsc STATUS,2 ;Fin del mensaje? 0x00? | |
goto Outmsg1 | |
movwf TXREG | |
Tx_complete: | |
clrwdt | |
clrf var50us | |
espera2: | |
btfss var50us,0 ;Retardo de 50us | |
goto espera2 | |
btfss TXSTA, TRMT ;Se espera a terminar la transmisión. | |
goto Tx_complete | |
incf Cont_char,F ; Se apunta nuevo carácter | |
incf Cont_char, f | |
goto Other ; Lazo hasta terminar el mensaje | |
Outmsg1: | |
return | |
;**************************************************** | |
; Rutina de servicio de interrupcion del timer 2 para retardos | |
inttim: | |
bcf INTCON,GIE ;Enmascarar interrupciones | |
btfss PIR1,TMR2IF ;Timer flag? | |
goto fin ;NO, Terminar | |
incf var50us ;Incrementamos var50us | |
movlw d'200' | |
cpfseq var50us ;Se alcanzaron 10ms? | |
goto fin ;NO salte al final | |
clrf var50us ;Limpiar la variable | |
incf var10ms ;Incrementamos var10ms | |
movlw d'60' | |
cpfseq var10ms ;Se alcanzaron 10ms? | |
goto fin ;NO salte al final | |
clrf var10ms ;Limpiar la variable | |
incf var600ms ;Incrementamos var600ms | |
fin: | |
bcf PIR1,TMR2IF ;Limpiar la bandera del timer2 | |
bsf INTCON,GIE ;Habilitación de máscara global | |
retfie | |
END |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment