- Example 1:Set bit 5 of port B to be an output and other bits to be inputs
Assembly language
ldi r16,(1<<5);
out DDRB,r16;
C equivalent
DDRB=(1<<5);
- Example 2:Set bits 3 and 4 of port B to be outputs whilst keeping the direction of the other bits the same
Assembly language
ldi r16,(1<<3)|(1<<4);
out DDRB,r16;
C equivalent
DDRB=(1<<3)|(1<<4)
3.output values 10 to 15 as hex digits
#include <avr/io.h>
uint8_t seven_seg[10] = { 63,6,91,79,102,109,125,7,127,111};
int main(void) {
uint8_t digit;
/* Set port A pins to be outputs, port C pins to be inputs */
DDRA = 0xFF;
DDRC = 0; /* This is the default, could omit. */
while(1) {
/* Read in a digit from lower half of port C pins */
/* We read the whole byte and mask out upper bits */
digit = PINC & 0x0F;
/* Write out seven segment display value to port A */
if(digit < 10) {
PORTA = seven_seg[digit];
} else {
PORTA = 0;
}
}
}
4.Modify the task 1 code so that your program can also output values 10 to 15 as hex digits
#include <avr/io.h>
uint8_t seven_seg[16] = { 63,6,91,79,102,109,125,7,127,111,119,124,57,94,121,113};
int main(void) {
uint8_t digit;
DDRA = 0xFF;
DDRC = 0;
while(1) {
digit = PINC & 0x0F;
if(digit < 16) {
PORTA = seven_seg[digit];
} else {
PORTA = 0;
}
}
}
-
Modify the code in Task 2 so that your program also outputs the digit (in binary) on AVR port B. Connect the lower 4 bits of port B to 4 LEDs
#include <avr/io.h>
uint8_t seven_seg[16] = { 63,6,91,79,102,109,125,7,127,111,119,124,57,94,121,113};
int main(void) {
uint8_t digit;
DDRA = 0xFF;
DDRB = 0xFF;
DDRC = 0;
while(1) {
digit = PINC & 0x0F;
PORTB = digit;
PORTA = seven_seg[digit];
}
}
5.Write a program that repeatedly reads the lower 4 bits of port A and the lower 4 bits of port B and adds these two values together and displays (on the SSD, using a port of your choice) the hexadecimal value of the lower 4 bits of the result
#include <avr/io.h>
uint8_t seven_seg[16] = { 63,6,91,79,102,109,125,7,127,111,119,124,57,94,121,113};
int main(void) {
uint8_t a, b, c;
DDRA=0x00;
DDRB=0x00;
DDRC=0XFF;
while(1) {
a=PINA&0x0F;
b=PINB&0x0F;
c=a+b;
PORTC=seven_seg[c&0x0F];
}
}