0% found this document useful (0 votes)
55 views

Document 3

The document contains code snippets for interfacing sensors and LCD with AVR microcontrollers. The LCD interfacing code initializes the LCD in 4-bit mode and sends commands and data to display text. The sensor interfacing code configures the ADC to read the sensor value, converts it to a string and displays the temperature reading on LCD continuously.

Uploaded by

Muhammed Nizar
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
55 views

Document 3

The document contains code snippets for interfacing sensors and LCD with AVR microcontrollers. The LCD interfacing code initializes the LCD in 4-bit mode and sends commands and data to display text. The sensor interfacing code configures the ADC to read the sensor value, converts it to a string and displays the temperature reading on LCD continuously.

Uploaded by

Muhammed Nizar
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 17

5.Count 00 to ff and send each value to port b. Call subroutine for sending the time delay.

.INCLUDE "M32DEF.INC"

.DEF COUNT=R20

.ORG 0

LDI R16,HIGH(RAMEND)

OUT SPH,R16

LDI R16,LOW(RAMEND)

OUT SPL,R16

LDI COUNT,0

BACK:

CALL DISPLAY

RJMP BACK

DISPLAY:

INC COUNT

OUT PORTB,COUNT

CALL DELAY

RET

DELAY:

LDI R16,0X01

AGAIN:

NOP

NOP

NOP

DEC R16

BRNE AGAIN

RET
6.Toggle bit 2 of port B using bit manipulation commands with delay.

.INCLUDE "M32DEF.INC"

SBI DDRB,2

AGAIN:

SBI PORTB,2

CALL DELAY

CBI PORTB,2

CALL DELAY

RJMP AGAIN

DELAY:

LDI R16,0X02

AGAIN1:

NOP

NOP

NOP

DEC R16

BRNE AGAIN1

RET
7. An led is connected to each pin of port D. Turn on each led from D0 to D7. Call a delay subroutine
before turn on the next LED
.INCLUDE "M32DEF.INC"
LDI R20,HIGH(RAMEND)
OUT SPH,R20
LDI R20,LOW(RAMEND)
OUT SPL,R20
LDI R20,0xFF
OUT DDRD,R20
SBI PORTD,0
CALL DELAY
SBI PORTD,1
CALL DELAY
SBI PORTD,2
CALL DELAY
SBI PORTD,3
CALL DELAY
SBI PORTD,4
CALL DELAY
SBI PORTD,5
CALL DELAY
SBI PORTD,6
CALL DELAY
SBI PORTD,7
CALL DELAY
DELAY:
LDI R21,0xFF
AGAIN: NOP
LDI R22,0XFF
AGAIN1: NOP
NOP
NOP
DEC R22
BRNE AGAIN1
DEC R21
BRNE AGAIN
RET
8. Keep monitoring PB2 bit until it becomes high. When PB2 becomes high write the value $45 to port C
and send a HIGH to LOW pulse to PD3.
INCLUDE "M32DEF.INC"
SBI DDRB,2
LDI R16,0Xff
OUT DDRC,R16
SBI DDRD,3
AGAIN:SBIS PINB,2
RJMP AGAIN
LDI R16,0x45
OUT PORTC,R16
SBI PORTD,3
CALL DELAY
CBI PORTD,3
CALL DELAY
DELAY:
LDI R21,0xFF
AGAIN: NOP
LDI R22,0XFF
AGAIN1: NOP
NOP
NOP
DEC R22
BRNE AGAIN1
DEC R21
BRNE AGAIN
RET
9. Assume that bit PB3 is an input and represent the condition of a door alarm, if it goes low it means
that the door is open,monitor the bit continuously when-ever it goes low. Send a high or low pulse for
port PC5 to turn on a buzzer.
INCLUDE "M32DEF.INC"
CBI DDRB,3
SBI DDRC,5
HERE:
SBIC PINB,3
RJMP HERE
SBI PORTC,5
CALL DELAY
CBI PORTC,5
CALL DELAY
RJMP HERE
DELAY:
LDI R21,0xFF
AGAIN: NOP
LDI R22,0XFF
AGAIN1: NOP
NOP
NOP
DEC R22
BRNE AGAIN1
DEC R21
BRNE AGAIN
RET
10. Send value for ASCII character 0, 1, 2, 3, 4, 5, A, B, C, and D to port C

#include <avr/io.h>

int main(void)

unsigned char myList[] = "012345ABCD";

unsigned char z;

DDRC=0xff;

for(z=0;z<10;z++)

PORTC=myList [z];

while(1);

return 0;

}
11: Toggle all the bits of Port B 200 times using delay function (_dealy_ms).

#include <avr/io.h>

#include <util/delay.h>

int main(void)

DDRB=0xFF;

unsigned char x;

for(x=0;x<=200;x++){

PORTB=0xFF;

17

_delay_ms(1000);

PORTB=0x00;

_delay_ms(1000);

return 0;

}
12. Write an AVR C program to send values of -4 to +4 to port B.

#include <avr/io.h>

#include <avr/delay.h>

int main(void)

char myList[] = {'-4','-3','-2','-1',0,1,2,3,4};

unsigned char z;

DDRB=0xff;

