Você está na página 1de 6

;

;
;
;
;
;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
CDIGO FONTE P/ DATAPOLL PIC-2377
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Projeto: Teclado e Display 7 Segmentos
Aluno: Matheus Milani de Assuno
Data: 07/04/2016

;
;
;
;
;

* * * * * * * * * * * * * *
*
* * * * * * * * * * * * * *
Ao pressionar as teclas 0 a
correspondente a tecla deve

;
;
;
;
;
;
;
;
;
;
;

* * * * * * * * * * * * * * * * * * * * * * * *
*
CONFIGURAO DOS JUMPERS
* * * * * * * * * * * * * * * * * * * * * * * *
Habilitar o dip switch CH3,1-4 (posio ON para
Habilitar todos os dips de CH4 (posio ON para
Habilitar o dip CH5,1-4 (posio ON para cima);
Habilitar o dip CH6,1-4 (posio ON para cima);
Desabilitar as demais chaves DIP;
Manter o jumper J3 na posio B e J4 na posio
L1
RC0; L2
RC1; C1
RB0; C2
RB1...
RE0 habilita o display 7 segmentos.

* * * * * *
DESCRIO
* * * * * *
F (borda de
ser escrito

; * * * * * * * * * * * * * * * * * * * *
; *
CONFIGURAES
; * * * * * * * * * * * * * * * * * * * *
__CONFIG _WDT_OFF & _XT_OSC & _LVP_OFF &
;_CP_OFF
;_WRT_OFF
;
;_DEBUG_ON
;_CPD_OFF
;_LVP_OFF
;_WDT_OFF
;_BODEN_OFF
;_PWRTE_ON
;_XT_OSC

* * * * * * * * * * * * * * * * * *
GERAL
*
* * * * * * * * * * * * * * * * * *
descida do I/O), o valor
no display 7 segmentos.
* * * * * * * * * * * * * *
DE PLACA
*
* * * * * * * * * * * * * *
cima);
cima);

A;

* * * * * * * * * * * * * * * * * *
PARA GRAVAO
*
* * * * * * * * * * * * * * * * * *
_DEBUG_ON & _BODEN_OFF

==> 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).

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;*
ARQUIVOS DE DEFINIES
*
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#INCLUDE <P16F877.INC>
;ARQUIVO PADRO MICROCHIP PARA 16F877
; * *
; *
; * *
T1
VEZES
; * *
; *
; * *

* * * * * * * * * * * * * * * *
DEFINIO
* * * * * * * * * * * * * * * *
EQU
.250
EQU
D'30'
* * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * *
DAS CONSTANTES
*
* * * * * * * * * * * * * * * * * * * *

* * * * * * * * * * * * * * * * * * * *
MACROS
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; *
DEFINIO DAS VARIVEIS
*
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CBLOCK 0X20

; POSIO INICIAL DA RAM

UAU

; VARIVEL PARA CONTAR APR

OX. 1 ms
TEMPO_XMS
FLAG

; PERODO PARA COMANDO DO LED


; AUXILIAR PARA DETECTAR SE BOTO

EST LIGADO
LINHA
COLUNA
CASA
ENDC
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; *
DEFINIO DOS BANCOS DA RAM
*
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
BANK0 MACRO
;SELECIONA BANK0 DE MEMRIA.
bcf STATUS,RP1
bcf
STATUS,RP0
ENDM
;FIM DA MACRO BANK0.
BANK1

MACRO
ENDM

;SELECIONA BANK1 DE MEMRIA.


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

; * * *
; *
; * * *
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
FLAG
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
FLAG0 FLAG, 0
FLAG1 FLAG, 1
FLAG2 FLAG, 2
FLAG3 FLAG, 3
FLAG4 FLAG, 4
FLAG5 FLAG, 5
FLAG6 FLAG, 6
FLAG7 FLAG, 7

