;############################################################# ; Fichero : emisor.asm ; Autor : Felix Gomez-Arevalillo Blazquez. ; Fecha: FEBRERO 2002. ; Version:1.2 ; Sistema RAD-MICROS. ; Placa Microcontroladora: N/A. ; Placa de Aplicaciones: N/A. ; Placa de programacion: Programador Superpro Z. ( XELTEK ) ; Bus: Tx/Rx. ; Codigo para: PIC16F84 ; Clock: 4MHz , XT. -> Ciclo = 1 uS. ; Reset: Power On Reset. ; Watch dog: Inhabilitado. ; Proteccion de codigo: Inhabilitado. ; Ficheros requeridos: H16f84a.inc ; Funcion : Controla emisor de radiomando. ;############################################################# LIST p=PIC16F84 ; Directiva para definir micro. #include ; Fichero standard de cabecera. __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;#################### DEFINICIONES ########################### w_temp EQU 0x0C ; Variable para guardar W. status_temp EQU 0x0D ; Variable para guardar STATUS. conta1 EQU 0x0E ; Variable para el contador de retraso de la emision. conta2 EQU 0x0F ; Variable para el contador de retraso de la emision. ;################ COMIENZO DEL PROGRAMA ##################### ORG 0x00 ; Vector de Reset. GOTO inicio ; Programa Principal. ;########## TRATAMIENTO DE INTERRUPCIONES #################### ORG 0x04 ; Vector de interrupcion. MOVWF w_temp ; Guarda W. MOVF STATUS,W MOVWF status_temp ; Guarda STATUS. BCF INTCON,GIE ; Desactivamos el Permiso Global de interrupciones (GIE). BTFSC PORTB,7 ; Testeo el pin RB7. CALL Emision_s3 ; Me pasa a la rutina de Emision_s3. BTFSC PORTB,6 ; Testeo el pin RB6. CALL Emision_s2 ; Me pasa a la rutina de Emision_s2. BTFSC PORTB,5 ; Testeo el pin RB5. CALL Emision_s1 ; Me pasa a la rutina de Emision_s1. BTFSC PORTB,4 ; Testeo el pin RB4. CALL Emision_s0 ; Me pasa a la rutina de Emision_s0. salir MOVF status_temp,W ; Registro temporal de STATUS a W. MOVWF STATUS ; Recupera STATUS. SWAPF w_temp,F SWAPF w_temp,W ; Recupera W. BSF INTCON,GIE ; Activamos el Permiso Global de interrupciones (GIE). BSF INTCON,RBIE ; Activamos la interrupcion RB7:RB4 BCF INTCON,RBIF ; Bajamos Bandera RBIF y aseguramos que el flag INTF esta a 0. RETFIE ; Retorno de interrupcion. ;########## FIN DE TRATAMIENTO DE INTERRUPCIONES ############# ;################ PROGRAMA PRINCIPAL ######################### inicio BSF STATUS,RP0 ; Banco 1. MOVLW 0X00 ; Valor de inicialiazacion del puerto A. MOVWF TRISA ; Puerto A cofigurado como salida. MOVLW 0XF0 ; Valor de inicializacion del puerto B. MOVWF TRISB ; Puerto B configurado como entrada. BCF OPTION_REG,INTEDG; Interrupcion por flanco de bajada. BCF STATUS,RP0 ; Banco 0. BCF PORTA,1 ; RA1=0 para preparar la emision. GOTO inicio ; Vuelvo a inicializar. ;############### FIN DE PROGRAMA PRINCIPAL ################## ;#################### RUTINAS ############################### ;************************************************************ ; RUTINA: Emision_s3 ; Funcion: procede a la emision de la informacion ; Entrada: no ; Salida: no ; Variables utilizadas: ;************************************************************ Emision_s3 BSF PORTA,0 ; Conecta el emisor. CALL start ; Bits de comienzo de emision. CALL bit_0 ; Envia un 0. CALL bit_1 ; Envia un 1. CALL bit_1 ; Envia un 1. CALL bit_1 ; Envia un 1. RETURN ;************************************************************ ; FIN DE RUTINA:Emision_s3 ;************************************************************ ;************************************************************ ;************************************************************ ; RUTINA: Emision_s2 ; Funcion: procede a la emision de la informacion ; Entrada: no ; Salida: no ; Variables utilizadas: ;************************************************************ Emision_s2 BSF PORTA,0 ; Conecta el emisor. CALL start ; Bits de comienzo de emision. CALL bit_1 ; Envia un 1. CALL bit_0 ; Envia un 0. CALL bit_1 ; Envia un 1. CALL bit_1 ; Envia un 1. RETURN ;************************************************************ ; FIN DE RUTINA:Emision_s2 ;************************************************************ ;************************************************************ ;************************************************************ ; RUTINA: Emision_s1 ; Funcion: procede a la emision de la informacion ; Entrada: no ; Salida: no ; Variables utilizadas: ;************************************************************ Emision_s1 BSF PORTA,0 ; Conecta el emisor. CALL start ; Bits de comienzo de emision. CALL bit_1 ; Envia un 1. CALL bit_1 ; Envia un 1. CALL bit_0 ; Envia un 0. CALL bit_1 ; Envia un 1. RETURN ;************************************************************ ; FIN DE RUTINA:Emision_s1 ;************************************************************ ;************************************************************ ;************************************************************ ; RUTINA: Emision_s0 ; Funcion: procede a la emision de la informacion ; Entrada: no ; Salida: no ; Variables utilizadas: ;************************************************************ Emision_s0 BSF PORTA,0 ; Conecta el emisor. CALL start ; Bits de comienzo de emision. CALL bit_1 ; Envia un 1. CALL bit_1 ; Envia un 1. CALL bit_1 ; Envia un 1. CALL bit_0 ; Envia un 0. RETURN ;************************************************************ ; FIN DE RUTINA:Emision_s0 ;************************************************************ ;************************************************************ ;************************************************************ ; RUTINA:delay ; Funcion:retraso para el envio de cada bit ; Entrada:nada ; Salida:nada ; Variables utilizadas:conta1, conta2. ;************************************************************ delay MOVLW .6 ; Retraso de 0,890 msegs. MOVWF conta1 delay_loop1 MOVLW .10 MOVWF conta2 delay_loop DECFSZ conta2,f GOTO delay_loop DECFSZ conta1,f GOTO delay_loop1 RETURN ;************************************************************ ; FIN DE RUTINA:delay ;************************************************************ ;************************************************************ ;************************************************************ ; RUTINA: bit_1 ; Funcion: Genera un flanco de subida = 1. ; Entrada: no ; Salida: no ; Variables utilizadas: ;************************************************************ bit_1 BCF PORTA,1 ; Iniciamos un nivel bajo. CALL delay ; Lo mantenemos 890 usegs. BSF PORTA,1 ; Iniciamos un nivel alto. CALL delay ; Lo mantenemos 890 usegs. RETURN ;************************************************************ ; FIN DE RUTINA: bit_1 ;************************************************************ ;************************************************************ ;************************************************************ ; RUTINA: bit_0 ; Funcion: Genera un flanco de bajada = 0. ; Entrada: no ; Salida: no ; Variables utilizadas: ;************************************************************ bit_0 BSF PORTA,1 ; Iniciamos un nivel alto. CALL delay ; Lo mantenemos 890 usegs. BCF PORTA,1 ; Iniciamos un nivel bajo. CALL delay ; Lo mantenemos 890 usegs. RETURN ;************************************************************ ; FIN DE RUTINA: bit_0 ;************************************************************ ;************************************************************ ;************************************************************ ; RUTINA: start ; Funcion: Envia los bits de inicio para establecer la comunicacion. ; Entrada: no ; Salida: no ; Variables utilizadas: ;************************************************************ start CALL bit_1 CALL bit_1 RETURN ;************************************************************ ; FIN DE RUTINA: start ;************************************************************ ;************************************************************ ;################## FIN DE PROGRAMA ######################## END ; Fin de programa.