0% encontró este documento útil (0 votos)
59 vistas3 páginas

Programa en ensamblador para ATmega328P

Este documento describe un programa en lenguaje ensamblador para un microcontrolador ATmega328P. El programa controla los LEDs conectados al puerto B según el estado de los interruptores en el puerto D de la siguiente manera: 1) Parpadea el LED en PB0 cada 1/4 de segundo si PD0 es 1, de lo contrario permanece apagado. 2) Establece PB1 según la lógica AND y OR de PD2, PD3, PD4 y PD5. 3) Establece PB2 según la lógica XOR de PD6 y PD7.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
59 vistas3 páginas

Programa en ensamblador para ATmega328P

Este documento describe un programa en lenguaje ensamblador para un microcontrolador ATmega328P. El programa controla los LEDs conectados al puerto B según el estado de los interruptores en el puerto D de la siguiente manera: 1) Parpadea el LED en PB0 cada 1/4 de segundo si PD0 es 1, de lo contrario permanece apagado. 2) Establece PB1 según la lógica AND y OR de PD2, PD3, PD4 y PD5. 3) Establece PB2 según la lógica XOR de PD6 y PD7.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Esquivel Martínez Jorge Antonio

Suponga que el microcontrolador ATmega328P tiene conectados al puerto D interruptores, que


a su vez se conectan a tierra, y tiene conectados al puerto B LEDs. Escriba un programa en
lenguaje ensamblador que haga lo siguiente:

a) Si la entrada en PD0 es 1, el led conectado a PB0 parpadea cada ¼ de segundo; si no,


el led conectado a PB0 permanece apagado.

b) PB1 = (PD2 AND PD3) OR (PD4 AND PD5)

c) PB2 = PD6 XOR PD7 La respuesta en las salidas PB1 y PB2 ante cambios en las entradas
correspondientes, debe ser inmediata.

.DEF TEMP=R16 //nombres a registros


.DEF TEMP2=R17
.DEF TEMP3=R18
.DEF TEMP4=R19
.DEF TEMP5=R20
.DEF TEMP6=R21
.DEF TEMP7=R22
.EQU MAXIMO = 244
.CSEG
.ORG 0

//Entradas y salidas
LDI TEMP,0X00
OUT DDRD,TEMP
LDI TEMP,0XFF
OUT DDRB,TEMP

//Config timer
LDI TEMP,0X05
OUT TCCR0B,TEMP
LDI TEMP,0X00
OUT TCNT0,TEMP
LDI R23,0X01
LDI R24,0X00

INICIO:
IN TEMP,TCNT0
CPI TEMP,MAXIMO //compara si timer llego a maximo
BRLO INICIO //salta si es mayor
CALL ATRIBUYE
CPI TEMP2,0X01
BREQ PRENDE
AND R24,TEMP2

LOOP:
CALL B1 //llama subrutina
CALL B2
OUT PORTB,R24
LDI TEMP,0X00
OUT TCNT0,TEMP
RJMP INICIO
B1:
LDI TEMP,0X00
LDI R28,0X00
OR R28,TEMP4 //op lógica OR
AND R28,TEMP5 //op lógica AND
OR TEMP,TEMP6
AND TEMP,TEMP7
OR TEMP,R28
ANDI TEMP,0B00000010 //enmascaramiento
OR R24,TEMP
RET

B2:
EOR R27 , R26 //op lógica XOR
ANDI R27,0B00000100
OR R24 , R27
RET

PRENDE:
EOR R24 , R23
ANDI R24,0X01
AND R24 , TEMP2
RJMP LOOP
ATRIBUYE:
IN TEMP3, PIND
MOV TEMP2, TEMP3
ANDI TEMP2,0B00000001 //enmascaramiento

MOV TEMP4,TEMP3
ANDI TEMP4,0B00000100
MOV TEMP,TEMP4
CALL VALOR
MOV TEMP4,TEMP

MOV TEMP5,TEMP3
ANDI TEMP5,0B00001000
MOV TEMP,TEMP5
CALL VALOR
MOV TEMP5,TEMP

MOV TEMP6,TEMP3
ANDI TEMP6,0B00010000
MOV TEMP,TEMP6
CALL VALOR
MOV TEMP6,TEMP

MOV TEMP7,TEMP3
ANDI TEMP7,0B00100000
MOV TEMP,TEMP7
CALL VALOR

MOV R26,TEMP3
ANDI R26,0B01000000
MOV TEMP,R26
CALL VALOR
MOV R26,TEMP

MOV R27,TEMP3
ANDI R27,0B10000000
MOV TEMP, R27
CALL VALOR
MOV R27,TEMP
RET

VALOR:
CPI TEMP,0X01
BRLO CERO
LDI TEMP,0B11111110

RETURN:
RET

CERO:
LDI TEMP,0X00
RJMP RETURN

También podría gustarte