Académique Documents
Professionnel Documents
Culture Documents
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 Cdigo: .include "C:\VMLAB\include\m8def.inc" .CSEG .ORG $00 RJMP INICIO INICIO: LDI R16,$FF ;declaracin de puertos de salida OUT DDRD,R16 LDI R16,$00 ;el display inicialmente ESTA APAGADO OUT PORTD,R16 ;muestra en portD ;ESPERA PRESIN Y LIBERACIN DE PULSADOR LECTURA: IN R20,PINB ANDI R20,0b00100000 CPI R20,0 BREQ LECTURA ESPERA: SIMULACION
U1
14 15 16 17 18 19 9 10 PB0/ICP1 PB1/OC1A PB2/SS/OC1B PB3/MOSI/OC2 PB4/MISO PB5/SCK PB6/TOSC1/XTAL1 PB7/TOSC2/XTAL2 PC0/ADC0 PC1/ADC1 PC2/ADC2 PC3/ADC3 PC4/ADC4/SDA PC5/ADC5/SCL PC6/RESET PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4/T0/XCK PD5/T1 PD6/AIN0 PD7/AIN1 23 24 25 26 27 28 1 2 3 4 5 6 11 12 13
IN R20,PINB ANDI R20,0b00100000 CPI R20,0 BRNE ESPERA LDI R17,4 ;convierte BCD para segmentos de display LDI R31,HIGH(TABLA*2) LDI R30,LOW(TABLA*2) ADD R30,R17 LPM R18,Z OUT PORTD,R18 RJMP LECTURA ;para convertir de BCD a segmentos del display TABLA: .DB $3F,$06,$5B,$4F,$66,$6D,$7C,$07
R1
10k
21 20
DIAGRAMA DE FLUJO
INICIO
MOSTRAR 4 EN PORT B
SI PULSADOR NO
PREGUNTA 2 (A): Escriba una sub rutina que determina si el nmero grabado en R18 es par. Si es par el registro R16=1, si es impar R16=0. CODIGO: .include "C:\VMLAB\include\m8def.inc" .DEF PAROIMPAR=R24 RJMP INICIO INICIO: ;DECLARAMOS LA PILA LDI R20,LOW(RAMEND) LDI R21,HIGH(RAMEND) OUT SPH,R21 OUT SPL,R20 ;AGINAMOS EL VALOR DE R18: LDI R18,8 RCALL EVALUA MOV R16,PAROIMPAR FIN: RJMP FIN EVALUA: ;GUARDAMOS R18 EN LA PILA PUSH R18 LDI R19,2 ;RESTAMOS SIEMPRE 2 A R18 RESTA: SIMULACIN: Si R18 es par: SUB R18,R19 CP R18,R19 BRLO SALTA RJMP RESTA SALTA: ;SI LLEGA A 0 SERA PAR, SINO SERA IMPAR CPI R18,0 BREQ PAR RJMP IMPAR PAR: LDI PAROIMPAR,1 ;CARGAMOS R18 DE LA PILA Y DEVOLVEMOS LA SUBRUTINA CON RET POP R18 RET IMPAR: ;CARGAMOS R18 DE LA PILA Y DEVOLVEMOS LA SUBRUTINA CON RET LDI PAROIMPAR,0 POP R18 RET
Si R18 es impar:
DIAGRAMA DE FLUJO
PROBLEMA 2(B): Escriba un programa para saber cuntos pares estn grabados en la memoria flash. La cantidad se muestra en los diodos leds conectados al puerto B. Nmeros: .DB 5, 6, 2, 14, 0, 13 (nmeros grabados en la tabla). CDIGO: .include "C:\VMLAB\include\m8def.inc" .DEF CONTEOIMPAR=R23 .DEF CONTEOPAR=R22 .CSEG .ORG $00 RJMP INICIO INICIO: ;DECLARAMOS LA PILA LDI R20,LOW(RAMEND) LDI R21,HIGH(RAMEND) OUT SPH,R21 OUT SPL,R20 CLR R16 ;LOS CONTEOS ESTARAN INCIALMENTE EN CEO CLR CONTEOPAR CLR CONTEOIMPAR ;DECLARO EL PUERTO B COMO SALIDA LDI R17,$FF OUT DDRB,R17 ;SALIDA INICIALMENTE EN CERO OUT PORTB,R16 ;PARA LA TABLA NUMEROS: LDI ZL,LOW(TABLA*2) LDI ZH,HIGH(TABLA*2) ADD R30,R16 LPM R18,Z RCALL EVALUA INC R16 CPI R16,6 ;SOLO EVALUA LA CANTIDAD DE NUMEROS DE LA TABLA BREQ MUESTRA
RJMP NUMEROS MUESTRA: OUT PORTB,CONTEOPAR FIN: RJMP FIN EVALUA: ;GUARDAMOS R18 EN LA PILA PUSH R18 LDI R19,2 ;RESTAMOS SIEMPRE 2 A R18 RESTA: SUB R18,R19 CP R18,R19 BRLO SALTA RJMP RESTA SALTA: ;SI LLEGA A 0 SERA PAR, SINO SERA IMPAR CPI R18,0 BREQ PAR RJMP IMPAR PAR: INC CONTEOPAR;CARGAMOS R18 DE LA PILA Y DEVOLVEMOS LA SUBRUTINA CON RET POP R18 RET IMPAR: ;CARGAMOS R18 DE LA PILA Y DEVOLVEMOS LA SUBRUTINA CON RET INC CONTEOIMPAR POP R18 RET TABLA: .DB 5,6,2,14,0,13
U1
14 15 16 17 18 19 9 10 PB0/ICP1 PB1/OC1A PB2/SS/OC1B PB3/MOSI/OC2 PB4/MISO PB5/SCK PB6/TOSC1/XTAL1 PB7/TOSC2/XTAL2 PC0/ADC0 PC1/ADC1 PC2/ADC2 PC3/ADC3 PC4/ADC4/SDA PC5/ADC5/SCL PC6/RESET PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4/T0/XCK PD5/T1 PD6/AIN0 PD7/AIN1 23 24 25 26 27 28 1 2 3 4 5 6 11 12 13
21 20
DIAGRAMA DE FLUJO:
INICIO
N=0
SUBRUTINA
N=N+1
NO
FIN
PREGUNTA 3 Escriba un programa que muestre la cuenta desde 4 hasta 36, de 4 en 4, en 6 diodos leds que estn conectados en PB2, PB3, PB4, PB5, PB6 Y PB7 (LSB). El retardo es de 0.7 segundos. Use el temporizador 1, modo CTC, con un pre escalador igual a 64. CDIGO: .INCLUDE "C:\VMLAB\INCLUDE\M8DEF.INC" .CSEG .ORG 0 RJMP INICIO INICIO: LDI R20,0 ;REGISTRO QUE LLEVARA EL CONTEO LDI R16,$FF ; CONFIGURAMOS PORTB COMO SALIDA OUT DDRB,R16 RCALL CONFIGURA_TMR1 LDI R16,$20 ; INICIALIZAMOS CUENTA EN 4 (DESPLAZADO 2 BITS) OUT PORTB, R16 LAZO: IN R16, TIFR ; SONDEAMOS OCF1A (BIT4 DE TIFR) ANDI R16,$10 ; ESPERAMOS QUE SEA 1 CPI R16,$10 BRNE LAZO IN R16,TIFR ; SE PONE 0 EL BIT OCF1A ORI R16,$10 OUT TIFR,R16 ;SE INCREMENTA LA CUENTA LDI ZL,LOW(TABLA*2) LDI ZH,HIGH(TABLA*2) ADD R30,R20 LPM R18,Z INC R20 CPI R20,10 BREQ INICIO OUT PORTB,R18 RJMP LAZO ; RETORNO AL LAZO CONFIGURA_TMR1: ; PREESCALAMIENTO 1:64 ; MODO CTC LDI R16, 0B00000000; OUT TCCR1A, R16 LDI R16, 0B00001011; OUT TCCR1B, R16 ; VALOR DE REGISTRO OCR1A: 10936,5 ...REDONDEARE A 10936($2AB8) LDI R17,$2A LDI R16,$B8 OUT OCR1AH,R17 ; (1US)X(64)X(OCR1A+1) = 0.7 SEG OUT OCR1AL,R16 RET TABLA: ;SON LOS VALORES DE LA SERIE CONSIDERANDO PB7 COMO LSB .DB 0B00100000,0B00010000 .DB 0B00110000,0B00001000 .DB 0B00101000,0B00011000 .DB 0B00111000,0B00000100 .DB 0B00100100
21 20
D1
D2
D3
D4
D5
D6
VISUALIZADO EN DISPLAY
U1
6 5 4 3 2 1 14 15 16 17 18 19 9 10 PB0/ICP1 PB1/OC1A PB2/SS/OC1B PB3/MOSI/OC2 PB4/MISO PB5/SCK PB6/TOSC1/XTAL1 PB7/TOSC2/XTAL2 PC0/ADC0 PC1/ADC1 PC2/ADC2 PC3/ADC3 PC4/ADC4/SDA PC5/ADC5/SCL PC6/RESET PD0/RXD PD1/TXD PD2/INT0 PD3/INT1 PD4/T0/XCK PD5/T1 PD6/AIN0 PD7/AIN1 23 24 25 26 27 28 1 2 3 4 5 6 11 12 13
21 20
DIAGRAMA DE FLUJO
INICIO
CONFIGURAR EL TEMNPORIZADOR
CUENTA = 4
SE CUMPLE EL TIEMPO?
NO
SI
CUENTA = CUENTA+4