Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Poliestireno en 06 de Octubre de 2008, 16:13:01
Título: Control Motor Pap
Publicado por: Poliestireno en 06 de Octubre de 2008, 16:13:01
Hola amigos:
Necesito vuestra ayuda, entiendo algo en assembler, pero muy poco. Estoy modificando el siguiente programa, que no es mio, para añadir por los puertos rb3 y rb4 don finales de carrera, me gustaria que le echaran un vistazo a ver si estoy bien encaminado. Gracias de antemano.
btfsc portb,rb1 ;RB1(stop key) = ON ? goto check1 ;No. Next clrf mode ;Yes. Set stop mode goto drive ;No. Jump to motor drive
check1 btfsc portb,rb2 ;RB2(right key) = ON ? goto check2 ;No. Next movlw d'1' ;Yes. Set right mode movwf mode ;Save mode goto drive ;No. Jump to motor drive check2 btfsc portb,rb0 ;RB0(left key) = ON ? goto drive ;No. Jump to motor drive movlw d'2' ;Yes. Set left mode movwf mode ;Save mode
;******************** Motor drive ********************* drive movf mode,w ;Read mode bz start ;mode = stop bsf portb,rb7 ;Set RB7 = 1 btfsc portb,rb5 ;RB5 = 0 ? goto $-1 ;No. Wait movlw d'5' ;Set loop count(5msec) movwf count1 ;Save loop count loop call timer ;Wait 1msec decfsz count1,f ;count - 1 = 0 ? goto loop ;No. Continue bcf portb,rb7 ;Set RB7 = 0 btfss portb,rb5 ;RB5 = 1 ? goto $-1 ;No. Wait movf porta,w ;Read PORTA sublw b'000000101' ;Check motor position bnz drive2 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive1 ;Yes. Right movlw b'00001001' ;No. Set Left data goto drive_end ;Jump to PORTA write drive1 movlw b'00000110' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive2 movf porta,w ;Read PORTA sublw b'000000110' ;Check motor position bnz drive4 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive3 ;Yes. Right movlw b'00000101' ;No. Set Left data goto drive_end ;Jump to PORTA write drive3 movlw b'00001010' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive4 movf porta,w ;Read PORTA sublw b'000001010' ;Check motor position bnz drive6 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive5 ;Yes. Right movlw b'00000110' ;No. Set Left data goto drive_end ;Jump to PORTA write drive5 movlw b'00001001' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive6 movf porta,w ;Read PORTA sublw b'000001001' ;Check motor position bnz drive8 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive7 ;Yes. Right movlw b'00001010' ;No. Set Left data goto drive_end ;Jump to PORTA write drive7 movlw b'00000101' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive8 movlw b'00000101' ;Compulsion setting
drive_end movwf porta ;Write PORTA goto start ;Jump to start
;******************************************************** ; END of Stepper Motor controller ;********************************************************
end
Título: Re: Control Motor Pap
Publicado por: todopic en 06 de Octubre de 2008, 21:44:10
Código: ASM
btfsc portb,rb3 ;Izquierda Parar #### Modificado
goto continua1 #### Modificado
clrf mode #### Modificado
continua1 #### Modificado
btfsc portb,rb4 ;Derecha Parar #### Modificado
goto continua2 #### Modificado
clrf mode
continua2 #### Modificado
Hola, he leido rapidamente tu correccion, y por lo que veo, solo si esta o no pulsado el fin de carrera, el programa seguira corriendo igual, pero en un caso borra MODE y en otro no... y esto no me parece que sea lo que estas buscando....
ademas, me parece que empleando tablas para las salidas, seria mucho mas simple...
Norberto
Título: Re: Control Motor Pap
Publicado por: Poliestireno en 07 de Octubre de 2008, 05:16:54
Gracias por contestar, voy a comprar los componentes y montarlo en protoboard, creo que no va a funcionar como deberia, voy a intentar desarrollarlo mejor. Voy a echarle un vistazo a lo de las tablas, a ver si en mas sencillo...