; * * *
; *
; * * *
#DEFINE
#DEFINE
#DEFINE
#DEFINE

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ENTRADAS
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
COL0
PORTB, 0
COL1
PORTB, 1
COL2
PORTB, 2
COL3
PORTB, 3

; * * *
; *
; * * *
#DEFINE
#DEFINE
#DEFINE
#DEFINE
#DEFINE
; * * *
; *
; * * *

* * * * * * * * * * * * * * * * * * * * * * * * *
SADAS
* * * * * * * * * * * * * * * * * * * * * * * * *
LIN0
PORTC, 0
LIN1
PORTC, 1
LIN2
PORTC, 2
LIN3
PORTC, 3
LIN4
PORTC, 4
* * * * * * * * * * * * * * * * * * * * * * * * *
VETOR DE RESET DO MICROCONTROLADOR
* * * * * * * * * * * * * * * * * * * * * * * * *
ORG
0x00
;ENDEREO INICIAL
goto
Inicio

* * * * * * * * * *
*
* * * * * * * * * *

* * * * * * * * * *
*
* * * * * * * * * *
DE PROCESSAMENTO.

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; *
VETOR DE INTERRUPO DO MICROCONTROLADOR
*
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

ORG

0x04

;ENDEREO INICIAL DA INTERRUPO.

Interrupcao:

;FUNO PARA TRATAMENTO DA INTERRUPO

retfie
;
;
;
;
;
;

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
CONFIGURAES INICIAIS DE HARDWARE E SOFTWARE
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Nesta rotina so inicializadas as portas de I/O do microcontrolador, os
perifricos que sero usados e as configuraes dos registradores
especiais (SFR).

Inicio:
BANK1
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
BANK0
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
EL COLUNA
MOVLW
MOVWF
EL LINHA
MOVLW
MOVWF
EL CASA

B'00000000'
TRISC
B'11111111'
TRISB
B'00000000'
TRISD

; ALTERA PARA O BANCO 1.


; DEFINE AS PORTAS 0 A 7 COMO SAIDA
; DEFINE AS PORTAS 0 A 7 COMO ENTRADA
; DEFINE AS PORTAS 0 A 7 COMO SAIDA
; RETORNA PARA O BANCO 0.

H'FF'
PORTD
B'11111110'
PORTC
H'00'
FLAG
H'00'
COLUNA

; INICIALIZANDO COM 1 PARA TODA A VARIAV

H'00'
LINHA

; INICIALIZANDO COM 1 PARA TODA A VARIAV

H'00'
CASA

; INICIALIZANDO COM 1 PARA TODA A VARIAV

;* * * * * * * * * * *
;*
;* * * * * * * * * * *
; LIMPA DE TODA A RAM
movlw 0x20
movwf FSR
PARA

; ALTA TODAS AS SADAS


; ALTERNADA NAS SAIDAS DE C
; DEFININDO BAIXO PARA TODA A FLAG

* * * * * * * * * * * * * * * * * * * * * * *
INICIALIZAO DA RAM
*
* * * * * * * * * * * * * * * * * * * * * * *
DO BANC0 0, INDO DE 0X20 A 0X7F.
; APONTA O ENDEREAMENTO INDIRETO
; 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 PROGRA

MA.
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; *
ROTINA PRINCIPAL

*
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
MAIN
; * * * * * *INICIALIZA OS VALORES DAS CONSTANTES
MOVLW T1
; INCICIALIZA TODO INICIO DE COD
IGO AS VARIAVEIS
MOVWF TEMPO_XMS
; TEMPO_XMS E A VARIAVEL UAU
MOVLW VEZES
MOVWF UAU
; * * * * * *ALTERNA OS VALORES DE LINHA
BSF STATUS, 0
RLF
PORTC, 1
INCF
LINHA, 1
BTFSS LIN4
CALL
VALOR_INICIAL
; * * * * * *TESTA PARA VER SE ALGUMA COLUNA FOI PRESSIONADA
BTFSC COL0
GOTO $ + 7
CALL ENROLAAO
BTFSC COL0
GOTO $ + 4
BSF FLAG0
MOVLW D'0'
GOTO FIM
BTFSC

