'######################################################## ' Programa de movimento do motor de passo ' ' Utiliza a porta paralela para controle ' ' CKS--FCF-2006 '######################################################## ' Variaveis comuns aos diversos blocos COMMON SHARED pdata%, Control%, p.Hex% ' Posicionador COMMON SHARED pos.zero%, pos.atual% ' Inicializacao de Variaiveis '########################################################## ' Detecta Porta Paralela CLS DEF SEG = 0 pdata% = PEEK(&H408) + PEEK(&H409) * 256 IF pdata% = 0 THEN PRINT "Nao encontrada" STOP END IF ' Fim da detecção ' Reseta a Saida de dados da porta paralela ' para evitar movimento ou travamento do motor ' assim como eventuais choques e curto-circuitos OUT pdata%, &H0 ' Le a palavra de status da impressora ' Especificamente no pino 12 (paper out) ' 0 --> significa fora do zero (chaves nao pressionadas) ' 1 --> significa no zero (uma das chaves acionada) psta% = pdata% + 1 pos.zero% = (INP(psta%) AND (&H20)) / &H20 pos.atual% = 1 PRINT "Para avancar o motor, digite 1; para retroceder, digite 2" INPUT Control% PRINT "" PRINT "Quantos passos o motor de passo deve dar" INPUT passos% IF passos% < 0 THEN steps% = passos% * -1 ELSEIF passos% > 0 THEN steps% = passos% ELSE PRINT "Numero nulo de passos, assim o motor nao vai andar" END IF PRINT steps% Num.step% = SQR(steps%) 'Retrocede o motor de passo IF Control% = 2 THEN j = 1 DO WHILE NOT ((pos.zero% = 1) OR (j = Num.step%)) j = j + 1 p = pos.atual% - 1 IF p < 1 THEN p = 8 FOR i = 1 TO 5000: NEXT SELECT CASE p CASE 1 p.Hex% = &H18 CASE 2 p.Hex% = &H1C CASE 3 p.Hex% = &H14 CASE 4 p.Hex% = &H16 CASE 5 p.Hex% = &H12 CASE 6 p.Hex% = &H13 CASE 7 p.Hex% = &H11 CASE 8 p.Hex% = &H19 END SELECT OUT pdata%, p.Hex% pos.atual% = p psta% = pdata% + 1 pos.zero% = (INP(psta%) AND (&H20)) / &H20 LOOP OUT pdata%, &H0 ELSEIF Control% = 1 THEN 'Avanca o motor de passo j = 1 DO WHILE NOT ((pos.zero% = 1) OR (j = Num.step%)) j = j + 1 p = pos.atual% + 1 IF p > 8 THEN p = 1 FOR i = 1 TO 5000: NEXT SELECT CASE p CASE 1 p.Hex% = &H18 CASE 2 p.Hex% = &H1C CASE 3 p.Hex% = &H14 CASE 4 p.Hex% = &H16 CASE 5 p.Hex% = &H12 CASE 6 p.Hex% = &H13 CASE 7 p.Hex% = &H11 CASE 8 p.Hex% = &H19 END SELECT OUT pdata%, p.Hex% pos.atual% = p psta% = pdata% + 1 pos.zero% = (INP(psta%) AND (&H20)) / &H20 LOOP OUT pdata%, &H0 ELSE PRINT "voce nao digitou uma opcao valida, por favor, reinicie o programa" END IF OUT pdata%, &H0