for(z=0;z<=8;z++) {

PORTB=myList[z];

_delay_ms(1200);

while(1);

return 0;

}
13. Write an AVR C program to toggle only bit 4 of Port B continuously without disturbing the rest of the
pin of Port B.

#include <avr/io.h>

#include <avr/delay.h>

int main(void)

DDRB=0xff;

while(1)

PORTB=PORTB|0b00010000;

// _delay_ms(200);

PORTB=PORTB&0b11101111;

// _delay_ms(200);

return 0;

}
14. Write an AVR program to monitor bit 5 of port C, if it is high send 55H to port B otherwise AAH to
port B.

#include <avr/io.h>

#include <avr/delay.h>

int main(void)

DDRC=0x00;

DDRB=0xFF;

while(1)

if(PINC &0b00100000)

_delay_ms()

PORTB=0x55;

else

PORTB=0xAA;

_delay_ms()

return 0;

}
15. Write an AVR C program to convert ASCII digits of ‘4’ and ‘7’ to packed BCD and display them on
PORTB.

#include <avr/io.h>

int main(void)

unsigned char bcdbyte;

unsigned char w='4';

unsigned char z='7';

DDRB = 0xff;

w=w&0x0f;

w=w<<4;

z=z&0x0f;

bcdbyte=w|z;

PORTB = bcdbyte;

return 0;

}
16: Write an AVR C program to send out the value 44H serially one bit at a time via port C, pin 3. The
MSB should go out first.

#include <avr/io.h>

#include <avr/delay.h>

#define pin 3

int main(void)

unsigned char conbyte = 0x44;

unsigned char regalsb;

unsigned char x;

regalsb = conbyte;

DDRC |= (1<<pin);

for (x=0;x<8;x++)

if (regalsb & 0x01)

PORTC |= (1<<pin);

else

PORTC &= ~(1<<pin);

//_delay_ms(1000);

regalsb = regalsb >> 1;

return 0;

}
17.Write an AVR C program to create a square wave of 50% duty cycle on the Port B.5 bit. Timer 0 is
used to generate the time delay in normal mode. Analyze the program.

#include <avr/io.h>

int main()

DDRB=0b00100000;

TCCR0=0X01;

TCNT0=0;

PORTB = PORTB|0B00100000;

while(1)

if(TCNT0==255)

PORTB=~PORTC;

TCNT0=0;

return 0;

}
18 : Write an AVR C program to create a square wave of 50% duty cycle on the Port B.5 bit. Timer 0 is
used to generate the time delay in CTC mode. Analyze the program.

#include <avr/io.h>

int main()

DDRB=0b00100000;

TCCR0=0X09;

TCNT0=0;

OCR0=100;

PORTB = PORTB|0B00100000;

while(1)

if(TCNT0==OCR0)

PORTB=~PORTB;

TCNT0=0;

return 0;

}
19. LCD Interfacing with AVR.
#include <avr/io.h>
void delay (char x);
void lcd_command (char c);
void lcd_data (char d);
int main(void)
{
DDRC=0xFF;
DDRD=0xFF;
lcd_command(0X38);
lcd_command(0X80);
lcd_command(0X0C);
lcd_command(0X06);
lcd_command(0X01);
delay(5);
lcd_data('A');
while(1)
{
}
}
void delay (char x)
{
int i,j;
for(j=0;j<x;j++)
for(i=0;i<3000;i++);
}
void lcd_command(char c)
{
PORTC=c;
PORTD&=~(1<<6);
PORTD|=(1<<7);
delay(2);
PORTD&=~(1<<7);
}
void lcd_data(char d)
{
PORTC=d;
PORTD|=(1<<6);
PORTD|=(1<<7);
delay(2);
PORTD&=~(1<<7);
}
21. Sensor Interfacing with AVR.
#include <avr/io.h>
void delay (char x);
void lcd_command (char c);
void lcd_data (char d);
void lcd_puts (const char *p);
void dec_con (char u);
char con[4];
char temp=0;
int main(void)
{
DDRA=0X00;
DDRC=0xFF;
35
DDRD=0xFF;
ADCSRA=0X87;
ADMUX=0X60;
lcd_command(0X38);
lcd_command(0X80);
lcd_command(0X0C);
lcd_command(0X06);
lcd_command(0X01);
delay(5);
lcd_puts(" ARVIN ");
lcd_command(0Xc0);
lcd_puts("Temperature: ");
while(1) {
ADCSRA|=(1<<ADSC);
while((ADCSRA&(1<<ADIF))==0);
temp=(ADCH*500)/256;
dec_con(temp);
lcd_command(0xCD);
lcd_puts(con);
}
}
void delay (char x) {
int i,j;
for(j=0;j<x;j++)
for(i=0;i<3000;i++);
}
void lcd_command(char c) {
PORTC=c;
PORTD&=~(1<<6);
PORTD|=(1<<7);
delay(2);
PORTD&=~(1<<7); }
void lcd_data(char d) {
PORTC=d;
PORTD|=(1<<6);
PORTD|=(1<<7);
delay(2);
PORTD&=~(1<<7); }
void lcd_puts(const char *p)
36
{
while(*p)
{
lcd_data(*p++);
}
}
void dec_con(char u)
{
con[3]='\0';
con[2]=(u%10)+0x30;
u=u/10;
con[1]=(u%10)+0x30;
con[0]=(u/10)+0x30;
}

You might also like