Você está na página 1de 7

Pgina 1 de 7

; TRABALHO AV-2
; IMPLEMENTAO CONTADOR CRESCENTE PARA 2 DISPLAYS DE 7 SEGMENTOS
;********************************************************************
; NOME FICHEIRO: GRUPO 1 _ VALORES DE 0 A 15
; AUTORES: ELLEN FERREIRA DE A. FERNANDES E HERICA TEIXEIRA SOARES
; ORIENTADOR: PROF. DAVI MOURA
; UNIVERSIDADE ESTACIO DE SA
; DATA: 13/06/11 *
;********************************************************************
; FICHEIRO NECESSRIO: P16F876.LKR *
;
;********************************************************************
;LIST
P=16F876
; LIST DIRECTIVE TO DEFINE
;RADIX
DECIMAL
; PROCESSOR
INCLUDE
<P16F876.INC>
; PROCESSOR SPECIFIC VARIABLE
; DEFINITIONS
;ERRORLEVEL -302
; TURN OFF BANKING MESSAGE
; KNOWN TESTED (GOOD) CODE
;-------------------------------------------------------------------; CONSTANTES
;-------------------------------------------------------------------RA0
EQU 0
RA1
EQU 1
RA2
EQU 2
RA3
EQU 3
RA4
EQU 4
RA5
EQU 5
RB0
EQU 0
RB1
EQU 1
RB2
EQU 2
RB3
EQU 3
RB4
EQU 4
RB5
EQU 5
RB6
EQU 6
RB7
EQU 7
RC0
EQU 0
RC1
EQU 1
RC2
EQU 2
RC3
EQU 3
RC4
EQU 4

Pgina 2 de 7
RC5
EQU 5
RC6
EQU 6
RC7
EQU 7
;-------------------------------------------------------------------; DISPLAYS DE 7 SEGMENTOS -|GFEDCBA-|
;-------------------------------------------------------------------SEG7_0
EQU B'01111110'
; VALOR 0
SEG7_1
EQU B'00001100'
; VALOR 1
SEG7_2
EQU B'10110110'
; VALOR 2
SEG7_3
EQU B'10011110'
; VALOR 3
SEG7_4
EQU B'11001100'
; VALOR 4
SEG7_5
EQU B'11011010'
; VALOR 5
SEG7_6
EQU B'11111000'
; VALOR 6
SEG7_7
EQU B'00001110'
; VALOR 7
SEG7_8
EQU B'11111110'
; VALOR 8
SEG7_9
EQU B'11001110'
; VALOR 9
SEG7_A
EQU B'11101110'
; VALOR A
SEG7_B
EQU B'11111000'
; VALOR B
SEG7_C
EQU B'01110010'
; VALOR C
SEG7_D
EQU B'10111100'
; VALOR D
SEG7_E
EQU B'11110010'
; VALOR E
SEG7_F
EQU B'11100010'
; VALOR F
;-------------------------------------------------------------------; VARIVEIS (REGISTOS DE USO GERAL) BANK0
;-------------------------------------------------------------------RAM
UDATA 0X20
SEG70
RES 1
; VALOR
SEG71
RES 1
; VALOR
SEG72
RES 1
; VALOR
SEG73
RES 1
; VALOR
SEG74
RES 1
; VALOR
SEG75
RES 1
; VALOR
SEG76
RES 1
; VALOR
SEG77
RES 1
; VALOR
SEG78
RES 1
; VALOR
SEG79
RES 1
; VALOR
SEG7A
RES 1
; VALOR
SEG7B
RES 1
; VALOR
SEG7C
RES 1
; VALOR
SEG7D
RES 1
; VALOR

0 ENDEREO
1 ENDEREO
2 ENDEREO
3 ENDEREO
4 ENDEREO
5 ENDEREO
6 ENDEREO
7 ENDEREO
8 ENDEREO
9 ENDEREO
A ENDEREO
B ENDEREO
C ENDEREO
D ENDEREO

