• Início
  • Fórum
  • Informática
    • WEB
    • JAVA
    • Linux
    • Blender
    • BrOffice/OpenOffice
    • Livros
  • Física
    • Mecânica
    • Termodinâmica
    • Eletromagnetismo
    • Física Moderna
  • Sistemas Elétricos
    • ASP/LT
    • Instalações Elétricas
    • Máquinas Elétricas
    • Livros
  • Eletrônica
    • Analógica
    • Digital
    • VHDL
    • Microcontroladores
  • Telecom
    • Comunicações
    • DSP
  • IA
    • Algoritmos Genéticos
    • Redes Neurais
  • Contato
Eletrônica Microcontroladores

PIC16: mostra1digito - exibe um dígito em displays multiplexados

A seguinte função para a família de microcontroladores PIC16 exibe um dígito BCD em um dos 4 displays de sete segmentos multiplexados através de transistores. A posição do dígito é especificado pela variável mostra1_posicao_7seg. Os 4 bits menos significativos de PORT_DISPLAY_7SEGMENTOS referem-se aos dados e os 4 bits mais significativos, ao número (posição) do display em relação ao conjunto de 4 displays.

Variáveis utilizadas:

  • mostra1_digito_7seg
  • mostra1_posicao_7seg

Funções utilizadas:

  • Nenhuma.

Apenas a constante PORT_DISPLAY_7SEGMENTOS, definida como PORTB no cabeçalho do programa, é utilizada.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
;*********************************************************
;<FUNÇÃO>
; mostra1digito
;{
; Exibe um dígito <digito> no display de 7 segmentos
; de nº <mostra1_posicao_7seg>

;<HARDWARE>
; 4 displays de sete segmentos multiplexados
; através de 4 transistores e o dado codificado em BCD.
; Os 8 bits estarão conectados na porta PORT_DISPLAY_7SEGMENTOS
; <ARGUMENTOS>
; mostra1_digito_7seg (f) = um dígito (0 a 9) a ser exibido
; mostra1_posicao_7seg (f) = número (0 a 4) estabelece qual display
; deve ser utilizado para exibir o dígito.
;*********************************************************

#ifdef DISPLAY_7SEGMENTOS

mostra1digito:
banksel mostra1_posicao_7seg
movf mostra1_posicao_7seg, w
andlw b'00000111' ; Posicação máxima = 4° display
movwf mostra1_posicao_7seg

sublw 4 ; Posicação máxima = 4° display
btfss STATUS,C
clrf mostra1_posicao_7seg ; posicao > 4 = nenhum display ativo

movf mostra1_digito_7seg,w ; apenas o primeiro nibble é válido
andlw b'00001111'
movwf mostra1_digito_7seg

movlw HIGH decodifica_7seg
movwf PCLATH
movf mostra1_posicao_7seg,w
call decodifica_7seg ; 4 bits mais significativos
iorwf mostra1_digito_7seg, w ; 4 bits menos significativos
movwf PORT_DISPLAY_7SEGMENTOS
return ; mostra1digito

#endif
;*********************************************************

;*********************************************************
;<TABELA>
; decodifica_7seg

; <ARGUMENTOS>
; w = posicao do display em decimal a ser decodificado
;*********************************************************

#ifdef DISPLAY_7SEGMENTOS
; primeiros 4 bits = transistores de multiplexação
decodifica_7seg:
addwf PCL,f
retlw b'00000000' ; nenhum display
retlw b'00010000' ; 1° display
retlw b'00100000' ; 2° display
retlw b'01000000' ; 3° display
retlw b'10000000' ; 4° display
retlw b'00000000' ; apenas em caso de erro
retlw b'00000000' ; apenas em caso de erro
retlw b'00000000' ; apenas em caso de erro
return ; apenas em caso de erro, tabela

#endif
;}
;*********************************************************

Traduções

  • English (United States)

Menu

  • Início
  • Fórum
  • Informática
  • Física
  • Sistemas Elétricos
  • Eletrônica
    • Analógica
    • Digital
    • VHDL
    • Microcontroladores
  • Telecom
  • IA
  • Contato

Outros artigos

  • PIC16: Relógio e contagem até 9999d
  • PIC16: toBCD8 - Hexadecimal para BCD 8 bits
  • MPLAB: Code folding para Assembly
  • PIC Power-Up Timer
  • PIC16: Instruções de movimentação de dados
  • PIC Watchdog Timer
  • PIC16: delay_us
  • PIC16: toBCD16 - Hexadecimal para BCD 16 bits

Últimos artigos

  • Amazon Kindle DX
  • Dispositivo Diferencial Residual (DR)
  • AJAX Chat - Open Source Web Chat
  • Controle escalar do motor de indução trifásico

Comunidade Livre

Conheça nosso fórum, livre e de qualidade, clicando aqui.
Para o topo
Todos os códigos-fonte estão licenciados pela LGPL e todo o conteúdo pela Creative Commons License.
Copyleft©2010. Nenhum direito reservado.