Вы находитесь на странице: 1из 19

INFORME DE SISTEMAS DIGITALES

MANEJO DE DISPLAY 7 SEGMENTOS


(CONTADOR)

1.

OBJETIVOS:
Realizar un programa que muestre una secuencia de 0 a 9, con un retardo
de 1 segundo en un display a 7 segmentos, usando tablas LOOK UP como
decodificador. Escriba el programa usando el softeare MPLAB y compile
usando MPLIB.exe. La simulacin se realiza con PROTEUS. Para la
grabacin usar el software PICKIT 2.

2. MATERIALES:
-

Una PC.
Un mdulo PIC16F84A
Un mdulo grabador de PIC.
Hardware para simulacin de PIC.
Fuente de alimentacin.
Software MPLAB, PROTEUS.

3. PARTE EXPERIMENTAL:
Se requiere mostrar la siguiente secuencia en un Display a 7 segmentos
(ctodo comn).
0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5.

Display 7 segmentos:
list P=PIC16F84A
INCLUDE <P16F84A.INC>
INCLUDE <MACRO.INC>
CBLOCK 0X0C
CONTA
REG1
REG2
REG3
ENDC
ORG 0X00
BANK1
CLRF TRISB
BANK0
CLRF PORTB
OTRO CLRF CONTA
OTRO1 MOVF CONTA,W
CALL TABLA
MOVWF PORTB
CALL DELAY_1_5
INCF CONTA,F
MOVLW .10
XORWF CONTA,W
BTFSS STATUS,Z
GOTO OTRO1
GOTO OTRO
DELAY_1_5

R1
330

R3
330

R4
330

U1
R2
10k

16
15
4

OSC1/CLKIN
OSC2/CLKOUT
MCLR

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

PIC16F84A

17
18
1
2
3

R5
330

6
7
8
9
10
11
12
13

R6
330

R7
330

R8
330

PROGRAMAS EXTRAS SOLICITADOS:


1.- Disear un contador Binario 0 a F ascendente usando display catodo
comn con tiempo de retardo de 2 Segundos
list P=PIC16F84A
INCLUDE <P16F84A.INC>
INCLUDE <MACRO.INC>
CBLOCK 0X0C
CONTA
REG1
REG2
REG3
ENDC
ORG 0X00
BANK1
CLRF TRISB
BANK0
CLRF PORTB
OTRO CLRF CONTA
OTRO1 MOVF CONTA,W

TABLA ADDWF PCL,F


RETLW 0X3F
RETLW 0X06
RETLW 0X5B
RETLW 0X4F
RETLW 0X66
RETLW 0X6D
RETLW 0X7D
RETLW 0X07
RETLW 0X7F
RETLW 0X67
RETLW 0X77
RETLW 0X7C
RETLW 0X39
RETLW 0X5E
RETLW 0X79
RETLW 0X71
END
R1
330

R3
330

R4
330

U1
R2
10k

16
15
4

OSC1/CLKIN
OSC2/CLKOUT
MCLR

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

PIC16F84A

17
18
1
2
3

R5
330

6
7
8
9
10
11
12
13

R6
330

R7
330

R8
330

2.-Disear una Secuencia F,A,0,1,D,B,3,F,A, usando nodo


Comn.
List P=PIC16F84A
INCLUDE <P16F84A.INC>
INCLUDE <MACRO.INC>
CBLOCK 0X0C
CONTA
REG1
REG2
REG3
ENDC
ORG 0X00
BANK1
CLRF TRISB
BANK0
CLRF PORTB

END
R1
330

R3
330

R4
330

U1
R2
10k

16
15
4

OSC1/CLKIN
OSC2/CLKOUT
MCLR

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

PIC16F84A

17
18
1
2
3

R5
330

6
7
8
9
10
11
12
13

R6
330

R7
330

R8
330

Cuestionario
1.- Como modificara el diseo anterior para visualizar los datos ingresados
por el puerto A (RA3:RA0) presente el circuito y el diagrama de flujo y el
programa.