Pgina 3 de 7
SEG7E
RES 1
SEG7F
RES 1
DELAY_MULT
RES 1
DELAY_K50
RES 1
; DOS
DELAY_K200
EQU 1
CONT
RES 1
;
;-------------------------------------------------------------------;MACROS PARA OS BANCOS
;-------------------------------------------------------------------BANK0

BANK1

BANK3

MACRO
BCF STATUS,RP0
BCF STATUS,RP1
ENDM
MACRO
BSF STATUS,RP0
BCF STATUS,RP1
ENDM
MACRO
BCF STATUS,RP0
BSF STATUS,RP1
ENDM

; VALOR E ENDEREO
; VALOR F ENDEREO
; VARIAVEIS DE CONTROLO
LOOPS DA ROTINA DELAY
;

;
;
;
;
;
;
;
;
;
;
;
;

;********************************************************************
ORG 0X00
; PROCESSOR RESET VECTOR
CLRF PCLATH
; ENSURE PAGE BITS ARE CLEARED
GOTO MAIN
; GO TO BEGINNING OF PROGRAM
;-------------------------------------------------------------------; ROTINA MAIN
;-------------------------------------------------------------------MAIN
ORG 0X05
; PROGRAM MEMORY PAGE 0
; PROGRAMA PRINCIPAL.
CALL INITCFG
; ROTINA DE CONFIGURAO
CLRF CONT
;
LOOP
; WHILE(1) {
MOVFW CONT
; W=0
CALL BCD_7SEG
;
MOVLW .50
; DELAY DE 0,5 SEG
CALL DELAY
;
MOVLW 0X00
;

Pgina 4 de 7
CALL BCD_CLEAR
MOVLW .200
CALL DELAY
INCF CONT,1
MOVFW CONT
SUBLW 0X0F
BTFSS STATUS,Z
GOTO LOOP
GOTO MAIN

; ZERA OS DISPLAYS
; DELAY DE 2,0 SEG
;
; INCREMENTA O CONTADOR
;
;
; TESTA O BIT Z DO STATUS
; RETORNA PARA O LOOP
; RETORNA PARA O MAIN

;********************************************************************
;************************** ROTINAS *********************************
;********************************************************************
;===================================================================;
; INITCFG ;
; CONFIGURAO INICIAL DOS REGISTROS ASSOCIADOS ;
; AO PROGRAMA PRINCIPAL, PORTOS I/O ;
; RETORNA EM BANK0 ;
;;
;===================================================================;
INITCFG
;----------------- I/O - INITCFG ----------------------;
BANK1
CLRF TRISA
MOVLW B'00010000'
MOVWF TRISA
MOVLW B'00000001'
MOVWF TRISB
MOVLW B'00000001'
MOVWF TRISC

CLRF
CLRF
CLRF
CLRF
CLRF

BANK0
PORTA
PORTB
PORTC
BCD_7SEG
BCD_CLEAR

;
;
;

; DATA MEMORY (RAM) BANK1


ALL BITS ARE OUTPUTS
; RB[7:1] OUTPUTS
; RB[1] INPUT
; RB[7:1] OUTPUTS
; RB[0] INPUT
; RC[7:1] OUTPUTS
;
; DATA MEMORY (RAM) BANK0
INICIALIZAO PORTA.
; INICIALIZAO PORTB.
INICIALIZAO PORTC
INICIALIZAO BCD_7SEG
INICIALIZAO BCD_CLEAR

;-------------------------------------------------------------------; INICIALIZAO DOS REGISTROS ASSOCIADOS AOS DISPLAYS 7SEG

Pgina 5 de 7
;-------------------------------------------------------------------MOVLW SEG7_0
MOVWF SEG70
MOVLW SEG7_1
MOVWF SEG71
MOVLW SEG7_2
MOVWF SEG72
MOVLW SEG7_3
MOVWF SEG73
MOVLW SEG7_4
MOVWF SEG74
MOVLW SEG7_5
MOVWF SEG75
MOVLW SEG7_6
MOVWF SEG76
MOVLW SEG7_7
MOVWF SEG77
MOVLW SEG7_8
MOVWF SEG78
MOVLW SEG7_9
MOVWF SEG79
MOVLW SEG7_A
MOVWF SEG7A
MOVLW SEG7_B
MOVWF SEG7B
MOVLW SEG7_C
MOVWF SEG7C
MOVLW SEG7_D
MOVWF SEG7D
MOVLW SEG7_E
MOVWF SEG7E
MOVLW SEG7_F
MOVWF SEG7F
RETURN

; SET 7SEGMENT VALOR


; SAVE VALOR 0
; SET 7SEGMENT VALOR
; SAVE VALOR 1
; SET 7SEGMENT VALOR
; SAVE VALOR 2
; SET 7SEGMENT VALOR
; SAVE VALOR 3
; SET 7SEGMENT VALOR
; SAVE VALOR 4
; SET 7SEGMENT VALOR
; SAVE VALOR 5
; SET 7SEGMENT VALOR
; SAVE VALOR 6
; SET 7SEGMENT VALOR
; SAVE VALOR 7
; SET 7SEGMENT VALOR
; SAVE VALOR 8
; SET 7SEGMENT VALOR
; SAVE VALOR 9
; SET 7SEGMENT VALOR
; SAVE VALOR A
; SET 7SEGMENT VALOR
; SAVE VALOR B
; SET 7SEGMENT VALOR
; SAVE VALOR C
; SET 7SEGMENT VALOR
; SAVE VALOR D
; SET 7SEGMENT VALOR
; SAVE VALOR E
; SET 7SEGMENT VALOR
; SAVE VALOR F

0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F

;===================================================================;
; BCD_7SEG
;
;===================================================================;
BCD_7SEG

Pgina 6 de 7
MOVLW SEG70
;
ADDWF CONT,W
; & DO VAL A MOSTRAR DA TABELA
MOVWF FSR
; SET DO ENDEREO DA TABELA
MOVF INDF,W
; LEITURA DO VALOR DE SEG70
MOVWF PORTB
; ENVIO DO VALOR PARA O PORTB
MOVLW SEG70
; VALOR FIXO - REPRESENTA 0
MOVWF FSR
; SET DO ENDEREO DA TABELA
MOVF INDF,W
; LEITURA DO VALOR DE SEG71
MOVWF PORTC
; ENVIO DO VALOR PARA O PORTC
RETURN
;===================================================================;
; BCD_CLEAR ;
; ROTINA QUE ZERA O DISPLAY
;===================================================================;
BCD_CLEAR
MOVWF PORTB
; ENVIO DO VALOR PARA O PORTB
MOVLW 0X00
;
MOVWF PORTC
; ENVIO DO VALOR PARA O PORTC
RETURN
;===================================================================;
; DELAY ;
; PODE GERAR DELAYS ENTRE 10 MS E 2,5 S ;
; O VALOR DE ENTRADA E PASSADO EM W (1..255) ;
; NOTAS: O LOOP BASE E DE 1 US (T=200 NS <=> 4*1/20MHZ) ;
; RETORNA EM BANK0 ;
;===================================================================;
DELAY
MOVWF DELAY_MULT
; CARREGA O VALOR MULTIPLO
DEL_M10
MOVLW .50
; DE 10 MS
MOVWF DELAY_K50
; 50 => 10 MS
DEL_50
MOVLW .200
; 200 => 200 US
MOVWF DELAY_K200
; CARREGA O VALOR
DEL_200
NOP
; CORRESPONDENTE A 200 US
NOP
;
DECFSZ DELAY_K200,F
; DECREMENTA "DELAY_K200"
; O RESULTADO COLOCADO EM "DELAY_K200"
GOTO DEL_200
; WHILE( DELAY_K200 > 0 )
DECFSZ DELAY_K50,F
;
GOTO DEL_50
; WHILE( DELAY_K50 > 0 )
DECFSZ DELAY_MULT,F
; DECREMENTA "DELAY_MULT"

Pgina 7 de 7
;O RESULTADO COLOCADO EM "DELAY_MULT"
GOTO DEL_M10
; WHILE( DELAY_MULT > 0 )
RETURN
;
;=========================================================================;
END

Você também pode gostar