Sei sulla pagina 1di 9

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

;*
DISPLAY 1-2 (CDIGO 2)
*
;*
UTFPR
*
;*
DESENVOLVIDO POR
ADRIANO SILVA, JULIANA SANTOS
*
;* VERSO: 1.0
DATA: 07/04/2016
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
DESCRIO DO ARQUIVO
*
;*-----------------------------------------------------------------*
;* CDIGO PARA PIC 16F877 DA DISCIPLINA "MICROCONTROLADORES".
*
;*
*
;* AO PRESSIONAR AS TECLAS DE 1 A 8, OS LEDS CORRESPONDENTES (1A8) *
;* SO LIGADOS. APS SOLTAR A TECLA, CONTINUA LIGADO. SMOMENTE AO *
;* PRESSIONAR NOVAMENTE SO DESLIGADOS.
*
*
;*
*
;* Habilitar o dip switch CH3,1-4 (posio ON para cima);
*
;* Habilitar o dip CH5,1-4 (posio ON para cima);
*
;* Habilitar todos os dips de CH4 (posio ON para cima);
*
;* Desabilitar as demais chaves DIP;
*
;* Manter o jumper J3 e J4 na posio A (1 e 2).
*
;*
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
CONFIGURAO PARA GRAVAO (FUSES)
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
__CONFIG _WDT_OFF & _XT_OSC & _LVP_OFF & _DEBUG_ON & _BODEN_OFF
;_CP_OFF
;_WRT_OFF
;
;_DEBUG_ON
;_CPD_OFF
;_LVP_OFF
;_WDT_OFF
;_BODEN_OFF
;_PWRTE_ON
;_XT_OSC

==> MEMRIA DE PROGRAMA DESPROTEGIDA CONTRA LEITURA.


==> SEM PERMISSO PARA ESCREVER NA MEMRIA DE PROGRAMA
DURANTE EXECUO DO PROGRAMA.
==> DEBUG ATIVADO.
==> MEMRIA EEPROM PROTEGIDA CONTRA LEITURA.
==> PROGRAMAO EM BAIXA TENSO DESABILITADA.
==> WDT DESATIVADO.
==> BROWN-OUT DESATIVADO.
==> POWER-ON RESET ATIVADO.
==> OSCILADOR CRISTAL (4MHz).

;* * * * * * * * * * *
;*
;* * * * * * * * * * *
#INCLUDE <P16F877.INC>

* * * * * * * * * * * * * * * * * * * * * * *
ARQUIVOS DE DEFINIES
*
* * * * * * * * * * * * * * * * * * * * * * *
;ARQUIVO PADRO MICROCHIP PARA 16F877

;* * * * * * * * * * * * * * * * *
;*
PAGINAO DE
;* * * * * * * * * * * * * * * * *
; DEFINIO DE COMANDOS DE USURIO
; MEMRIA.
BANK0

BANK1

MACRO

* * * * * * * * * * * * * * * * *
MEMRIA
*
* * * * * * * * * * * * * * * * *
PARA ALTERAO DA PGINA DE

ENDM

;SELECIONA BANK0 DE MEMRIA.


bcf STATUS,RP1
bcf
STATUS,RP0
;FIM DA MACRO BANK0.

ENDM

;SELECIONA BANK1 DE MEMRIA.


bcf STATUS,RP1
bsf
STATUS,RP0
;FIM DA MACRO BANK1.

MACRO

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
VARIVEIS
*

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIO DOS NOMES E ENDEREOS DE TODAS AS VARIVEIS UTILIZADAS
; PELO SISTEMA
CBLOCK 0x20
;ENDEREO INICIAL DA MEMRIA DE
;USURIO.
W_TEMP
;REGISTRADORES TEMPORRIOS PARA USO
STATUS_TEMP
;JUNTO S INTERRUPES.
DB1
;VARIAVEL DE TEMPO1
DB2
;VARIVEL DE TEMPO2
ENDC

;FIM DO BLOCO DE MEMRIA.

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
FLAGS INTERNOS
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
CONSTANTES
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; DEFINIO DE TODAS AS CONSTANTES UTILIZADAS PELO SISTEMA
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
ENTRADAS
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#DEFINE BOTAO04
PORTB,0
;BOTAO 0 E 4
#DEFINE BOTAO15
PORTB,1
;BOTAO 1 E 5
#DEFINE BOTAO26
PORTB,2
;BOTAO 2 E 6
#DEFINE BOTAO37
PORTB,3
;BOTAO 3 E 7

* * * *
*
* * * *
LIGADO A
LIGADO A
LIGADO A
LIGADO A