COL1
GOTO $ + 7
CALL ENROLAAO
BTFSC COL1
GOTO $ + 4
BSF FLAG0
MOVLW D'1'
GOTO FIM
BTFSC

COL2
GOTO $ + 7
CALL ENROLAAO
BTFSC COL2
GOTO $ + 4
BSF FLAG0
MOVLW D'2'
GOTO FIM
BTFSC

COL3
GOTO $ + 7
CALL ENROLAAO
BTFSC COL3
GOTO $ + 4
BSF FLAG0
MOVLW D'3'
GOTO FIM
FIM:
;
;

MOVLW
MOVWF
BSF

D'3'
COLUNA
FLAG0

BTFSS

FLAG0
GOTO

MAIN

; * * * * *FORMULA PARA LEITURA DO TECLADO


MOVF
LINHA, 0
MOVWF CASA
BCF
STATUS, 0
RLF
CASA, 1
BCF STATUS, 0
RLF
CASA, 1
MOVF
COLUNA, 0
ADDWF CASA, 1
; * * * * *CHAMA A TABELA PARA VER QUAL LED ACENDER
CALL
TABELA
BCF
FLAG0
MOVWF PORTD
GOTO
MAIN
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
TABELA:
MOVLW B'00001111'
; MASCARA PARA QUE O VALOR NO PAS
SE DE 16
ANDWF CASA, W
; PARA ISSO UTILIZA-SE AND
ADDWF PCL, 1
; ADICIONA O VALOR DA CASA AO PC
L, QUE PULA PARA QUAL RETORNO DESEJA
;
RETLW B'11111111'
RETLW B'00000011'
; 0 - RETORNA OS VALORES PARA AC
IONAR OS LED's
RETLW B'10011111'
; 1
RETLW B'00100101'
; 2
RETLW B'00001101'
; 3
RETLW B'10011001'
; 4
RETLW B'01001001'
; 5
RETLW B'01000001'
; 6
RETLW B'00011111'
; 7
RETLW B'00000001'
; 8
RETLW B'00011001'
; 9
RETLW B'00010001'
; A
RETLW B'11000001'
; b
RETLW B'01100011'
; C
RETLW B'10000101'
; d
RETLW B'01100001'
; E
RETLW B'01110001'
; F
RETURN
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
movlw T1
IGO AS VARIAVEIS
movwf TEMPO_XMS
movlw VEZES
movwf UAU

; INCICIALIZA TODO INICIO DE COD


; TEMPO_XMS E A VARIAVEL UAU

; VERIFICA SE ALGUM BOTO FOI APER


TADO
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; *
ROTINA DE DELAY (DE 1ms AT 255ms)
*
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
ENROLAAO
; FUNO DELAY
movlw T1
; MOVE A CONST. DE TEMPO
"250" PARA WORK
movwf TEMPO_XMS
; MOVE O CONTEUDO DE WORK PARA A
VARIAVEL TEMPO_XMS
AUX

NOP
NOP PARA DAR 10 CICLOS DE MAQUINA
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ TEMPO_XMS,F
GOTO
AUX
DECFSZ UAU,F
GOTO
ENROLAAO
MOVLW VEZES
MOVWF UAU
RETURN

; REPETE-SE 10x

; DIMINUI TEMPO_XMS AT QUE SEJA 0


; DECREMENTA UAU AT QUE SEJA 0

; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; *
VALOR INICIAL DA LINHA
*
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
VALOR_INICIAL
MOVLW B'11111110'
MOVWF PORTC
MOVLW H'00'
MOVWF LINHA
RETURN
;
;
;
;

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

*
*
*
*

Você também pode gostar