;############################################################# ; Fichero : Amotor.asm ; Autor : delfinux. ; Fecha: Enero 2002. ; Version:0.0 ; Sistema RAD-MICROS. ; Placa Microcontroladora: ; Placa de Aplicaciones: ; Placa de programacion: Programador Universal Superpro Z ; Bus: . ; Codigo para: PIC16C84 y PIC16F84 ; Clock: 4MHz , XT. -> Ciclo = 1 uS. ; Reset: Power On Reset. ; Watch dog: Inhabilitado. ; Proteccion de codigo: Inhabilitado. ; Ficheros requeridos: H16f84a.inc ; Funcion : Control de velocidad de motor DC. ;############################################################# ;#################### CABEZERAS ############################## LIST p=PIC16F84A ; Directiva para definir micro. #include ; Fichero standard de cabezera. __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;#################### DEFINICIONES ########################### con1 EQU 0x0E ; Variable de temporizacion. con2 EQU 0x0F ; Variable de temporizacion. digito EQU 0x10 ; Digito de display. toff EQU 0x11 ; Variable para parar motor. ton EQU 0x12 ; Variable para activar motor. ;################ COMIENZO DEL PROGRAMA ##################### ORG 0x00 ; Vector de Reset. GOTO inicio ; Programa Principal. ;################ PROGRAMA PRINCIPAL ######################### inicio BSF STATUS,RP0 ; Banco 1 MOVLW B'00000000' MOVWF TRISB ; Configuramos I/O PORTB MOVLW B'11100001' MOVWF TRISA ; Configuramos I/O PORTA BCF STATUS,RP0 ; Banco 0 BCF PORTA,4 ; Motor parado. MOVLW 0x00 MOVWF ton ; ton = 0. MOVWF toff ; toff = 0. MOVWF digito ; digito = 0. bucle CALL display BTFSC PORTA,0 ; Pulsador de VELOCIDAD ? GOTO sigue CALL delay_r ; Eliminamos rebotes INCF digito,F MOVLW 0x0A ; Comprobamos el valor XORWF digito,W ; si digito = 10 BTFSS STATUS,Z ; GOTO sigue MOVLW 0x00 MOVWF digito ; digito = 0. sigue CALL motor GOTO bucle ;############### FIN DE PROGRAMA PRINCIPAL ################## ;###################### RUTINAS ############################# ;************************************************************ ; RUTINA: motor ; Funcion: Activa motor DC con tiempos ton y toff. ; Entrada: nada ; Salida: nada ; Variables utilizadas: ton y toff ;************************************************************ motor CLRW XORWF digito,W ; Si digito = 0 --> BTFSC STATUS,Z GOTO para_motor ; para el MOTOR. MOVLW 0x09 XORWF digito,W ; Si digito = 9 --> BTFSC STATUS,Z GOTO activa_motor ; activa el MOTOR. ; velocidad m xima MOVF digito,W ; digito <> de 0 y 9 SUBLW 0x09 MOVWF toff ; toff = 9 - digito CALL motor_off MOVF digito,W MOVWF ton ; ton = digito CALL motor_on GOTO salir_motor para_motor BCF PORTA,4 GOTO salir_motor activa_motor BSF PORTA,4 salir_motor RETURN ;************************************************************ ; FIN DE RUTINA: motor ;************************************************************ ;************************************************************ ; RUTINA: motor_on ; Funcion: Activa motor DC con tiempo ton . ; Entrada: nada ; Salida: nada ; Variables utilizadas: ton ;************************************************************ motor_on BSF PORTA,4 SWAPF ton,F ; Multiplicamos ton x 16 loop_on CALL delay DECFSZ ton,F GOTO loop_on BCF PORTA,4 RETURN ;************************************************************ ; FIN DE RUTINA: motor_on ;************************************************************ ;************************************************************ ; RUTINA: motor_off ; Funcion: Para motor DC con tiempo toff. ; Entrada: nada ; Salida: nada ; Variables utilizadas: toff ;************************************************************ motor_off BCF PORTA,4 SWAPF ton,F ; Multiplicamos toff x 16 loop_off CALL delay DECFSZ ton,F GOTO loop_off BSF PORTA,4 RETURN ;************************************************************ ; FIN DE RUTINA: motor_off ;************************************************************ ;************************************************************ ; RUTINA: display ; Funcion: Muestra informacion en displays 7 segmentos. ; Entrada: digito ; Salida: nada. ; Variables utilizadas: nada. ;************************************************************ display MOVF digito,W ; Visualizo display. CALL tabla_7seg MOVWF PORTB RETURN ;************************************************************ ; FIN DE RUTINA: display ;************************************************************ ;************************************************************ ; RUTINA: delay ; Funcion: Produce un retardo para control de MOTOR. ; Entrada: nada ; Salida: nada ; Variables utilizadas: con1, con2 ;************************************************************ delay CLRF con1 MOVLW 0x03 MOVWF con2 loop DECFSZ con1,F GOTO loop DECFSZ con2,F GOTO loop RETURN ;************************************************************ ; FIN DE RUTINA: delay ;************************************************************ ;************************************************************ ; RUTINA: tabla_7seg ; Funcion: Tabla para excitar displays de 7 segmentos A.C. ; Entrada: valor en W. ; Salida: LEDs a activar --> W. ; Variables utilizadas: nada ;************************************************************ tabla_7seg ADDWF PCL,F RETLW B'01000000' ; 0 --> LEDs -gfedcba RETLW B'01111001' ; 1 --> LEDs -gfedcba RETLW B'00100100' ; 2 --> LEDs -gfedcba RETLW B'00110000' ; 3 --> LEDs -gfedcba RETLW B'00011001' ; 4 --> LEDs -gfedcba RETLW B'00010010' ; 5 --> LEDs -gfedcba RETLW B'00000010' ; 6 --> LEDs -gfedcba RETLW B'01111000' ; 7 --> LEDs -gfedcba RETLW B'00000000' ; 8 --> LEDs -gfedcba RETLW B'00011000' ; 9 --> LEDs -gfedcba ;************************************************************ ; FIN DE RUTINA: tabla_7seg ;************************************************************ ;************************************************************ ; RUTINA: delay_r ; Funcion: Produce un retardo para evitar rebotes en PULSADORES. ; Entrada: nada ; Salida: nada ; Variables utilizadas: con1, con2 ;************************************************************ delay_r CLRF con1 MOVLW 0x01 MOVWF con2 loop_r DECFSZ con1,F GOTO loop_r DECFSZ con2,F GOTO loop_r RETURN ;************************************************************ ; FIN DE RUTINA: delay_r ;************************************************************ ;################## FIN DE RUTINAS ########################## ;################## FIN DE PROGRAMA ######################## END ; Fin de programa.