PORTA
PORTA
PORTA
PORTA

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
SADAS
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#DEFINE LED0
PORTD,0
;DEFININDO RD0 COMO LED0
#DEFINE LED1
PORTD,1
;DEFININDO RD1 COMO LED1
#DEFINE LED2
PORTD,2
;DEFININDO RD2 COMO LED2
#DEFINE LED3
PORTD,3
;DEFININDO RD3 COMO LED3
#DEFINE LED4
PORTD,4
;DEFININDO RD4 COMO LED4
#DEFINE LED5
PORTD,5
;DEFININDO RD5 COMO LED5
#DEFINE LED6
PORTD,6
;DEFININDO RD6 COMO LED6
#DEFINE LED7
PORTD,7
;DEFININDO RD7 COMO LED7
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
VETOR DE RESET
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ORG
goto
;* * *
;*
;* * *
; CADA
; E UM

0x00
INICIO

;ENDEREO INICIAL DE PROCESSAMENTO.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ROTINAS E SUBROTINAS
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ROTINA OU SUBROTINA DEVE POSSUIR A DESCRIO DE FUNCIONAMENTO
NOME COERENTE S SUAS FUNES.

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
INCIO DO PROGRAMA
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

RB0
RB1
RB2
RB3

INICIO
clrf
clrf
clrf
clrf

PORTA
PORTB
PORTC
PORTD

;LIMPA
;LIMPA
;LIMPA
;LIMPA

PORTA
PORTB
PORTC
PORTD

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
CONFIGURAO DO MICROCONTROLADOR
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
BANK1
;ALTERA PARA O BANCO 1.
movlw
movwf

B'00001111'
TRISB

movlw
movwf
movlw
movwf

B'11111100'
TRISC
B'00000000'
TRISD

BANK0
movlw
movwf

B'11111111'
PORTD

;MOVE O LITERAL B'00001111' PARA O W


;CONFIGURA RBA,RB1,RB2 E RB3 COMO ENTRAD

A.
;MOVE O
;DEFINE RC0
;MOVE O
;TODA A

LITERAL B'11111100' PARA O W


E RC1 COMO SADA.
LITERAL B'00000000' PARA O W
PORTD SADA.

;RETORNA PARA O BANCO 0.


;MOVE O LITERAL B'11111111' PARA O W
;DESLIGA TODOS OS LEDs

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
INICIALIZAO DA RAM
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; LIMPEZA DE TODA A RAM DO BANC0 0, INDO DE 0X20 A 0X7F.
movlw
movwf

0x20
FSR

;APONTA O ENDEREAMENTO INDIRETO P

ARA
;A PRIMEIRA POSIO DA RAM.
LIMPA_RAM
clrf
incf
movf
xorlw
btfss
goto

INDF
FSR,F
FSR,W
0x80
STATUS,Z
LIMPA_RAM

;LIMPA A POSIO ATUAL.


;INCREMENTA PONTEIRO P/ A PRX. POS.
;COMPARA PONTEIRO COM A LT. POS. +1.
;J LIMPOU TODAS AS POSIES?
;NO, LIMPA A PRXIMA POSIO.
;SIM, CONTINUA O PROGRAM

A.
;* * * * * * * * * * * * * * * *
;*
INICIALIZAO DAS
;* * * * * * * * * * * * * * * *
; ATRIBUIO DE VALORES INICIAIS
; RESGISTRADORES ESPECIAIS.

* * * * * * * * * * * * * * * * * *
VARIVEIS E SFRs
* * * * * * * * * * * * * * * * * *
S VARIVEIS CRIADAS NA RAM E

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
ROTINA PRINCIPAL
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MAIN:
BANK0
movlw B'11111110'
movwf PORTC
NHA DO TECLADO MATRICIAL

;SELECIONA A PRIMEIRA LI

CALL

DELAY_50ms

;INTERVALO DE CICLO DE L

BOTAO04

;VERIFICA SE O BOTAO EST

EITURA
BTFSS
PRESSIONADO
GOTO
IONADO

REALMENTEPRESSIONADO

BTFSS
GOTO

BOTAO15
REALMENTEPRESSIONADO1

BTFSS
GOTO

BOTAO26
REALMENTEPRESSIONADO2

BTFSS
GOTO

BOTAO37
REALMENTEPRESSIONADO3

movlw B'11111101'
movwf PORTC
LINHA DO TECLADO MATRICIAL
BTFSS
PRESSIONADO
GOTO
IONADO

BOTAO04
REALMENTEPRESSIONADO4

BTFSS
GOTO

BOTAO15
REALMENTEPRESSIONADO5

BTFSS
GOTO

BOTAO26
REALMENTEPRESSIONADO6

BTFSS
GOTO
GOTO

BOTAO37
REALMENTEPRESSIONADO7
MAIN

LDLED:
IGA LED0
BTFSS LED0
HA SE O LED0 ESTIVER SETADO
GOTO
DESL0
GA O LED0
GOTO
LIGA0
O LED0
LDLED1:
IGA LED1
BTFSS
GOTO
GOTO
LDLED2:
IGA LED2
BTFSS
GOTO
GOTO
LDLED3:
IGA LED3

