Sunteți pe pagina 1din 2

Aluno: João Victor S. N.

Progene; Matrícula:161131197 LOOP1: ;LINHA DE RETORNO DE LOOP


- 8 LEDS – CONTAGEM BINÁRIA: // OR R17,R16 ;R17=R17 OR R16
.ORG 0x000 OUT PORTB,R16 ;PORTB=R17
INICIO: LSL R16 ;DESLOCA BIT DO R16
LDI R16,$FF ; CAREGA R16 COM FF(HEXA) SBIS PORTB,PB7 ;TESTA DE O PB7=1,
OUT DDRB,R16 ;CONFIGURA DDRB PARA SAIDA (DDRB=FF) SE FOR PULA A PROXIMA LINHA
LDI R16,$01 ;CAREGA R16 COM 01(HEXA) RJMP LOOP1 ;SALTA PARA A LINHA LOOP1
LDI R17,$01 ;CAREGA R17 COM 00(HEXA) LDI R16,$00
LOOP1: ;LINHA DE RETORNO DE LOOP - ACENDE LED TRÊS VEZES LENTO E TRES VEZES RÁPIDO:
INC R16 ;R17=R17 OR R16 .equ LED = PB5
OUT PORTB,R16 ;PORTB=R17 .ORG 0x000
;RCALL ATRASO INICIO:
;LSL R16 ;DESLOCA BIT DO R16 LDI R16,0xFF
SBIS PORTB,PB7 ;TESTA DE O PB7=1, SE FOR PULA A PROXIMA OUT DDRD,R16
LINHA PRINCIPAL:
RJMP LOOP1 ;SALTA PARA A LINHA LOOP1 SBI PORTD,LED
LDI R16,$00 ; CAREGA R16 COM 00(HEXA) RCALL ATRASO1
OUT PORTB,R16 ;PORTB=$00 RCALL ATRASO RJMP INICIO CBI PORTD,LED
;SALTA PARA A LINHA LOOP1 RCALL ATRASO1
ATRASO: //atraso de aprox. 200 ms SBI PORTD,LED
LDI R19,2 RCALL ATRASO1
volta: CBI PORTD,LED
DEC R20 //decrementa R17, começa com 0x00 RCALL ATRASO1
BRNE volta //enquanto R17 > 0 fica decrementando R17 SBI PORTD,LED
DEC R18 //decrementa R18, começa com 0x00 RCALL ATRASO1
BRNE volta //enquanto R18 > 0 volta a decrementar R18 CBI PORTD,LED
DEC R19 //decrementa R19 RCALL ATRASO1
BRNE volta //enquanto R19 > 0 vai para volta SBI PORTD,LED
RET //retorno de sub rotina RCALL ATRASO2
- 8 LEDS – ACENDE UM DE CADA VEZ E APAGA TODOS JUNTOS: CBI PORTD,LED
.ORG 0x000 RCALL ATRASO2
INICIO: SBI PORTD,LED
LDI R16,$FF ; CAREGA R16 COM FF(HEXA) RCALL ATRASO2
OUT DDRB,R16 ;CONFIGURA DDRB PARA SAIDA (DDRB=FF) CBI PORTD,LED
LDI R16,$01 ;CAREGA R16 COM 01(HEXA) RCALL ATRASO2
LDI R17,$01 ;CAREGA R17 COM 00(HEXA) SBI PORTD,LED
LOOP1: ;LINHA DE RETORNO DE LOOP RCALL ATRASO2
OR R17,R16 ;R17=R17 OR R16 CBI PORTD,LED
OUT PORTB,R17 ;PORTB=R17 RCALL ATRASO2
RCALL ATRASO RJMP PRINCIPAL
LSL R16 ;DESLOCA BIT DO R16 ATRASO1:
SBIS PORTB,PB7 ;TESTA DE O PB7=1, SE FOR PULA A PROXIMA LDI R19,0x05
LINHA VOLTA1:
RJMP LOOP1 ;SALTA PARA A LINHA LOOP1 DEC R17
LDI R16,$00 ; CAREGA R16 COM 00(HEXA) BRNE volta1
OUT PORTB,R16 ;PORTB=$00 RCALL ATRASO RJMP INICIO DEC R18
;SALTA PARA A LINHA LOOP1 BRNE volta1
ATRASO: //atraso de aprox. 200 ms DEC R19
LDI R19,2 BRNE volta1
volta: RET
DEC R20 //decrementa R17, começa com 0x00 ATRASO2:
BRNE volta //enquanto R17 > 0 fica decrementando R17 LDI R19,0x0A
DEC R18 //decrementa R18, começa com 0x00 VOLTA2:
BRNE volta //enquanto R18 > 0 volta a decrementar R18 DEC R17
DEC R19 //decrementa R19 BRNE volta2
BRNE volta //enquanto R19 > 0 vai para volta DEC R18
RET //retorno de sub rotina BRNE volta2
- 8 LEDS – ACENDE UM DE CADA VEZ E APAGA UM DE CADA VEZ: DEC R19
INICIO: BRNE volta2
LDI R16,$FF ; CAREGA R16 COM FF(HEXA) RET
OUT DDRB,R16 ;CONFIGURA DDRB PARA SAIDA (DDRB=FF) - INSTRUÇÕES DE ARITIMÉTICA:
LDI R16,$01 ;CAREGA R16 COM 01(HEXA) •LDI R16,10;carrega 10 em decimal para r16
LDI R17,$00 ;CAREGA R17 COM 00(HEXA) •LDI R17,11;carrega 11 em decimal para r17
LOOP1: ;LINHA DE RETORNO DE LOOP •ADD R17,R16 ;R17= R17+R16 e coloca o resultado em R17
OR R17,R16 ;R17=R17 OR R16 •LDI R16,10
OUT PORTB,R17 ;PORTB=R17 •LDI R17,11
LSL R16 ;DESLOCA BIT DO R16 •SUB R17,R16 ;R17= R17-R16, o resultado fica em R17
LDI R17,$00 ; CAREGA R16 COM 00(HEXA) •LDI R16,100 ;carrega 100 em decimal para r16
SBIS PORTB,PB7 ;TESTA DE O PB7=1, •LDI R17,10 ;carrega 10 em decimal para r167
SE FOR PULA A PROXIMA LINHA
•MUL R17,R16 ;R1:R0=R17xR16 coloca o resultado nos registradores R1:R0
RJMP LOOP1 ;SALTA PARA A LINHA LOOP1
(1000 ou 0x3E8)
OUT PORTB,R16 ;PORTB=$00
•LDI R16,$10 ; carrega 10 hexadou 16 em decimal para r16
- 8 LEDS – ACENDE UM DE CADA VEZ E APAGA UM DE CADA VEZ:
•ASR R16 ; R16=R16 / 2 (desloca para a direita para dividir por 2)
INICIO:
- INSTRUÇÕES DE LÓGICA:
LDI R16,$FF ; CAREGA R16 COM FF(HEXA)
OUT DDRB,R16 ;CONFIGURA DDRB PARA SAIDA (DDRB=FF) •LDI R16,$2F; CARREGA 2F(HEXA) EM R16
LDI R16,$01 ;CAREGA R16 COM 01(HEXA) •LDI R17,$60 ; CARREGA 60(HEXA) EM R17
LDI R17,$00 ;CAREGA R17 COM 00(HEXA) •AND R17,R16 ; R17= R17 AND R16, RESULTADO EM R17
•LDI R16,$2F CBI PORTB, PB2 ; ZERA PB2
•LDI R17,$60 SBI PORTB, PB3;SETA PB3=1
•OR R17,R16 ;R17= R17 OR R16, RESULTADO EM R17 SBI PORTB, PB4;SETA PB4=1
•LDI R16,$2F JMP LEPORTAB ;PULA PARA LEPORTAB
•LDI R17,$60 - LIGANDO E DESLIGANDO UM LED QUANDO UM BOTÃO É
•EOR R17,R16 ;R17= R17 XOR R16, RESULTADO EM r17 PRESSIONADO:
•LDI R17,$60 //DEFINIÇÕES
•COM R17;COMPLEMENTO DE UM, RESULTADO EM R17 .equ LED = PD2 //LED é o substituto de PD2 na programação
- INSTRUÇÕES DE DESVIO: .equ BOTAO = PD7 //BOTAO é o substituto de PD7 na
•LDI R16,$FF; CAREGA R16 COM FF(HEXA) programação
•OUT DDRB,R16;CONFIGURA DDRB PARA SAIDA (DDRB=FF) .def AUX = R16 /*R16 tem agora o nome de AUX (nem todos os
32 registradores de uso geral podem ser empregados em
•LDI R16,$01;CAREGA R16 COM 01(HEXA)
todas as instruções) */
•LDI R17,$00;CAREGA R17 COM 00(HEXA)
•LOOP1:;LINHA DE RETORNO DE LOOP
.ORG 0x000 /*endereço de início de escrita do código na
•OR R17,R16;R17=R17 OR R16 memória flash, após o reset o contador do programa aponta
•OUT PORTB,R17;PORTB=R17 para cá.*/
•LSL R16;DESLOCA BIT DO R16 Inicializacoes:
•SBIS PORTB,PB7;TESTA DE O PB7=1, SE FOR PULA A PROXIMA LINHA LDI AUX,0b00000100 //carrega AUX com o valor 0x04 (1 =
•RJMP LOOP1;SALTA PARA A LINHA LOOP1 saída e 0 = entrada)
•LDI R16,$00; CAREGA R16 COM 00(HEXA) OUT DDRD,AUX //configura PORTD, PD2 saída e demais pinos
•OUT PORTB,R16;PORTB=$00 entradas
- INSTRUÇÕES PARA TRANSFERÊNCIA DE DADOS: LDI AUX,0b11111111 /*habilita o pull-uppara o botão e
•LDI R16,0x00 ; CARREGA O NUMERO 0XF0 NO REGISTRADOR R16 apaga o LED (pull-upem todas as entradas)*/
•LDI R17,0x08 ; CARREGA O NUMERO 0X8 NO REGISTRADOR R17 OUT PORTD,AUX
•OUT SPL, R16 ; COLOCA O VALOR DE R16 EM SPL NOP /*sincronização dos dados do PORT. Necessário somente
•OUT SPH, R17 para uma leitura imediatamente após uma escrita no PORT*/
•LDI R16, 0x33 ; CARREGA O VALOR 0X33 NO REGISTRADOR 0x33
•LDI R17, 0x25 ; CARREGA O VALOR 0X25 NO REGISTRADOR 0x25 Principal:
•PUSH R16 ;COLOCA O CONTEÚDO DE R16 NO ENDEREÇO $0800 SBIC PIND,BOTAO //verifica se o botão foi pressionado,
•PUSH R17 ;COLOCA O CONTEÚDO DE R16 NO ENDEREÇO $07FF senão
•LDS r2,$0800 ; CARREGA R2 COM O CONTEÚDO DO ENDEREÇO $0800 RJMP Principal //volta e fica preso no laço Principal
•LDS r1,$07FF ; CARREGA R2 COM O CONTEÚDO DO ENDEREÇO $07FF Esp_Soltar:
•ADD r2,r1; R2=R2+R1 SBIS PIND,BOTAO //se o botão não foi solto, espera soltar
•STS $0800,r2 ; ESCREVE O CONTEÚDO DE R2 NO ENDEREÇO $0800 RJMP Esp_Soltar
- 1 LED – ACENDE UM E APAGA: RCALL Atraso /*após o botão ser solto gasta um tempo para
.equ LED = PB5 //LED é o substituto de PB0 na programação eliminar o
.ORG 0x000 //endereço na memória flash de início de ruído proveniente do mesmo*/
escrita do código SBIC PORTD,LED //se o LED estiver apagado, liga e vice-
INICIO: versa
LDI R16,0xFF //carrega R16 com o valor 0xFF RJMP Liga
OUT DDRD,R16 //configura todos os pinos do PORTD como SBI PORTD,LED //apaga o LED
saída RJMP Principal //volta ler botão
PRINCIPAL: Liga:
SBI PORTD,LED //coloca o pino PB0 em 5 V CBI PORTD,LED //liga LED
RCALL ATRASO //chama a sub-rotina de atraso RJMP Principal //volta ler botão
CBI PORTD,LED //coloca o pino PB0 em 0 V - Tratamentos:
RCALL ATRASO //chama a sub-rotina de atraso .ORG 0x000
RJMP PRINCIPAL //vai para PRINCIPAL INICIO:
ATRASO: //sub-rotina de atraso ; AddR1:R0 toR3:R2
LDI R19,0x02 //carrega R19 com o valor 0x02 LDI R16, 0xF5;
volta: LDI R17, 0xF0
DEC R17 //decrementa R17, começa com 0x00 ADD R17,R16
BRNE volta //enquanto R17 > 0 fica decrementando R17 BRCS VAI1 ; O VALOR ULTRAPASSA OS 8 BITS, SETA CARRY DO
DEC R18 //decrementa R18, começa com 0x00 SREG.
BRNE volta //enquanto R18 >0 volta a decrementar R18 LDI R16, 0x0F;
DEC R19 //decrementa R19 LDI R17, 0x05
BRNE volta //enquanto R19 >0 vai para volta SUB R17,R16
RET//retorna da sub-rotina BRMI NEGATIVO; CARACTERIZADO COM BIT 7=1, SETA S E C DO
- Reservatório: SREG.
INICIO: NEG R17; FAZ O COMPLEMENTO DE 2, O VALOR É AJUSTADO.
LDI R16,0b00011100 ; CONFIGURA PB2 1 PB4 COMO SAIDA LDI R16, 0x05;
OUT DDRB, R16; CONFIGURAPORTA B LDI R17, 0x05
LDI R16,0xE3 SUB R17,R16; SETA BIT Z DO SREG.
OUT PORTB,R16;CONFIGURA AS ENTRADAS EM PULL-UP BREQ TRATA
LEPORTAB: JMP INICIO
IN R16,PORTB;LÊ A PORTA B TRATA:
SBRC R16,0; SE O BIT 0 TEM O VALOR ZERO PULA LINHA LDI R17, 0x05
JMP LEPORTAB;PULA PARA LEPORTAB JMP INICIO
JMP LIGA_BP;PULA PARA LIGA_BP NEGATIVO:
LIGA_BP: LDI R17, 0x08
SBRS R16,1; SE O BIT 1 TIVER VALOR 1, PULA LINHA JMP INICIO
JMP LIGA_BR;PULA PARA LIGA_BR VAI1:
CBI PORTB, PB3 ; ZERA PB3=0 LDI R17, 0x01
CBI PORTB, PB4;ZERA PB4=0 JMP INICIO
SBI PORTB, PB2;SETA PB2=1
JMP LEPORTAB;PULA PARA LEPORTAB
LIGA_BR:

S-ar putea să vă placă și