MATERIALES UTILIZADOS
Microcontrolador PIC 16F877A
1 Motor paso a paso
2 LEDs
2 Pulsadores
1 Cristal de 4MHz
2 Condensadores de 22pF
4 Resistencias de 220 O
2 Resistencias de 1KO
1 Fuente dual DC
Protoboard
PROGRAMA CONTROL DE MOTOR PASO A PASO CON RETARDO
PORTB EQU H'0006'
PORTC EQU H'0007'
STATUS EQU H'0003'
TRISA EQU H'0085'
TRISB EQU H'0086'
TRISC EQU H'0087'
TRISD EQU H'0088'
TRISE EQU H'0089'
REG1 EQU 0CH
REG2 EQU 0DH
2 Se definen los bits a utilizar:
BIT0 EQU 00H
BIT1 EQU 01H
BIT2 EQU 02H
BIT3 EQU 03H
BIT4 EQU 04H
BIT5 EQU 05H
BIT6 EQU 06H
3. Se inicia el programa. Configuramos los puertos como entrada o salida: El puerto B se configura como salida de datos, el puerto C como entrada y salida, y los puertos A, D y E como salidas para evitar interferencias.
ORG 00H ;Inicio del programa
BSF STATUS, RP0 ;Colocamos un 1 en el bit RP0 del registro STATUS
ORG 05H
MOVLW 00H ;Cargamos con FFH el registro de trabajo W
MOVWF TRISA ;Cargamos TRISA con lo que hay en W
MOVWF TRISB ;Cargamos TRISB con lo que hay en W
MOVWF TRISD ;Cargamos TRISD con lo que hay en W
MOVWF TRISE ;Cargamos TRISE con lo que hay en W
MOVLW 03H ;Cargamos con 03H el registro de trabajo W
MOVWF TRISC ;Cargamos TRISC con lo que hay en W
BCF STATUS, RP0 ;Colocamos un 0 en el bit RP0 del registro STATUS
4. La parte de control: Se utilizan los bits 0 y 1 del puerto C como entrada de datos, por medio de dos pulsadores que enviarán 0 cada vez que sean oprimidos.
BTFSS PORTC, BIT0 ;Revisa el bit 0 del puerto C, si es 0 siga, si es 1 salte.
GOTO SEC1 ;Vaya a la secuencia 1
BTFSS PORTC, BIT1 ;Revisa el bit 1 del puerto C, si es 0 siga, si es 1 salte
GOTO SEC2 ;Vaya a la secuencia 2
GOTO INICIO ;Vaya a INICIO
5. Secuencias:
SEC1 BSF PORTC, BIT2 ;Coloca un 1 en el bit 2 del puerto C
CALL TIEMPO ;Llama a la rutina tiempo.
MOVLW 08H ;Carga con 08H el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
MOVLW 0CH ;Carga con 0CH el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
MOVLW 04H ;Carga con 04H el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
MOVLW 06H ;Carga con 06H el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
MOVLW 02H ;Carga con 02H el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
MOVLW 03H ;Carga con 03H el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
MOVLW 09H ;Carga con 09H el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
BCF PORTC, BIT2 ;Coloca un 0 en el bit 2 del puerto C
GOTO INICIO ;Vaya a INICIO
SEC2 BSF PORTC, BIT3 ;Coloca un 1 en el bit 3 del puerto C
CALL TIEMPO ;Llama a la rutina tiempo.
MOVLW 09H ;Carga con 09H el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
MOVLW 03H ;Carga con 03H el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
MOVLW 02H ;Carga con 02H el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
MOVLW 06H ;Carga con 06H el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
MOVLW 04H ;Carga con 04H el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
MOVLW 0CH ;Carga con 0CH el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
MOVLW 08H ;Carga con 08H el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
MOVLW 09H ;Carga con 09H el registro W
MOVWF PORTB ;Carga el puerto B lo que hay en W
CALL TIEMPO ;Llama a la rutina tiempo
BCF PORTC, BIT3 ;Coloca un 0 en el bit 3 del puerto C
GOTO INICIO ;Vaya a INICIO
6. Rutina de tiempo:
TIEMPO MOVLW 0FFH ;Carga con FFH el registro W
MOVWF REG1 ;Carga REG1 con lo que hay en W
CARGA2 MOVLW 6CH ;Carga con 06H el registro W
MOVWF REG2 ;Carga REG2 con lo que hay en W
DREG2 DECFSZ REG2, 1 ;Decrementa el valor que este en REG2 y el resultado lo deja en el mismo registro
GOTO DREG2 ;Vaya a DREG2
DECFSZ REG1, 1 ;Decrementa el valor que este en REG2 y el resultado lo deja en el mismo registro
GOTO CARGA2 ;Vaya a CARGA2
RETLW 0 ;Finaliza el llamado y continua donde fue llamada la instrucción.
7. Fin del programa:
END Fin
ALGORITMO
Al conectar el circuito, el motor se mantiene apagado hasta que se oprime uno de los dos pulsadores. El pulsador conectado al bit 0 del puerto C hace que el motor realice un giro completo a la derecha y enciende un LED, y el otro pulsador hace que el motor realice un giro completo a la izquierda y enciende otro LED. Si se deja oprimido el pulsador el motor continua girando.
Autor:
Nadia Villa
Página anterior | Volver al principio del trabajo | Página siguiente |