Diagrama de Flujos
INICIO

DECLARACIN DE
VARIABLES:
MACRO.INC

PUERTO A COMO
SALIDA
PUERTO A < - 0

DIGITO < - 0

W < - DIGITO

MOSTRAR POR
PUERTO A (DISPLAY EXADECIMAL)
RETARDO: 1.5 SEG

INCREMENTA
DIGITO
DIGITO? 10?

Programa
list P=PIC16F84A
INCLUDE <P16F84A.INC>
ORG 0
INICIO
BSF STATUS,RP0
CLRF PORTB
MOVLW B'00001111'
MOVWF PORTA
BCF STATUS,RP0
Principal
MOVF PORTA,W
ANDLW B'00001111'
CALL TABLA
Display
END
R1
330

R3

R10

330
330

R11

R4

330

330

R12
330

R13

U1
R2
10k

16
15
4

OSC1/CLKIN
OSC2/CLKOUT
MCLR

330

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

PIC16F84A

17
18
1
2
3

R5
330

6
7
8
9
10
11
12
13

R6
330

R7
330

R8
330

2.- Elabore el hardware y el software de un contador UP/DOWN de un solo


dgito de 0 a F que cuente las pulsadas de un PUSH BUTTON conectado
en RA0 y esta cuenta puede ser ascendente o descendente segn el
estado lgico de otra entrada (Use el Push Button RA1).
list P=PIC16F84A

INCLUDE <P16F84A.INC>
INCLUDE <MACRO.INC>
CBLOCK 0X0C
CONTA
REG1
REG2
REG3
ENDC
ORG 0X00
BANK1
CLRF TRISB
BANK0
CLRF PORTB
OTRO CLRF CONTA
OTRO1
BTFSS PORTA,0
GOTO INCREMENTAR
GOTO DECREMENTAR
DECREMENTAR
BTFSS PORTA,1
GOTO DECREMENTAR
MOVF CONTA,W
CALL TABLA
MOVWF PORTB
CALL DELAY_1_5
DECF CONTA,F
CALL DELAY_1_5
MOVLW
XORWF
BTFSS
GOTO
GOTO

.16
CONTA,W
STATUS,Z
OTRO1
OTRO

DELAY_1_5
MOVLW
.50
MOVWF
REG1
L3
MOVLW
.50
MOVWF REG2
L2
MOVLW .50
MOVWF REG3
L1
DECFSZ REG3,F
GOTO L1
DECFSZ REG2,F
GOTO L2
DECFSZ REG1,F
GOTO
L3
RETURN
TABLA ADDWF PCL,F
RETLW 0X3F
RETLW 0X06
RETLW 0X5B
RETLW 0X4F
RETLW 0X66
RETLW 0X6D

END
R1
330

R10
R3

10k

330

R9
10k

R4
330

U1
R2
10k

16
15
4

OSC1/CLKIN
OSC2/CLKOUT
MCLR

RA0
RA1
RA2
RA3
RA4/T0CKI
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7

PIC16F84A

17
18
1
2
3

R5
330

6
7
8
9
10
11
12
13

R6
330

R7
330

R8
330

3.-Qu significa debounced?presente los diferentes metodos de


circuitos debounced?
Debounce
El procedimiento de eliminar incertidumbre de una entrada electromecnica tal
como un interruptor. Viene del trmino "bounce" que significa rebotar. Todos los
interruptores mecnicos rebotan cuando se acta sobre ellos. Los micros, como
son mucho mas rpidos, ven una rpida sucesion de estados abiertos y
cerrados. El debounce elimina esos rebotes y permite determinar el estado final
del interruptor sin ambigedades.

4.- Simule con Proteus un contador ascendente de 0 a 999 con displays.


CONTADOR DE 0-999

CODIGO ASSEMBLY PARA UN DISPLAY DE CATODO COMUN

