Skip to content

Instantly share code, notes, and snippets.

@davidae1704
Created November 15, 2013 15:44
Show Gist options
  • Save davidae1704/7486404 to your computer and use it in GitHub Desktop.
Save davidae1704/7486404 to your computer and use it in GitHub Desktop.
codigo de guia 11
;***************************************************************************************
; Cálculos
;***************************************************************************************
; X: Condición no importa
; Baud rate = 8000000/(16 (51 + 1))
; = 9615.3846 = 9615
; Error = (Baud Rate calculado - Baud Rate deseado)/Baud Rate deseado
; = (9615 - 9600)/9600 = 0.16%
title "PIC18F4550 Comunicación serie"
List p=18F4550;Tipo de procesador
include "p18F4550.INC" ;Incluye archivo de cabecera
;con los símbolos del PIC utilizado.
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 0x0F
movwf ADCON1 ;Configura PORTA como puerto digital
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_switchs
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_switchs
movf PORTD,W ;Lee el dato de los interruptores del puerto D
movwf TXREG ;Envía el dato al buffer de transmisión
movwf Dato ;También lo mueve 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
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
call Msg1 ; de la tabla al inicio del código
movwf Char
movf Char,W ; final del mensaje 0x00?
btfsc STATUS,2
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
@davidae1704
Copy link
Author

modificar el programa segun las especificaciones del desafio corto.
Desafío corto:
Realice un programa para el PIC18F4550 que muestre el valor de una variable analógica en
V o mV (según sea su elección), que se imprima en el Terminal, en uno de los dos casos
propuestos:
a. Cuando se presione un push-button.
b. Imprimir el valor instantáneo, pero si éste varía del último valor enviado entonces imprimir
el valor actual.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment