In: Computer Science
Write the C code required to configure pin 0 on port B to be an input with the pullup resistor enabled.
To make port as a input with pullups enabled and read data from port 0
DDRA = 0x00;
PORTA = 0xFF;
To make port B as a tri stated input
DDRB = 0x00;
PORTB = 0x00;
To make lower nibble of port 0 as a output, higher nibble as a input with pullups enabled.
DDRA = 0x0F;
PORTA = 0xF0;
Blink LED on PB0 at a rate of 1Hz.
#include <mega16.h> #include <delay.h> void main() { DDRB = 0xFF; //PB as output PORTB= 0x00; //keep all LEDs off while(1) { PORTB &= 0b11111110; //turn LED off delay_ms(500); //wait for half second PORTB |= 0b00000001; //turn LED on delay_ms(500); //wait for half second }; }
Blink LEDs on Port B with different patterns according to given input.
– Kit : use SW0, SW1
– No Kit : Connect a 2 micro-switches between pin PC0,PC2 and
ground. So that when you press the switch pin is pulled low.
#include <mega16.h> #include <delay.h> //declare global arrays for two patterns unsigned char p1[4] = { 0b10000001, 0b01000010, 0b00100100, 0b00011000 }; unsigned char p2[4] = { 0b11111111, 0b01111110, 0b00111100, 0b00011000 }; void main() { unsigned char i; //loop counter DDRB = 0xFF; //PB as output PORTB= 0x00; //keep all LEDs off DDRC = 0x00; //PC as input PORTC |= 0b00000011; //enable pull ups for //only first two pins while(1) { //# if SW0 is pressed show pattern 1 if((PINC & 0b00000001)==0) { for(i=0;i<3;i++) { PORTB=p1[i]; //output data delay_ms(300); //wait for some time } PORTB=0; //turn off all LEDs } //# if SW1 is pressed show pattern 2 if((PINC & 0b00000010)==0) { for(i=0;i<3;i++) { PORTB=p2[i]; //output data delay_ms(300); //wait for some time } PORTB=0; //turn off all LEDs } };