Está en la página 1de 9

ESCUELA POLITCNICA NACIONAL

FACULTAD DE INGENIERA ELCTRICA Y ELCTRNICA


LABORATORIO DE SISTEMAS DIGITALES


INFORME:



SISTEMAS MICROPROCESADOS

Prctica #: 08 Tema: UTILIZACIN DE SUBRUTINAS, BARRIDO DE TECLADO


Fecha de Realizacin: 02/ 05 /2014
da mes ao


Realizado por:




Alumno (s): Alexandra Tituaa Andrade Grupo: 7B








(Espacio Reservado)
Fecha de entrega: ____ /____ /____ Calificacin:
da mes ao

f.___________________
Recibido por
Comentarios:
_______________________________________________________________________
_


OBJETIVO:

1. DISEAR UN CIRCUITO, Y EL SOFTWARE ASOCIADO PARA MANEJAR UN TECLADO MATRICIAL DE
16 TECLAS EN CONJUNTO CON 4 DISPLAY DE 7 SEGMENTOS. EN LOS DOS CASOS SE USAR LA
TCNICA DE BARRIDO.
2. DESARROLLAR PROGRAMAS EN FORMA MODULAR USANDO SUBRUTINAS.

TRABAJO PREPARATORIO:

-Se debe modificar el hardware de la prctica anterior, de manera que los datos a ser ingresados al
microcontrolador no provengan de interruptores, sino de un teclado matricial. Mantener todo el
hardware asociado al barrido de display. Se deben realizar las siguientes modificaciones:

-Desarrollar una subrutina que permita identificar o decodificar las teclas que se presionan en un
teclado de 16 teclas. Las teclas a identificar deben ser: 0, 1, 2, 3, 4, 5, 6, 8, 9, *, =, BORRAR; las otras
teclas quedarn sin funcin. El funcionamiento de esta rutina ser de la siguiente manera: conforme se
vayan aplastando las teclas de nmeros, stos deben ir apareciendo el dgito menos significativo, y
conforme se vayan presionando otros nmeros se van desplazando a la izquierda como en una
calculadora. Solo se pueden ingresar hasta dos dgitos, es decir el mayor nmero que se puede ingresar
ser el 99. Luego de ingresado el primer operando se debe presionar la tecla de multiplicacin (*) y
luego el segundo operando de hasta dos dgitos (de manera similar al primer operando), luego se
presiona el igual (=), y en los 4 display se debe mostrar el resultado de la operacin. Si en cualquier
momento se presiona la tecla BORRAR durante el ingreso de los nmeros, el display vuelve a 0000 y se
reinicia el ingreso del operando. Si se presiona BORRAR cuando se est mostrando el resultado de la
operacin anterior, se muestra 0000 y se vuelve a iniciar con el ingreso del primer operando.

/*
* prepa8.asm
*
* Created: 5/1/2014 7:11:58 PM
* Author: C?sar
*/
.include "m164pdef.inc"
;definicion de variables
.def tempo=r16
.def tempo1=r20
.def contador=r22
.def conver=r18
.def K=r23
.def tecla=r24
.def cont=r19
.def anterior=r21

.dseg
BINARIO: .BYTE 2
BINARIO1: .BYTE 2
BCD0: .BYTE 5
BCD01: .BYTE 4
DIG0: .BYTE 4
.cseg
.org 0x0
;configuracion de puertos
LDI tempo,0b01111111
OUT DDRA,tempo
LDI tempo,0b10000000
OUT PORTA,tempo
LDI tempo,0b11111111
OUT PORTC,tempo
LDI tempo,0b00001111
OUT DDRC,tempo
OUT DDRB,tempo
LDI tempo,0b11110000
OUT PORTB,tempo
LDI tempo,0b00000001
OUT DDRD,tempo
LDI tempo,0b11111110
OUT PORTD,tempo
LDI K,10

IN tempo,MCUCR
ANDI tempo,0b11101111
OUT MCUCR,tempo

;INICIALIZO EL STACK
LDI tempo,HIGH(RAMEND)
OUT SPH,tempo
LDI tempo,LOW(RAMEND)
OUT SPL,tempo

LDI anterior,16

LIMPIAR:
CLR tempo
STS BCD0,tempo
STS BCD0+1,tempo
STS BCD0+2,tempo
STS BCD0+3,tempo

LDI XH,HIGH(BCD0+3)
LDI XL,LOW(BCD0+3)
LDI YH,HIGH(BCD01)
LDI YL,LOW(BCD01)
LAZO1:
LDI cont,2
INICIO:
CALL BARRIDO_TECLADO
CPI tecla,12
BREQ LIMPIAR

cpi cont,1
breq CAMBB
STS BCD0+3,tecla
ST Y+,tecla
jmp sale

