Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Federico Cardona
CONFIGURACION DE PINES
; AssemblerApplication1.asm
;
; Created: 06/09/2019 5:47:39 p. m.
; Author : Valeria
;
ldi r16, 0x20
out DDRB, r16 /*como quiero que se comporte el pin, salida y entrada*/
SUMA O RESTA
; Ejercicio suma y resta de dos números
.ORG 0x000
rjmp inicio /*salte donde dice inicio*/
.ORG 0x033
inicio:
ldi r19, 0xFF
out DDRD, r19 /*todo el puerto D de salida*/
rjmp inicio
.ORG 0x033
inicio:
ldi R27, 0xFF ;Loads an 8-bit constant directly to register
ldi R28, 0x7F
ldi R29, 0x01
out DDRD, R27
out DDRB, R28
out PORTD, R29
ldi r17, PIND
in r16, PIND
check:
lsl r16
rigth:
cpi r17, $01 ;compara un registro con una constante
breq check
lsr R16 ; desplaza todos los bits un lugar a la dercha
out PORTD, R16
call delay
mov r17, R16
jmp rigth
delay:
ldi r24, 0xff
ldi r25, 0x00
lazo_2_comp:
adiw r25:r24, 1
breq lazo_2_init
rjmp lazo_2_comp
lazo_2_init:
inc r19 ; incrementa 1 al registro
cpi r19, 75 ;compara un registro con una constante
brne delay
ldi r19, 0x00
ret
intercal:
in r16, PIND
left:
cpi r17, $80
breq rigth
lsl R16
lsl R16
out PORTD, R16
mov r17, R16
jmp check
rigth2:
cpi r17, $01
breq check
lsr R16
lsr R16
out PORTD, R16
mov r17, R16
jmp rigth
.cseg
.org 0x00
rjmp reset
.org 0x06
rjmp MyFirst_vect
.org 0x34
reset:
; Set Interrupt to trigger when input is at low level
ldi r16, 0x02
sts EICRA, r16
; Main Loop
main:
secuencia1:
out DDRD, R27
out DDRB, R28
out PORTD, R29
ldi r19, PIND
in r19, PIND
check:
cpi r30,$00
breq secuencia2
cpi r19, $80
breq rigth
lsl R19
out PORTD, R19
call delay
jmp check
rigth:
cpi r30,$00
breq secuencia2
cpi r19, $01
breq check
lsr R19
out PORTD, R19
call delay
jmp rigth
secuencia2:
out DDRD, R27
out DDRB, R28
out PORTD, R29
ldi r19, PIND
in r19, PIND
left:
cpi r30,$01
breq secuencia1
cpi r19, $40
breq rigth2
lsl R19
lsl R19
out PORTD, R19
call delay
jmp left
rigth2:
cpi r30,$01
breq secuencia1
cpi r19, $01
breq left
lsr R19
lsr R19
out PORTD, R19
call delay
jmp rigth2
delay:
ldi r24, 0xff
ldi r25, 0x00
lazo_2_comp:
adiw r25:r24, 1
breq lazo_2_init
rjmp lazo_2_comp
lazo_2_init:
inc r21
cpi r21, 75
brne delay
ldi r21, 0x00
ret
rjmp main
; Interrupt Vector
MyFirst_vect:
cpi r31, $01
breq seg
ldi r31, 0x01
reti
seg:
eor r30, r29
ldi r31, 0x00
reti
; AssemblerApplication1.asm
;
.org 0x34
reset:
; Main Loop
main:
// Initialize PB1 as output PWM
ldi r16, 0x7F
out DDRB, r16
eor r21,r19
breq CambioAD
mov r22,r31
cpi r22,$0
breq CambioAT
rjmp main
; Interrupt Vector
MyFirst_vect:
cpi r20,$0
breq Atras
rjmp Adelate
reti
Adelate:
adiw r31:r30, 52
reti
Atras:
SBIW r31:r30,52
reti
CambioAT:
ldi r20, 0x01
rjmp main
CambioAD:
ldi r20, 0x00
rjmp main
; AssemblerApplication1.asm
;
.org 0x34
reset:
; Main Loop
main:
// Initialize PB1 as output PWM
ldi r16, 0x7F
out DDRB, r16
; Interrupt Vector
MyFirst_vect:
ldi r16, 0x7F
out DDRB, r16
VUMETRO
/*
* GccApplication4.c
*
* Created: 20/01/2020 11:44:21 a. m.
* Author : Usuario
*/
#include <avr/io.h>
#include <avr/interrupt.h>
ADMUX = 0b01000000;
switch(result)
{
case 0 ... 146:
PORTD = 0x02; // Writing HIGH
break;
case 147 ... 292:
PORTD = 0x06; // Writing HIGH
break;
case 293 ... 438:
PORTD = 0x0E; // Writing HIGH
break;
case 439 ... 584:
PORTD = 0x1E; // Writing HIGH
break;
case 585 ... 730:
PORTD = 0x3E; // Writing HIGH
break;
case 731 ... 876:
PORTD = 0x7E;
break;
case 877 ... 1023:
PORTD = 0xFF;
break;
default:
break;
}
ADCSRA |= 1<<ADSC; // Start Conversion
}
//Main routine
int main(void)
{
DDRD |= 0xFF; /* Configure PB5 as digital output */
while (1);
COMUNICACIÓN SERIAL
RECEPCION
#define F_CPU 16000000UL // 16 MHz
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
void iniciar_usart(); //función para iniciar el USART AVR asíncrono, 8 bits, 9600 baudios,
//sin bit de paridad, 1 bit de parada
///////////////////////////////////////////////////////////
///////////////////////////////////////////////
//recepción de datos del módulo USART AVR modo asíncrono
////////////////////////////////////////////////////////////
}
unsigned char recibe_caracter_usart(){
if(UCSR0A&(1<<7)){ //si el bit7 del registro UCSR0A se ha puesto a 1
return UDR0; //devuelve el dato almacenado en el registro UDR0
}
else//sino
return 0 ;//retorna 0
}
int main(void) {
}
}
ENVIO
/*
* UART_Demo.c
*
* Created: 11/7/2019 7:40:00 PM
* Author : Bernardo Andres C
*/
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
void USART_Init(void)
{
// Set baud rate
UBRR0L = BAUD_PRESCALE;
UBRR0H = (BAUD_PRESCALE >> 8);
uint8_t USART_ReceiveByte()
{
/* Wait for data to be received */
while (!(UCSR0A & (1<<RXC0)));
/* Get and return received data from buffer */
return UDR0;
}
int main(void) {
USART_Init(); // Initialize USART