1. 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);
2. 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;
- }
- }
- }
4. 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];
- }
- }