CAMBB:
LDS tempo,BCD0+3
STS BCD0+2,tempo
STS BCD0+3,tecla
ST Y+,tecla
sale:
DEC cont
BRNE INICIO

;#################################################
MULTIP: CALL BARRIDO_TECLADO
CPI tecla,12
BREQ LIMPIAR
CPI tecla,13
BRNE LIMPIAR

;#################################################

LDI cont,2
CLR tempo
STS BCD0,tempo
STS BCD0+1,tempo
STS BCD0+2,tempo
STS BCD0+3,tempo

LDI XH,HIGH(BCD0+4)
LDI XL,LOW(BCD0+4)

INICIO1:
CALL BARRIDO_TECLADO
CPI tecla,12
BREQ LIMPIAR

cpi cont,1
breq CAMBB1
STS BCD0+3,tecla
ST Y+,tecla
jmp sale1

CAMBB1:
LDS tempo,BCD0+3
STS BCD0+2,tempo
STS BCD0+3,tecla
ST Y+,tecla

sale1:
DEC cont
BRNE INICIO1

ACEPTAR: CALL BARRIDO_TECLADO
CPI tecla,12
BREQ LIMPIAR1
CPI tecla,10
BRNE LIMPIAR1

JMP CLAVE
LIMPIAR1:

JMP LIMPIAR

CLAVE:
LDS tempo,BCD01
mul tempo,k
LDS tempo1,BCD01+1
mov tempo,r0
ADD TEMPO1,TEMPO
sts BINARIO,TEMPO1

LDS tempo,BCD01+2
mul tempo,k
LDS tempo1,BCD01+3
mov tempo,r0
ADD TEMPO1,TEMPO
sts BINARIO1,TEMPO1
CALL MULTIPLICACION
CALL BIN_BCD
CALL BCD_7SEG

SALIDA:
RJMP LAZO1

;SUBRUTINA PARA EL BARRIDO DE TECLADO
BARRIDO_TECLADO:
CALL BCD_7SEG
CALL BARRIDO_DISPLAY
LDI tecla,16
LDI tempo,0b11111110
OUT PORTB,tempo
SBIS PINB,4
LDI tecla,13
SBIS PINB,5
LDI tecla,2
SBIS PINB,6
LDI tecla,3
SBIS PINB,7
LDI tecla,16

LDI tempo,0b11111101
OUT PORTB,tempo
SBIS PINB,4
LDI tecla,1
SBIS PINB,5
LDI tecla,5
SBIS PINB,6
LDI tecla,6
SBIS PINB,7
LDI tecla,12

LDI tempo,0b11111011
OUT PORTB,tempo
SBIS PINB,4
LDI tecla,4
SBIS PINB,5
LDI tecla,8
SBIS PINB,6
LDI tecla,9
SBIS PINB,7
LDI tecla,16

LDI tempo,0b11110111
OUT PORTB,tempo
SBIS PINB,4
LDI tecla,7
SBIS PINB,5
LDI tecla,0
SBIS PINB,6
LDI tecla,10
SBIS PINB,7
LDI tecla,16

CP tecla,anterior
BREQ BARRIDO_TECLADO
MOV anterior,tecla
CPI tecla,16
BREQ BARRIDO_TECLADO

RET

MULTIPLICACION:
PUSH r16
PUSH r17
LDS r16,BINARIO

LDS r17,BINARIO1
MUL r16,r17
STS BINARIO,r0
STS BINARIO+1,r1
LDI r16,0b11111111
OUT PORTD,r16
POP r17
POP r16
RET

; Subrutina de Binario a BCD para 16 bits
BIN_BCD:
PUSH r16
PUSH r17
PUSH r18
PUSH r19
LDS r16,BINARIO
LDS r18,BINARIO+1
CLR r17

BIN_BCD_0: SUBI r16,232 ;
SBCI r18,3
BRCS BIN_BCD_CEN
INC r17
RJMP BIN_BCD_0
BIN_BCD_CEN:LDI r19,232
ADD r16,r19
LDI r19,3
ADC r18,r19
STS BCD0,r17
CLR r17
BIN_BCD_1: SUBI r16,100
SBCI r18,0
BRCS BIN_BCD_DEC
INC r17
RJMP BIN_BCD_1
BIN_BCD_DEC:SUBI r16,-100
STS BCD0+1,r17
CLR r17
BIN_BCD_2: SUBI r16,10
BRCS BIN_BCD_UNI
INC r17
RJMP BIN_BCD_2
BIN_BCD_UNI:SUBI r16,-10
STS BCD0+2,r17
STS BCD0+3,r16

POP r19
POP r18
POP r17
POP r16
RET

