Vending

PROGRAMA PARA CONTROLAR UN MOTOR UNIPOLAR PASO A PASO CON UN PIC 16F877

; Declaración de variables
cblock 0x20
Count1 ; Contador Delay
Count2 ; Contador Delayendc
; Declare constants
WaitTime equ d’50’ ; Espera 50 msec entre steps
Position1 equ b’1010′ ; Valores de la Salida digital para 1er step
Position2 equb’1001′ ; Valores de la Salida digital para 2do step
Position3 equ b’0101′ ; Valores de la Salida digital para 3er step
Position4 equ b’0110′ ; Valores de la Salida digitalpara 4to step
;**************** Inicio del Programa ***********************
org 0 ; Vector de Reset
nop ; nop para Microchip’s In-Circuit Debugger (ICD);**************** Initialization *********************
banksel TRISA
movlw 0xC0
movwf TRISA ; Coloca bits 0-3 todas como Salidas en PortA
movlwb’00000110′ ; Configura Port A como digital
movwf ADCON1
banksel PORTA ; Regreso al Bank 0
clrf Count1 ; Borra Contador
clrf Count2 ; BorraContador
movlw Position1 ; Comenzar motor in Posición 1
movwf PORTA
;******************** Motor drive *********************
Drive
movlw WaitTime; Inicializa WaitTime a Count1
movwf Count1
Loop call Timer ; Espera 1 msec
decfsz Count1, f ; Decrementa Count1. Count1 = 0 ?
goto Loop ; No –Mantente esperando
movf PORTA, w ; Leer la posición presente
sublw Position1
bnz Drive1
movlw Position2 ; En la Posición1 – step a la Posición2movwf PORTA
goto Drive ; otro Step
Drive1
movf PORTA, w ; Leer la posición actual
sublw Position4
bnz Drive2
movlw…