Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;===============================================================================
- ; Fatec Sorocaba
- ;
- ; Eletrônica Automotiva
- ; Seminario Microcontroladores
- ; Tema: Implementar um contador decrescente de 99 a 0 com intervalo de 100mS
- ;
- ; Grupo:
- ; André Sampaio
- ; Artur Alves
- ; Elizio Junior
- ; João Pedro
- ;
- ;
- ;
- ; Projeto: Template_20180903
- ; Arquivo: Seminario.asm
- ;
- ; PIC 16F877A
- ; Clock 4MHz
- ;
- ; demo IDE MPLABx v 2.15v - Assembly Linguagem
- ;
- ; Baseado no Hardware da PCI Placa Mini Didativa V 0.1
- ;
- ; Princípio de operação das rotinas : Timer via SW (300mS)
- ; Timer HW (Timer 0)
- ; Timer 0 com interrupção
- ;===============================================================================
- ;
- ; Detalhes do hardware: O latch 74LS573 passa o dado do PORTD para os Leds, o pino
- ; de controle do latch correspondente é controlado pelo pino
- ; RE2 (LED-LE) Que deve ser mantido em nivel 1.
- ; Os CD4511 acionam os display de 7seg que também esta
- ; pino de controle desses latchas: PORTE pino RE1.
- ; Deve ser mantido baixo para escrever nos display de LED.
- ;
- ; Display LCD : C3 = RS
- ; C4 = E
- ; Dados = PORTD ( sem latch)
- ;==========================PIC Escolhido========================================
- ;
- #include <P16F877A.inc> ;Arquivo padrão MC p/ UCP PIC16F877A
- ;
- ;===============================================================================
- __CONFIG _HS_OSC & _WDT_OFF
- ;
- ;===============================================================================
- ;
- #DEFINE BANK0 BCF STATUS,RP0 ;seta bank 0 de memória
- #DEFINE BANK1 BSF STATUS,RP0 ;seta bank 1 de memória
- ;
- cblock 0X20 ;end.incial mem.usuário
- cont
- cont0 ;contador 0
- cont1 ;contador 1
- cont2 ;contador 2
- cont3 ;contador 3
- flags ;registrador de flags de uso geral
- aux1 ;reg auxiliar 1
- aux2 ;reg auxiliar 2
- leds ;leds de uso geral
- reg_gira ;red auxiliar
- salva_w ;preserva reg w
- salva_status ;preserva status
- nr_duzias ;contador de nr de duzias produzidas
- tempo ;tempo de pwm
- endc ;fim do bloco de memória
- ;
- ;=========================Define entradas e saidas==============================
- ;
- #DEFINE LED_0 PORTD,3 ;led pisca
- #DEFINE LED_1 PORTD,4 ;led pisca
- #DEFINE LED_2 PORTD,5 ;led pisca
- #DEFINE LED_3 PORTD,6 ;led pisca
- ;
- ;===============================Vetor de Reset==================================
- ;
- ORG 0x00 ;end. incial de proc.
- goto inicio
- ;
- ;====================================EEPROM=====================================
- ;
- ;não utilizada
- ;
- ;==============================Inicio da Interrupção============================
- ;
- ; rotina de contagem de duzias via interrupção
- ;
- ORG 0x04 ;vetor de atendimento a interrupção
- retfie
- ;===============================================================================
- ;
- ; INICIALIZAÇÃO
- ;
- ;===============================================================================
- ;
- ;inicialização dos REGs internos
- ;
- inicio
- BANK1
- movlw b'11111111' ;todas entradas
- movwf TRISA ;PORT onde estão entradas analogicas
- movlw b'00011111'
- movwf TRISB ;PORT onde estão as chaves
- movlw b'00000000' ;1 = entrada, 0 = saida
- movwf TRISC
- movlw b'00000000' ;todas saidas(porta do LED)
- movwf TRISD
- movlw b'00000000' ;todas saidas(porta do stroube com PSP=1)
- movwf TRISE
- movlw b'00000111'
- movwf OPTION_REG
- movlw b'00000000'
- movwf INTCON ;todas interrupções desabilitadas
- bcf TRISE,4 ;PORTD normal (não PSP)
- ;Configuração do Timer0
- movlw b'00000111' ;Move a Configuração do Timer0 em binario para o work
- movwf OPTION_REG ;Move do work para o option_reg
- ;inicializa variaveis
- BANK0
- clrf aux1
- clrf aux2
- ;===============================================================================
- ;Programa
- movlw h'99' ;Move 99 em hexadecimal para começar o programa
- movwf PORTD ;Move os 99 para o PORTD
- start
- call delay_50ms
- call delay_50ms
- ;Unidades----------------------------------------------------------------------
- decf PORTD ;Decrementa o PORTD em 1
- movlw h'0f' ;Move '00001111' para o work
- andwf PORTD, w ;Testa
- movwf aux1 ;Move a variavel do and para o auxiliar 1
- bcf STATUS,Z ;Limpa a flag do Status Register
- movlw h'0f' ;Move '00001111' para work
- xorwf aux1 ;Faz o teste auxiliar
- btfsc STATUS,Z ;
- call subtrai_6
- ;Dezenas-----------------------------------------------------------------------
- movlw h'F0'
- andwf PORTD, w
- bcf STATUS,Z ;Limpa a flag do Status Register
- movwf aux2 ; Move a variavel do and para o auxiliar 1
- movlw h'F0' ; Move o valor para o work da variavel de teste
- xorwf aux2 ; faz o teste auxiliar
- btfsc STATUS,Z
- call subtrai_96
- goto start
- ;===============================================================================
- ;Rotina timer0
- delay_50ms
- movlw .60 ;Move 60 para o work
- movwf TMR0 ;Move para o TMR0
- bcf INTCON, TMR0IF ;Limpa a flag do timer0
- loop2 btfss INTCON, TMR0IF ;testa a flag do timer0
- goto loop2
- return
- ;===============================================================================
- ;Rotina que subtrai 6 caso seja F
- subtrai_6
- movlw .6 ;Move 6 para o work
- subwf PORTD ;Subtrai 6 do PORTD
- return ;Retorna
- ;===============================================================================
- ;Rotina que subtrai 96 caso seja F
- subtrai_96
- movlw .96 ;Move 96 para o work
- subwf PORTD ;Subtrai 96 do PORTD
- return ;Retorna
- ;===============================================================================
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement