;**************************************************************************************** ;* Título: Este programa faz uso do módulo CCP. Configurando este módulo para PWM * ;* Empresa: QSP Tecnologia * ;* Web Site: www.qsptecnologia.eng.br * ;* Processador: PIC16F870 * ;* Firmware Versão: 1.0 * ;* Código: PWM.asm * ;* Autor: Eng. Daniel Quispe Marquez * ;**************************************************************************************** ;]--------------------------------------------------------------------------------------[ ; Area de includes ;]--------------------------------------------------------------------------------------[ #include ;* Arquivo padrão de inclusão ;]--------------------------------------------------------------------------------------[ ; Configurações do microcontrolador ;]--------------------------------------------------------------------------------------[ __CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_ENABLE_ON & _BODEN_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC ;]--------------------------------------------------------------------------------------[ ; Area de definições de comandos ;]--------------------------------------------------------------------------------------[ ;]--------------------------------------------------------------------------------------[ ; Definições de Entrada ;]--------------------------------------------------------------------------------------[ #DEFINE CH_0 PORTB,0 ;* A CHAVE 0 ESTÁ LIGADA NO RB0 #DEFINE CH_1 PORTB,1 ;* A CHAVE 1 ESTÁ LIGADA NO RB1 #DEFINE CH_2 PORTB,2 ;* A CHAVE 2 ESTÁ LIGADA NO RB2 #DEFINE CH_3 PORTB,3 ;* A CHAVE 3 ESTÁ LIGADA NO RB3 ;]--------------------------------------------------------------------------------------[ ; Definições de Saída ;]--------------------------------------------------------------------------------------[ #DEFINE MOTOR PORTC,2 ;* O MOTOR ESTÁ LIGADO NO RC2 - MODULO PWM ;]--------------------------------------------------------------------------------------[ ; Area de constantes ;]--------------------------------------------------------------------------------------[ ;]--------------------------------------------------------------------------------------[ ; Area de definições de memória RAM ;]--------------------------------------------------------------------------------------[ CBLOCK 0X20 ;* Endereço inicial de memória RAM do Bank0 TEMPO1 TEMPO2 ENDC ;* Fim do bloco de memória ;]--------------------------------------------------------------------------------------[ ; Area de definição de flags ;]--------------------------------------------------------------------------------------[ ;]--------------------------------------------------------------------------------------[ ; Arquivo de macros ;]--------------------------------------------------------------------------------------[ BANK0 macro RP0,RP1 ;* Seleciona bank0 bcf STATUS,RP0 ;* rp0 = 0 bcf STATUS,RP1 ;* rp1 = 0 endm ;]--------------------------------------------------------------------------------------[ BANK1 macro RP0,RP1 ;* Seleciona bank1 bsf STATUS,RP0 ;* rp0 = 1 bcf STATUS,RP1 ;* rp1 = 0 endm ;]--------------------------------------------------------------------------------------[ ; Inicio do Código ;]--------------------------------------------------------------------------------------[ ORG 0x00 ;* O programa inicia aqui GOTO INICIO ;* Pula para inicio do programa ;]--------------------------------------------------------------------------------------[ ; Area de tabelas ;]--------------------------------------------------------------------------------------[ ;]--------------------------------------------------------------------------------------[ ; Area de Subrotinas ;]--------------------------------------------------------------------------------------[ uC_CONFIG ;* SUBROTINA QUE CONFIGURA O uC CLRF PORTC BANK1 RP0,RP1 ;* SETA BANCO 1 MOVLW B'11111011' MOVWF TRISC ;* DEFINE ENTRADAS E SAÍDAS PARA O PORTC ;* RC2 - SAÍDA MOVLW .255 MOVWF PR2 ;* CONFIGURA PERIODO DO PWM ;* T = (PR2+1).4.Tosc.TMR2_PRESCALE ;* T = 256.4.250ns.16 ;* T = 4,096ms -> F244,14Hz BANK0 RP0,RP1 ;* SETA BANCO 0 MOVLW B'00000111' ;* CONFIGURA TIMER 2 MOVWF T2CON ;* TIMER2 LIGADO ;* PRESCALE = 1:16 ;* POSTSCALE = 1:1 CLRF CCPR1L ;* ZERA CCPR1L MOVLW B'00001111' ;* CONFIGURA CCP1CON PARA MODO PWM MOVWF CCP1CON ;* LIGA PWM 1 RETURN ;* RETORNA DA SUBROTINA ROT_CH0 ;* SETA CICLO ATIVO PARA 0% CLRF CCPR1L BCF CCP1CON,5 BCF CCP1CON,4 RETURN ROT_CH1 INCF CCPR1L,F ;* INCREMENTA CICLO ATIVO BCF CCP1CON,5 BCF CCP1CON,4 MOVLW .50 CALL TEMPO_01 RETURN ROT_CH2 DECF CCPR1L,F ;* DECREMENTA CICLO ATIVO BCF CCP1CON,5 BCF CCP1CON,4 MOVLW .50 CALL TEMPO_01 RETURN ROT_CH3 ;* VELOCIDADE MÁXIMA DO MOTOR MOVLW 0XFF MOVWF CCPR1L BCF CCP1CON,5 BCF CCP1CON,4 RETURN ;]------------------------------- Rotina de temporização -------------------------------[ TEMPO_01 MOVWF TEMPO2 ;* Registrador 2 que controla o tempo TMP1 MOVLW .200 MOVWF TEMPO1 TMP2 ;* 200 x 5 CICLOS = 1000 CICLOS NOP ;* 1 CICLO NOP ;* 1 CICLO DECFSZ TEMPO1,F ;* 1 CICLO GOTO TMP2 ;* 2 CICLO DECFSZ TEMPO2,F GOTO TMP1 RETURN ;* Retorna da subrotina ;]--------------------------------------------------------------------------------------[ ; Rotina principal ;]--------------------------------------------------------------------------------------[ INICIO: CALL uC_CONFIG ;* CHAMA ROTINA DE CONFIGURAÇÃO DO uC ;]--------------------------------------------------------------------------------------[ ; **** Loop principal **** ;]--------------------------------------------------------------------------------------[ LOOP BTFSS CH_0 ;* A CHAVE CH0 ESTÁ PRESSIONADA ? CALL ROT_CH0 ;* SIM, ENTÃO TRATA ROTINA DO BOTÃO. BTFSS CH_1 ;* A CHAVE CH1 ESTÁ PRESSIONADA ? CALL ROT_CH1 ;* SIM, ENTÃO TRATA ROTINA DO BOTÃO. BTFSS CH_2 ;* A CHAVE CH2 ESTÁ PRESSIONADA ? CALL ROT_CH2 ;* SIM, ENTÃO TRATA ROTINA DO BOTÃO. BTFSS CH_3 ;* A CHAVE CH3 ESTÁ PRESSIONADA ? CALL ROT_CH3 ;* SIM, ENTÃO TRATA ROTINA DO BOTÃO. GOTO LOOP ;]--------------------------------------------------------------------------------------[ ; Fim do programa ;]--------------------------------------------------------------------------------------[ END