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