Preparatorio_7.docx
January 2, 2018 | Author: Víctor Renato Díaz Cajas | Category: N/A
Short Description
Download Preparatorio_7.docx...
Description
ESCUELA POLITÉCNICA NACIONAL DEPARTAMENTO DE CONTROL Y AUTOMATIZACIÓN
LABORATORIO DE SISTEMAS MICROPROCESADOS PREPARATORIO
TEMA: BARRIDO DE DISPLAY PRACTICA: 7
REALIZADO POR: GRUPO:
Bryan Olmos
GR13
HORARIO: VIERNES DE 14 - 16 FECHA DE ENTREGA: 03/10/2013
Preparatorio 7 Objetivo: DISEÑAR UN CIRCUITO, Y EL SOFTWARE ASOCIADO PARA MANEJAR 4 DISPLAY DE 7 SEGMENTOS USANDO LA TÉCNICA DE BARRIDO. Consulte la distribución de pines de los display de 7 segmentos a ser utilizados Por facilidad en esta práctica usaremos un display de 7 segmentos de 4 digitos
Diagrama de conexión:
Diseñe un circuito de barrido de 4 display con el micro controlador MEGA164p usando solamente dos puertos, pues los otros dos puertos son usados para el ingreso de los datos. 1 R4
R3
R2
R1
1K
1K
1K
1K
Q4
R8
2N3906 1K
Q3
R7
2N3906 1K
Q2
R6
2N3906 1K
Q1
R5
2N3906 1K
U1
U2
0 0 0 0 0 0 0
37 36 35 34 33 32 31 30
0 0 0 0 0 0 0 0
8 7
19 20 21 22 23 24 25 26
PA0/ADC0/PCINT0 PA1/ADC1/PCINT1 PA2/ADC2/PCINT2 PA3/ADC3/PCINT3 PA4/ADC4/PCINT4 PA5/ADC5/PCINT5 PA6/ADC6/PCINT6 PA7/ADC7/PCINT7 PC0/SCL/PCINT16 PC1/SDA/PCINT17 PC2/TCK/PCINT18 PC3/TMS/PCINT19 PC4/TDO/PCINT20 PC5/TDI/PCINT21 PC6/TOSC1/PCINT22 PC7/TOSC2/PCINT23 XTAL1 XTAL2
PB0/XCK0/T0/PCINT8 PB1/T1/CLKO/PCINT9 PB2/AIN0/INT2/PCINT10 PB3/AIN1/OC0A/PCINT11 PB4/SS/OC0B/PCINT12 PB5/MOSI/PCINT13 PB6/MISO/PCINT14 PB7/SCK/PCINT15 PD0/RXD0/PCINT24 PD1/TXD0/PCINT25 PD2/INT0/RXD1/PCINT26 PD3/INT1/TXD1/PCINT27 PD4/OC1B/XCK1/PCINT28 PD5/OC1A/PCINT29 PD6/ICP/OC2B/PCINT30 PD7/OC2A/PCINT31 AREF AVCC RESET
40 41 42 43 44 1 2 3
1 2 3 4 5 6 7
1B 2B 3B 4B 5B 6B 7B
COM 1C 2C 3C 4C 5C 6C 7C
9 16 15 14 13 12 11 10
RN1 1 2 3 4 5 6 7 8
16 15 14 13 12 11 10 9
ULN2003A 9 10 11 12 13 14 15 16
47
29 27 4
ATMEGA164P
Escribir una rutina para convertir de binario a BCD. Con 4 dígitos decimales el número más grande a convertir es el 9999, ese dato requiere 14 bits en binario para ser almacenado, esto debe tomarse en consideración en su rutina. barrido: push push push push push
lds r16,variable7 out portc, r16 ldi r16,0b11111101 out portd, r16 call rutinaretardo
r16 r17 r18 r19 r20
ldi r16,0b11111111 out portd, r16
ldi r16,0b11111111 out portd,r16 ;DIGITO2
;DIGITO0
lds r16,digito2 sts variablebcd,r16 call bcddisplay lds r16,variable7 out portc, r16 ldi r16,0b11111011 out portd, r16 call rutinaretardo
lds r16,digito0 sts variablebcd,r16 call bcddisplay lds r16,variable7 out portc, r16 ldi r16,0b11111110 out portd, r16 call rutinaretardo ldi r16,0b11111111 out portd,r16 ;DIGITO1 lds r16,digito1 sts variablebcd,r16 call bcddisplay
ldi r16,0b11111111 out portd,r16 ;DIGITO3 lds r16,digito3 sts variablebcd,r16 call bcddisplay lds r16,variable7
out portc, r16 ldi r16,0b11110111 out portd, r16 call rutinaretardo
pop r18 pop r17 pop r16
pop r20 pop r19
ret
Escribir un programa que permita multiplicar dos números en binario que son ingresados por medio de interruptores a dos puertos; cada uno de los números puede variar de 0 a 99. Aumentar al circuito de barrido de display un interruptor, el que si está en 0L, debe mostrar en base 10 en los dos primeros display el primer número a multiplicar, en los dos restantes el otro número. Si el interruptor está en 1L debe mostrar el resultado de la multiplicación en base 10 ocupando los 4 diplay. .include "m164pdef.inc" .def aux=r16 .def valor=r17 .def valor2=r18 .def aux2=r18 .dseg .org 0x100 registroalto: .byte registrobajo: .byte digito3: .byte digito2: .byte digito1: .byte digito0: .byte variablebcd:.byte 1 variable7: .byte .cseg
1 1 1 1 1 1 1
.org 0x0 ldi aux,0b00000000 out ddra, aux ldi aux,0b00000000 out ddrc, aux ldi aux,0b00001111 out ddrd, aux ldi aux,0b11111111 out ddrc, aux in aux, mcucr andi aux, 0b11101111 out mcucr, aux ldi out ldi out
aux,high(ramend) sph, aux aux, low(ramend) spl, aux
Programa: in aux, pinc andi aux, 0b10000000 cpi aux, 0b10000000
breq multiplicacion in valor,pina ldi aux,0b11111111 out portb,aux ldi aux, 0 sts registroalto, aux sts registrobajo, valor mostrar: rcall conversionbinbcd rcall barrido rjmp Programa multiplicacion: in valor,pina andi valor,0b01111111 in valor2,pinb andi valor,0b01111111 andi valor2,0b01111111 mul valor,valor2 sts registroalto, r1 sts registrobajo, r0 rjmp mostrar
conversionbinbcd: push push push push push push Push push push
r16 r17 r18 r19 r20 r21 r22 r23 r24
lds r17, registroalto lds r16, registrobajo clr r19 salto_miles: inc r19 subi r16,0xE8 sbci r17,0x3 brcc salto_miles dec r19 ldi r23,0xE8 ldi r24,0x3 add r16,r23 adc r17,r24 clr r20 salto_centenas: inc r20 subi r16,0x64 sbci r17,0x00 brcc salto_centenas dec r20 ldi r23,0x64 ldi r24,0x00 add r16,r23 adc r17,r24 clr r21 salto_decenas:
inc r21 subi r16,0xA brcc salto_decenas dec r21 subi r16,-0xA mov r22,r16 sts sts sts sts
digito3, digito2, digito1, digito0,
pop pop pop pop pop pop pop pop pop
r24 r23 r22 r21 r20 r19 r18 r17 r16
r19 r20 r21 r22
ret barrido: push push push push push
r16 r17 r18 r19 r20
ldi r16,0b11111111 out portd, r16 ;DIGITO0 lds r16,digito0 sts variablebcd,r16 rcall bcddisplay lds r16,variable7 out portc, r16 ldi r16,0b11111110 out portd, r16 rcall rutinaretardo ldi r16,0b11111111 out portd,r16 ;DIGITO1 lds r16,digito1 sts variablebcd,r16 rcall bcddisplay lds r16,variable7 out portc, r16 ldi r16,0b11111101 out portd, r16 rcall rutinaretardo ldi r16,0b11111111 out portd,r16 ;DIGITO2 lds r16,digito2 sts variablebcd,r16 rcall bcddisplay lds r16,variable7
out portc, r16 ldi r16,0b11111011 out portd, r16 rcall rutinaretardo ldi r16,0b11111111 out portd,r16 ;DIGITO3 lds r16,digito3 sts variablebcd,r16 rcall bcddisplay lds r16,variable7 out portc, r16 ldi r16,0b11110111 out portd, r16 rcall rutinaretardo pop pop pop pop pop ret
r20 r19 r18 r17 r16
bcddisplay: push r16 push zh push zl ldi ldi lds add clr adc lpm sts
zh,high(tabla
View more...
Comments