Anda di halaman 1dari 2

D:\Display7anodocomun-7447-PIC.

asm

;*******************************************************************
;* Nombre :
Display7seg-7447-Pulsador.ASM
*
;* Autor
:
JeysonMG
*
;* Notas
: - En un display de 7segmentos se muestra la cantidad *
;*
de veces que es oprimido un pulsador.
*
;*
- Contador de 0 a 9. Reinicia en 0
*
;*
- Se hace uso de un 7447 para conectar el PIC
*
;*
con el display (nodo comn)
*
;*
*
;*
- Configuracion Pull-Up
*
;*
*
;*
O +5v
*
;*
|
*
;*
<
*
;*
R = 1Kohm >
*
;*
<
*
;*
|
*
;*
|----------------o RA4
*
;*
|
*
;*
| o
*
;*
Pulsador |-|
*
;*
| o
*
;*
|
*
;*
_____
OBS:
*
;*
___
Bajo esta configuracin, cuando es
*
;*
_
pulsado, envia un 0 lgico al PIC
*
;*
*
;*******************************************************************
;
;
;
;
;
;
;

PIC
---- 7447 -------- > Display
-------------------RB0
|
A
RB1
|
B
RB2
|
C
RB3
|
D
Pulsador ---> RA4

__config
list
#include

_CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC


p=16f84a
<p16f84a.inc>

cblock
0x0C
Variable_usada_para_retardo0
Variable_usada_para_retardo1
endc

; A partir de esta direccion


; es la memoria RAM del usuario

#define

; Pulsador en RA4

ORG
Inicio

Pulsador

0x00
bsf
bsf
clrf
bcf
clrf

PORTA,4

STATUS,RP0
TRISA,.4
TRISB
STATUS,RP0
PORTB

;
;
;
;
;

Se accede a banco de memoria 1


Configuramos RA4 como entrada
RB<7:0> config como salidas
Se accede a banco de memoria 0
PORTB inicia en 0
1

D:\Display7anodocomun-7447-PIC.asm
Principal

btfsc
Pulsador
; Pulsador=0?
goto
Principal
; Falso. Entonces, vuelvo a preguntar
; Si pulsador=0, hago un retardo de 100ms y vuelvo a preguntar
; con el fin de eliminar los "rebotes"
call
Retardo_100ms
btfsc
Pulsador
; Pulsador=0?
goto
Principal
; Ahora bien, eliminado el rebote, preguntamos si el valor actual
; de PORTB es igual a 9. Si fuese as, reinicio PORTB en 0.
; Caso contrario, incremento el contenido de PORTB
movlw
.9
; Cargamos en W el valor de 9
subwf
PORTB,W
; W = PORTB-W
; Si el resultado de la resta es 0, el bit Z del registro STATUS
; se hace igual a 1, asi que preguntamos cual es su estado luego
; de la operacion anterior.
btfss
STATUS,Z
; Z = 1?
goto
Incrementar ; Falso. Voy a etiq. "Incrementar"
clrf
PORTB
; Si Z=1. Reinicio PORTB en 0
goto
Preguntar
; Y voy directo a "Preguntar"
Incrementar incf
PORTB,F
; PORTB=PORTB+1
; Preguntamos si ya hemos soltado el pulsador. Si no hacemos esto
; PORTB incrementar varias veces, cuando a tu parecer, solo has
; oprimido el pulsador una sola vez....
Preguntar
btfss
Pulsador
; Pulsador=1?
goto
Preguntar ; Falso. Significa que no he soltado
; el pulsadorentonces vuelvo a preguntar.
; Si pulsador=1 significa que ya solte el pulsador,
; y regreso a Principal
goto
Principal
; Subrutina de Retardo_100ms:
Retardo_100ms:
movlw
movwf
movlw
movwf
goto
decfsz
goto
decfsz
goto
goto
goto
goto
return

.110
Variable_usada_para_retardo0
.181
Variable_usada_para_retardo1
$+1
Variable_usada_para_retardo1, 1
$-2
Variable_usada_para_retardo0, 1
$-6
$+1
$+1
$+1

END ; Directiva para indicar que termina el programa


; Lo que est despues no forma parte del programa

Anda mungkin juga menyukai