;************************************************************************************************* ; TESTA_SERVO.ASM ; TESTADOR DE SERVO CONTROLE (PADRÃO PPM - 1MS A 2 MS) ; MICROCONTROLADOR 12F675 OU 629 ; APERTANDO O BOTÃO 'AUMENTAR' IRÁ AUMENTAR O PERIODO DO PULSO ; E DESLOCAR BRAÇO DO SERVO EM SENTIDO HORÁRIO ATÉ O MÁXIMO. ; APERTANDO O BOTÃO 'DIMINUIR' IRÁ DIMINUIR O PERIODO DO PULSO ; E DESLOCAR O BRAÇO EM SENTIDO ANTI-HORÁRIO ATÉ O MÍNIMO. ; SAIDA NO PINO 5 P/SERVO ; BOTÃO PARA REDUZIR NO PINO 2 A MASSA ; BOTÃO PARA AUMENTAR NO PINO 3 A MASSA ; AUTOR:CLAUDIO LÁRIOS ; INICIO: 13-09-2013 TERMINO:13-09-2013 ; ; APENAS PARA USO DIDÁTICO. ;************************************************************************************************* ;************************************************************************************************* ; DESCOMENTAR/COMENTAR CONFORME MODELO ESCOLHIDO #DEFINE F675 ;PARA PIC 12F675 ;#DEFINE F629 ;PARA PIC 12F629 ;************************************************************************************************* IFDEF F629 LIST P=12f629 , R=DEC INCLUDE "P12F629.INC" ENDIF IFDEF F675 LIST P=12f675 , R=DEC INCLUDE "P12F675.INC" ENDIF ;-------------------------- ERRORLEVEL -302 __CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_ON & _MCLRE_ON ;BANCOS #DEFINE BANK0 BCF STATUS,RP0 ;SETA BANK0 DE MEMORIA #DEFINE BANK1 BSF STATUS,RP0 ;SETA BANK1 #DEFINE TP FLAGS,1 ;FLAG TP #DEFINE TPK FLAGS,2 ;FLAG TPK #DEFINE TPR FLAGS,3 ;FLAG TPR #DEFINE OUT GPIO,2 ;SAÍDA PWM ;EQUATES C_VEL EQU .1 ;VELOCIDADE DE AUMENTO/DIMINUIÇÃO ;AO APERTAR AS TECLAS ;RAM CBLOCK 0X20 FLAGS,TEMP,VALOR,CONT,CNT,CNT1,VEL ENDC ;************************************************************************** ; RESET ;************************************************************************** ORG 0X00 GOTO START ;************************************************************************** ; ROTINAS DE INTERRUPÇÕES ;************************************************************************** ORG 0X04 RETFIE ;************************************************************************** ; INICIO DO PROGRAMA ;************************************************************************** START: BANK1 CALL 0X03FF MOVWF OSCCAL MOVLW B'111011' ;GP2=SAIDA MOVWF TRISIO MOVLW B'00000001' ;TMR0/4 MOVWF OPTION_REG ;AJUSTA TMR0 PARA / BSF WPU,5 ;LIGA PULLUP PINO 2 BSF WPU,4 ;LIGA PULLUP PINO 3 IFDEF F675 CLRF ANSEL ;LIBERA PORTAS DO AD (somente 12f675) ENDIF BANK0 MOVLW 0X07 MOVWF CMCON ;DESLIGA COMPARADORES CLRF GPIO ; RESET PORT CLRF FLAGS ;APAGA REGISTRADOR DE FLAGS CLRF INTCON CLRF VALOR INCF VALOR,F MOVLW C_VEL MOVWF VEL ;====================================================================================================== ; ROTINA PRINCIPAL (LOOP PRINCIPAL) ;====================================================================================================== MAIN BTFSC TP ;TESTA SE JÁ ESTÁ GERANDO PERIODO DE 1MS GOTO TEMPO_1MS ;SIM, ENTÃO VAI VERIFICAR SE JÁ ACABOU BSF OUT ;LIGA SAIDA GOTO SAI_G ;====================================================================================================== ; PRIMEIRA ETAPA: SETA TIMER0 COM VALOR PARA GERAR 1 MS (TEMPO MÍNIMO) ;====================================================================================================== SAI_G MOVLW .10 MOVWF TMR0 BCF INTCON,T0IF ;APAGA FLAG BSF TP GOTO TIME_DELAY ;====================================================================================================== ; SEGUNDA ETAPA: TESTA SE JÁ ACABOU O TEMPO DE 1 MS ;====================================================================================================== TEMPO_1MS BTFSC TPK GOTO TEMPO_REG BTFSC INTCON,T0IF BSF TPK GOTO TIME_DELAY ;====================================================================================================== ; TERCEIRA ETAPA: SETA TIMER COM CONTEUDO DE 'VALOR' ;====================================================================================================== TEMPO_REG BTFSC TPR GOTO REG_TIME_TESTE COMF VALOR,W MOVWF TMR0 BCF INTCON,T0IF BSF TPR GOTO TIME_DELAY ;====================================================================================================== ; QUARTA ETAPA: TESTA SE ACABOU O TEMPO CARREGADO ;====================================================================================================== REG_TIME_TESTE BTFSC INTCON,T0IF GOTO FINALIZA_TEMPO GOTO TIME_DELAY ;====================================================================================================== ; QUINTA ETAPA: FINALIZA O PULSO E REINICIA FLAGS ;====================================================================================================== FINALIZA_TEMPO BCF OUT ;DESLIGA A SAIDA BCF TP BCF TPK BCF TPR DECFSZ VEL,F GOTO PUL1 MOVLW C_VEL MOVWF VEL CALL TESTAR_CHAVES ;====================================================================================================== ; ROTINA DE TEMPO DE INTERVALO (18 A 20 MS) ;====================================================================================================== PUL1 MOVLW .18 MOVWF CNT1 LOOPX1 MOVLW .250 MOVWF CNT NOP DECFSZ CNT,F GOTO $-2 DECFSZ CNT1,F GOTO LOOPX1 GOTO MAIN TIME_DELAY GOTO MAIN ;====================================================================================================== ; ROTINA DE TESTE DE CHAVES APERTADAS ;====================================================================================================== TESTAR_CHAVES BTFSC GPIO,5 ;DIMINUIR GOTO OUT_B DECFSZ VALOR,F GOTO OUT_B INCF VALOR,F GOTO OUT_B OUT_B BTFSC GPIO,4 ;AUMENTAR GOTO GERAR_PPM INCFSZ VALOR,F GOTO GERAR_PPM DECFSZ VALOR,F GOTO GERAR_PPM GERAR_PPM RETURN ;====================================================================================================== ; FIM DO PROGRAMA ;====================================================================================================== END