;FILTRA RUIDOS DE LEITURA DO BOTAO PRESS

;INVERTE PARA A SEGUNDA


;VERIFICA SE O BOTAO EST
;FILTRA RUIDOS DE LEITURA DO BOTAO PRESS

;FUNO LIGA OU DESL


;PULA PARA A PROXIMA LIN
;VAI PARA A FUNO QUE DESLI
;VAI PARA A FUNO QUE LIGA
;FUNO LIGA OU DESL

LED1
DESL1
LIGA1
;FUNO LIGA OU DESL
LED2
DESL2
LIGA2
;FUNO LIGA OU DESL

BTFSS
GOTO
GOTO
LDLED4:
IGA LED4
BTFSS
GOTO
GOTO
LDLED5:
IGA LED5
BTFSS
GOTO
GOTO
LDLED6:
IGA LED6
BTFSS
GOTO
GOTO
LDLED7:
IGA LED7
BTFSS
GOTO
GOTO

LED3
DESL3
LIGA3
;FUNO LIGA OU DESL
LED4
DESL4
LIGA4
;FUNO LIGA OU DESL
LED5
DESL5
LIGA5
;FUNO LIGA OU DESL
LED6
DESL6
LIGA6
;FUNO LIGA OU DESL
LED7
DESL7
LIGA7

LIGA0:
ED0

;FUNO PARA LIGAR L


BCF
CALL

LED0
CONTINUAPRESS

;LIGA O LED0
;VERIFICA BORDA DE SUBIDA DO SIN

AL
RETURN
PRXIMA LINHA DE ONDE FOI CHAMADO

;RETORNA PARA A

LIGA1:
ED1

;FUNO PARA LIGAR L


BCF
LED1
CALL
CONTINUAPRESS1
RETURN

LIGA2:
ED2

;FUNO PARA LIGAR L


BCF
LED2
CALL
CONTINUAPRESS2
RETURN

LIGA3:
ED3

;FUNO PARA LIGAR L


BCF
LED3
CALL
CONTINUAPRESS3
RETURN

LIGA4:
ED4

;FUNO PARA LIGAR L


BCF
LED4
CALL
CONTINUAPRESS4
RETURN

LIGA5:
ED5

;FUNO PARA LIGAR L


BCF
LED5
CALL
CONTINUAPRESS5
RETURN

LIGA6:
ED6

;FUNO PARA LIGAR L


BCF
LED6
CALL
CONTINUAPRESS6
RETURN

LIGA7:
ED7

;FUNO PARA LIGAR L


BCF
LED7
CALL
CONTINUAPRESS7
RETURN

DESL0:
R LED0

;FUNO PARA DESLIGA


BSF
CALL

LED0
CONTINUAPRESS

;DESLIGA LED0
;VERIFICA BORDA DE SUBIDA DO SIN

AL
RETURN
PRXIMA LINHA DE ONDE FOI CHAMADO

;RETORNA PARA A

DESL1:
R LED1

;FUNO PARA DESLIGA


BSF
LED1
CALL
CONTINUAPRESS1
RETURN

DESL2:
R LED2

;FUNO PARA DESLIGA


BSF
LED2
CALL
CONTINUAPRESS2
RETURN

DESL3:
R LED3

;FUNO PARA DESLIGA


BSF
LED3
CALL
CONTINUAPRESS3
RETURN

DESL4:
R LED4

;FUNO PARA DESLIGA


BSF
LED4
CALL
CONTINUAPRESS4
RETURN

DESL5:
R LED5

;FUNO PARA DESLIGA


BSF
LED5
CALL
CONTINUAPRESS5
RETURN

DESL6:
R LED6

;FUNO PARA DESLIGA


BSF
CALL

LED6
CONTINUAPRESS6

RETURN
DESL7:
R LED7

;FUNO PARA DESLIGA


BSF
LED7
CALL
CONTINUAPRESS7
RETURN

CONTINUAPRESS:
DA DO SINAL DO
BTFSS
HA SE O BOTAO0
GOTO
NHA ANTERIOR
GOTO
PROGRAMA

;VERIFICA A BORA DE SUBI


BOTAO0
BOTAO04
ESTIVER SETADO
$-1
MAIN

;PULA PARA A PROXIMA LIN


;VOLTA PARA A LI
;RETORNA PARA O COMEO DO

CONTINUAPRESS1:
DA DO SINAL DO BOTAO1
BTFSS BOTAO15
GOTO
$-1
GOTO
MAIN

;VERIFICA A BORA DE SUBI

CONTINUAPRESS2:
DA DO SINAL DO BOTAO2
BTFSS BOTAO26
GOTO
$-1
GOTO
MAIN