;SUBRUTINA PARA CONVERTIR 4 DIGITOS DECIMALES A 7SGEMENTOS(DISPLAY) Y ALMACENARLOS EN LA SRAM
BCD_7SEG:
PUSH ZH
PUSH ZL
PUSH YH
PUSH YL
PUSH XH
PUSH XL
PUSH r16
PUSH r17

LDI XH,HIGH(BCD0)
LDI XL,LOW(BCD0)
LDI YH,HIGH(DIG0)
LDI YL,LOW(DIG0)
LDI r17,4
BCD_7SEG_0: LDI ZH,HIGH(TABLA_BCD_7<<1)
LDI ZL,LOW(TABLA_BCD_7<<1)

LD r16,X+
ADD ZL,r16
CLR r16
ADC ZH,r16
LPM r16,Z
ST Y+,r16
DEC r17
BRNE BCD_7SEG_0

POP r17
POP r16
POP XL
POP XH
POP YL
POP YH
POP ZL
POP ZH
RET

TABLA_BCD_7:
;gfedcba gfedcba
.db 0b00111111,0b00000110 ;0,1
.db 0b01011011,0b01001111 ;2,3
.db 0b01100110,0b01101101 ;4,5
.db 0b01111101,0b00000111 ;6,7
.db 0b01111111,0b01101111 ;8,9
.db 0b01110111,0b01111100 ; (10)A,B(11)
.db 0b00111001,0b01011110 ; (12)C,D(13)
.db 0b01110110,0b01110001 ; (14)X,F(15)

;SUBRUTINA PARA EL BARRIDO DE DISPLAYS DE 4 DIGITOS ALMACENADOS EN LA SRAM
BARRIDO_DISPLAY:

PUSH r16
PUSH r17
PUSH YH
PUSH YL
PUSH r18

LDI r17,4
LDI r18,0b11111110
LDI YH,HIGH(DIG0)
LDI YL,LOW(DIG0)

BARRIDO: LDI r16,0b11111111
OUT PORTC,r16
LD r16,Y+
OUT PORTA,r16
OUT PORTC,r18
CALL RET_BARRIDO
SEC
ROL r18
DEC r17
BRNE BARRIDO
LDI r16,0b11111111
OUT PORTC,r16

POP r18
POP YL
POP YH
POP r17
POP r16
RET

RET_BARRIDO:
LDI r16,255
RET_BARRIDO_0:
NOP
DEC r16
BRNE RET_BARRIDO_0
RET

CIRCUITO IMPLEMENTADO


PC6/TOSC1/PCINT22
25
PC5/TDI/PCINT21
24
PC4/TDO/PCINT20
23
PC3/TMS/PCINT19
22
PC2/TCK/PCINT18
21
PC1/SDA/PCINT17
20
PC0/SCL/PCINT16
19
AVCC
27
AREF
29
PC7/TOSC2/PCINT23
26
PA6/ADC6/PCINT6
31
PA5/ADC5/PCINT5
32
PA4/ADC4/PCINT4
33
PA3/ADC3/PCINT3
34
PA2/ADC2/PCINT2
35
PA1/ADC1/PCINT1
36
PA0/ADC0/PCINT0
37
PA7/ADC7/PCINT7
30
PB6/MISO/PCINT14
2
PB5/MOSI/PCINT13
1
PB4/SS/OC0B/PCINT12
44
PB3/AIN1/OC0A/PCINT11
43
PB2/AIN0/INT2/PCINT10
42
PB1/T1/CLKO/PCINT9
41
PB0/XCK0/T0/PCINT8
40
PB7/SCK/PCINT15
3
PD6/ICP/OC2B/PCINT30
15
PD5/OC1A/PCINT29
14
PD4/OC1B/XCK1/PCINT28
13
PD3/INT1/TXD1/PCINT27
12
PD2/INT0/RXD1/PCINT26
11
PD1/TXD0/PCINT25
10
PD0/RXD0/PCINT24
9
PD7/OC2A/PCINT31
16
RESET
4
XTAL1
8
XTAL2
7
ATMEGA164P
Reset
R1
1.5k
R2
200
Reset
C1
0.1uF
A0
A1
A2
A3
A4
A5
A6
c3
c2
c1
c0
Reset
A
0
A
2
A
3
c
0
c
1
A
5
A
4
A
1
A
6
A
7
c
2
c
3
U9
NOT
U10
NOT
U11
NOT
U12
NOT
1 2 3
6 5 4
8 9
=
7
++ C
ON
0
A
B
C
D
1 2 4 3
B0
B1
B2
B3
B4
B5
B6
B7
B
7
B
6
B
5
B
4
B0
B1
B2
B3
BIBLIOGRAFA:
Set de instrucciones de AVR
Manual ATMEGA164p
Apuntes de clase Ing. David Pozo,2014

También podría gustarte