CODE ASSEMBLY:
---------------------------------------------------------------------------------------------------------------------------CONTADOR DE 0-999
---------------------------------------------------------------------------------------------------------------------------1. ; **** PIC 16F8$A - CONTADOR DE 0-999 ****
2. list p=16F84A
3. #include P16F84A.inc
4. __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
5. ;**** Definicion de variables ****
6. Unidad

equ

0x0C

; Guardamos conteo unidad

7. Decena

equ

8. Centena equ

0x0D
0x0E

9. Contador1
demora.-

equ

0x0F

; Registro utilizado en

10. Contador2
demora.-

equ

0x10

; Registro utilizado en

11. Contador equ

0x11

; Control de Refresco de Display.-

12.
13. MuestroU equ

; Para control del 1 Display

14. MuestroD equ

; Para control del 2 Display

15. MuestroC equ

; Para control del 3 Display

16.
17. ;**** Inicio del Micro ****
18. Reset
19. org

0x00

; Aqu comienza el micro.-

20. goto

Inicio

; Salto a inicio de mi programa.-

21.
22.
23. ;**** Tabla de conversion BCD a 7 Segmentos ****
24. ; Se coloca al inicio para asegurar ubicacion en Pagina.25. org

0x05

26. BCD7SEG
comun
27. addwf PCL,1

; Origen del cdigo de tabla.; retlw b'gfedcba' para display catodo


; Se incrementa el contador del programa.-

28. DT 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0xFF, 0x6F
29.

30. ;**** Programa principal ****


31. ;**** Configuracion de puertos ****
32. Inicio
33. bsf

STATUS,RP0

; Pasamos de Banco 0 a Banco 1.-

34. clrf

TRISA

; PORTA como salida

35. clrf

TRISB

; PORTB

36. bcf

STATUS,RP0

; Paso del Banco 1 al Banco 0

37. clrf

PORTA

; Desactivo todos los Displays

38. clrf

Unidad

; Comienza en cero --> 0 0 0.-

39. clrf

Decena

40. clrf

Centena

41. goto

Actualizo_Display

como salida.-

; Esta rutina multiplexa los displays.-

42. ;**** Testeo de Pulsador ****


43. Bucle
44. incf

Unidad,1

; Incremeto Unidad.

45. movlw d'10'

; Si es 10 reseteo e incremento Decena

46. subwf Unidad,0

47. btfss

STATUS,Z

48. goto

Actualizo_Display

49. clrf

Unidad

; Si, reseteo.-

50. incf

Decena,1

; Incremento Decena.-

; no es 10

51. movlw d'10'

; Si Decena = 10, reseteo e incremento Centena

52. subwf Decena,0

53. btfss

STATUS,Z

54. goto

Actualizo_Display

55. clrf

Decena

; Si, reseteo.-

56. incf

Centena,1

; Incremento Centena.-

57. movlw d'10'

;
; No es 10.-

; Si es 10 Reseteo.-

58. subwf Centena,0


59. btfss

STATUS,Z

60. goto

Actualizo_Display

61. clrf

Centena

; No es 10.-

; Si, reseto

62. ;**** Se multiplexan los Display ****


63. Actualizo_Display
64. movlw d'20'

; Cargo Contador = 20

65. movwf Contador


mismo valor

; Para repeticiones de visualizacion del

66.

; durante 150 ms.-

67. Refresco
68. movfw Unidad
Unidad.-

; Obtengo codigo de 7 Segmentos para

69. call

BCD7SEG

70. bcf
PORTA,MuestroC
entiende al mirar rutina.-

; Apago Display de Centena, Se

71. movwf PORTB

; Cargo unidad en PORTB.-

72. bsf

PORTA,MuestroU

; Enciendo Display de Unidad.-

73. call

Demora_5ms

74. movfw Decena


Decena.75. call

BCD7SEG

; Obtengo codigo 7 Segmentos para

76. bcf

PORTA,MuestroU

; Apago Display de Unidad.-

77. movwf PORTB

; Cargo PORTB con Decena.-

78. bsf

PORTA,MuestroD

; Enciendo Display de Decena.-