;VERIFICA A BORA DE SUBI

CONTINUAPRESS3:
DA DO SINAL DO BOTAO3
BTFSS BOTAO37
GOTO
$-1
GOTO
MAIN

;VERIFICA A BORA DE SUBI

CONTINUAPRESS4:
DA DO SINAL DO BOTAO4
BTFSS BOTAO04
GOTO
$-1
GOTO
MAIN

;VERIFICA A BORA DE SUBI

CONTINUAPRESS5:
DA DO SINAL DO BOTAO5
BTFSS BOTAO15
GOTO
$-1
GOTO
MAIN

;VERIFICA A BORA DE SUBI

CONTINUAPRESS6:
DA DO SINAL DO BOTAO6
BTFSS BOTAO26
GOTO
$-1
GOTO
MAIN

;VERIFICA A BORA DE SUBI

CONTINUAPRESS7:
DA DO SINAL DO BOTAO7
BTFSS BOTAO37
GOTO
$-1
GOTO
MAIN

;VERIFICA A BORA DE SUBI

REALMENTEPRESSIONADO:

;FILTRA RUIDOS DE LEITURA DO BOT

AO0 PRESSIONADO
CALL
BTFSS
HA SE O BOTAO 0
GOTO
SLIGA LED0
GOTO
RAMA

DELAY_DB
BOTAO04
ESTIVER SETADO
LDLED

;CHAMA A FUNO DELAY


;PULA PARA A PROXIMA LIN

MAIN

;VAI PARA O COMEO DO PROG

;VAI PARA A FUNO LIGA E DE

REALMENTEPRESSIONADO1:
AO1 PRESSIONADO
CALL
DELAY_DB
BTFSS BOTAO15
GOTO
LDLED1
GOTO
MAIN

;FILTRA RUIDOS DE LEITURA DO BOT

REALMENTEPRESSIONADO2:
AO2 PRESSIONADO
CALL
DELAY_DB
BTFSS BOTAO26
GOTO
LDLED2
GOTO
MAIN

;FILTRA RUIDOS DE LEITURA DO BOT

REALMENTEPRESSIONADO3:
AO3 PRESSIONADO
CALL
DELAY_DB
BTFSS BOTAO37
GOTO
LDLED3
GOTO
MAIN

;FILTRA RUIDOS DE LEITURA DO BOT

REALMENTEPRESSIONADO4:
AO4 PRESSIONADO
CALL
DELAY_DB
BTFSS BOTAO04
GOTO
LDLED4
GOTO
MAIN

;FILTRA RUIDOS DE LEITURA DO BOT

REALMENTEPRESSIONADO5:
AO5 PRESSIONADO
CALL
DELAY_DB
BTFSS BOTAO15
GOTO
LDLED5
GOTO
MAIN

;FILTRA RUIDOS DE LEITURA DO BOT

REALMENTEPRESSIONADO6:
AO6 PRESSIONADO
CALL
DELAY_DB
BTFSS BOTAO26
GOTO
LDLED6
GOTO
MAIN

;FILTRA RUIDOS DE LEITURA DO BOT

REALMENTEPRESSIONADO7:
AO7 PRESSIONADO
CALL
DELAY_DB
BTFSS BOTAO37
GOTO
LDLED7
GOTO
MAIN

;FILTRA RUIDOS DE LEITURA DO BOT

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
FUNO DELAY
*

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
DELAY_DB:
MOVLW .150
MOVWF DB1
W PARA A VARIAVEL DB1

;FUNO DELAY 20ms


;MOVE O DECIMAL PARA O W
;MOVE O VALOR DE

DELAY_DB2:
MOVLW .250
MOVWF DB2
W PARA A VARIAVEL DB2
DECFSZ DB2
IDADE DE DB2 E PULA LINHA CASO SEJA '0'
GOTO
$-1
A ANTERIOR
DECFSZ DB1
IDADE DE DB1 E PULA LINHA CASO SEJA '0'
GOTO
DELAY_DB2
FUNO DELAY_DB2
RETURN
HA DEPOIS DA FUNO ONDE FOI CHAMADA

;FUNO DELAY 20ms


;MOVE O DECIMAL PARA O W
;MOVE O VALOR DE

DELAY_50ms:
MOVLW
MOVWF

;FUNO DELAY 50ms


.250
DB1

DELAY_50ms:
MOVLW
MOVWF
DECFSZ
GOTO
DECFSZ
GOTO
RETURN

.250
DB2
DB2
$-1
DB1
DELAY_GRANDE1

;DECREMENTA A UN
;VAI PARA A LINH
;DECREMENTA A UN
;VOLTA PARA O INICIO DA
;RETORNA UMA LIN

;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
FIM DO PROGRAMA
*
;* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
END

;OBRIGATRIO.

Potrebbero piacerti anche