79. call

Demora_5ms

80. movfw Centena


Centena.-

; Obtengo codigo de 7 Segmentos para

81. call

BCD7SEG

82. bcf

PORTA,MuestroD

; Apago Display de Decena.-

83. movwf PORTB

; Cargo PORTB con Centena.-

84. bsf

PORTA,MuestroC

; Enciendo Display Centena.-

85. call

Demora_5ms

86. decfsz Contador,1


veces el ciclo?

; Pregunto si ya se ha repetido 10

87. goto

; No, repito.-

88. return
89.
90. end

Refresco

; Regresa de la subrutina.-

CODIGO ASSEMBLY PARA UN DISPLAY DE ANODO COMUN


; **** Encabezado ****
list P=PIC16F84A
#include P16F84A.inc
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;**** Definicion de variables ****
Unidad equ 0x0C ; Guardamos conteo unidad
Decena equ 0x0D ;
Centena equ 0x0E ;
Contador1 equ 0x0F ; Registro utilizado en demora.Contador2 equ 0x10 ; Registro utilizado en demora.Contador equ 0x11 ; Control de Refresco de Display.MuestroU equ 2 ; Para control del 1 Display
MuestroD equ 1 ; Para control del 2 Display
MuestroC equ 0 ; Para control del 3 Display
;**** Inicio del Micro ****
Reset org 0x00 ; Aqu comienza el micro.goto Inicio ; Salto a inicio de mi programa.;**** Tabla de conversion BCD a 7 Segmentos ****
; Se coloca al inicio para asegurar ubicacion en Pagina.org 0x05 ; Origen del cdigo de tabla.BCD7SEG ; retlw b'gfedcba' para display catodo comun
addwf PCL,1 ; Se incrementa el contador del programa.DT 0xFF, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x98;para anao
comun
;DT 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0xFF, 0x6F; para catodo
comun
;**** Programa principal ****
;**** Configuracion de puertos ****
Inicio
bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.clrf TRISA ; PORTA como salida
clrf TRISB ; PORTB como salida.bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0
clrf PORTA ; Desactivo todos los Displays
movlw d'10' ; Si es 10 Reseteo.subwf Centena,0
btfss STATUS,Z
goto Actualizo_Display ; No es 10.clrf Centena ; Si, reseto
;**** Se multiplexan los Display ****

Actualizo_Display
movlw d'20' ; Cargo Contador = 20
movwf Contador ; Para repeticiones de visualizacion del mismo valor
; durante 150 ms.Refresco
movfw Unidad ; Obtengo codigo de 7 Segmentos para Unidad.call BCD7SEG ;
bcf PORTA,MuestroC ; Apago Display de Centena, Se entiende al mirar rutina.movwf PORTB ; Cargo unidad en PORTB.bsf PORTA,MuestroU ; Enciendo Display de Unidad.call Demora_5ms
movfw Decena ; Obtengo codigo 7 Segmentos para Decena.call BCD7SEG
bcf PORTA,MuestroU ; Apago Display de Unidad.movwf PORTB ; Cargo PORTB con Decena.bsf PORTA,MuestroD ; Enciendo Display de Decena.call Demora_5ms
movfw Centena ; Obtengo codigo de 7 Segmentos para Centena.call BCD7SEG
bcf PORTA,MuestroD ; Apago Display de Decena.movwf PORTB ; Cargo PORTB con Centena.bsf PORTA,MuestroC ; Enciendo Display Centena.call Demora_5ms
decfsz Contador,1 ; Pregunto si ya se ha repetido 10 veces el ciclo?
goto Refresco ; No, repito.goto Bucle ; Si, actualizo cuenta.;**** Demora ****
Demora_5ms
end

SISTEMAS DIGITALES

LABORATORIO 6

ALUMNOS:

Farfan Fernandez, Rosa

Becerra Robles, Christian Alexander

Dueas centeno, Salomon

2012

Firmas de confirmacin de trabajo en el laboratorio

Вам также может понравиться