0% found this document useful (0 votes)
31 views21 pages

PDF 1

The document contains various experiments and code snippets for programming microcontrollers, focusing on LED control, arithmetic operations, addressing modes, input handling, timer functions, interrupts, and LCD display. Each experiment includes C and assembly language code examples demonstrating specific functionalities such as LED blinking, arithmetic calculations, and displaying numbers on a 7-segment display. The document serves as a practical guide for learning microcontroller programming and interfacing with hardware components.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views21 pages

PDF 1

The document contains various experiments and code snippets for programming microcontrollers, focusing on LED control, arithmetic operations, addressing modes, input handling, timer functions, interrupts, and LCD display. Each experiment includes C and assembly language code examples demonstrating specific functionalities such as LED blinking, arithmetic calculations, and displaying numbers on a 7-segment display. The document serves as a practical guide for learning microcontroller programming and interfacing with hardware components.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 21

Note- Familiarization with software ko maine 0 consider

kara hai
a) LED BLINKING

#define LED_PORT P3

void delay_ms(unsigned int ms) {

unsigned int i, j;

for (i = 0; i < ms; i++)

for (j = 0; j < 127; j++);

void main() {

while (1) {

LED_PORT = 0xFF;

delay_ms(500);

LED_PORT = 0x00;

delay_ms(500);

b) LED CURTAIN
#define LED_PORT P3
void delay_ms(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 127; j++);
}
void main() {
LED_PORT = 0x00;

while (1) {
for (unsigned char i = 0; i < 8; i++) {
LED_PORT = (0x01 << i);
delay_ms(100);
}
for (unsigned char i = 0; i < 8; i++) {
LED_PORT = (0x80 >> i);
delay_ms(100);
}
LED_PORT = 0x00;
}
}

Experiment 1 – Add , Subtract,Multiplication , Division


void main(){

asm{

//MOV A,#06

//MOV B,#05

//ADD A,B

//MOV P0,A

//MOV A,#06

//MOV B,#05

//SUBB A,B

//MOV P1,A

MOV A,#255
MOV B,#1

MUL AB

MOV P1,A

MOV P2,B

MOV A,#10

MOV B,#05

DIV AB

MOV P3,A

Experiment -2 addressing modes


//1.Immediate

Void main(){

asm{

MOV A, #09;

MOV P2, A;

//2.Register

Void main(){

asm{

MOV R0, #0x03;

MOV A,R0;

MOV P1,A;
}

//3.Direct

Void main(){

asm{

MOV A, 0x40;

MOV P2, A;

//4.Indirect

Void main(){

asm{

MOV DPTR,#2000;

MOV A,#070;

MOVC A, @A+DPTR;

//5.Register Indirect

Void main(){

asm{

MOV 0x40, #0x2D;

MOV R0, #0x40;

MOV A, @R0;

MOV P2,A;

}
//6. Implied (Only Commands)

SWAP A

CLR A

CPL A

DAA

Experiment –3 Asm program to input one pin


void main() {

asm{

SETB P3.2

CLR P3.5

AGAIN:

SETB P3.2

JB P3.5, HERE

CLR P3.5

HERE:

SJMP AGAIN

Experiment –4 C program to input one pin


sbit Button_Pin = P3^2;

sbit LED_Pin = P3^5;


void main() {

while(1) {

if(Button_Pin == 0) {

LED_Pin = 0;

} else {

LED_Pin = 1;

Experiment –6 ASM Program for delay


void main() {

asm{

NEXT:

MOV P3,#0x55

ACALL DELAY

MOV P3,#0xAA

ACALL DELAY

SJMP NEXT

DELAY:

MOV R0,#2

L3:

MOV R1,#163
L2:

MOV R2,#254

L1:

DJNZ R2,L1

DJNZ R1,L2

DJNZ R0,L3

RET

Experiment –6 LED Display


//Part B

unsigned char display_code[]={0x99,0xb0,0xa4,0xf9};

void display_data(void){

unsigned char i,j;

while(1){

j=1;

for(i=0;i<4;i++){

P0=display_code[i];

P1=j;

delay_ms(1);

j=j<<1;

return;
/* while(1){

P0=display_code[0];

P0=display_code[1];

P0=display_code[2];

P0=display_code[3]; }

return; */

void main() {

display_data();

//Part C

Display codes from lookup table , the display appear after pressing the key on P2.0

unsigned char code Tlog[] = {

0xC0,

0xF9,

0xA4,

0xB0,

0x99,

0x92,

0x82,

0xF8,
0x80,

0x90

};

unsigned char display_code[] = {

0x99,

0xB0,

0xA4,

0xF9

};

void delay_ms(unsigned int ms) {

unsigned int i, j;

for (i = 0; i < ms; i++)

for (j = 0; j < 127; j++);

void display_data() {

unsigned char i;

while (1) {

for (i = 0; i < 4; i++) {

P1 = 1 << i;

P0 = display_code[i];

delay_ms(5);

P0 = 0xFF;

}
if (P2_0 == 1) break;

void main() {

P0 = 0xFF;

P1 = 0x00;

P2_0 = 1;

while (1) {

if (P2_0 == 0) {

delay_ms(20);

if (P2_0 == 0) {

display_data();

while (P2_0 == 0);

Experiment –7
a) To display numeric value of 7 segment display.

unsigned char display_code[4] = {0x99, 0xB6, 0xA4, 0xF9};

void delay_ms(unsigned int time)


{

unsigned int i, j;

for (i = 0; i < time; i++)

for (j = 0; j < 1275; j++);

void display_data(void)

unsigned char i;

while (1)

for (i = 0; i < 4; i++)

P1 = display_code[i];

delay_ms(1000);

void main()

display_data();

b) Number from 0000 to 9999 in ascending

unsigned char code7seg[10] = {0xC0, 0xF9, 0xA4, 0xB0,

0x99, 0x92, 0x82, 0xF8,

0x80, 0x90};
void delay_ms(unsigned int time)

unsigned int i, j;

for (i = 0; i < time; i++)

for (j = 0; j < 1275; j++);

void display_digit(unsigned char digit)

P2 = 0x08;

P1 = code7seg[digit];

delay_ms(5);

P2 = 0x04;

P1 = code7seg[digit];

delay_ms(5);

P2 = 0x02;

P1 = code7seg[digit];

delay_ms(5);

P2 = 0x01;

P1 = code7seg[digit];

delay_ms(5);

}
void main()

unsigned char num;

while (1)

for (num = 0; num <= 9; num++)

unsigned int t;

for (t = 0; t < 100; t++)

display_digit(num);

Number from 9999 to 0000 in descending order

unsigned char code7seg[10] = {0xC0, 0xF9, 0xA4, 0xB0,

0x99, 0x92, 0x82, 0xF8,

0x80, 0x90};

void delay_ms(unsigned int time)

unsigned int i, j;

for (i = 0; i < time; i++)

for (j = 0; j < 1275; j++);

}
void display_digit(unsigned char digit)

P2 = 0x08;

P1 = code7seg[digit];

delay_ms(5);

P2 = 0x04;

P1 = code7seg[digit];

delay_ms(5);

P2 = 0x02;

P1 = code7seg[digit];

delay_ms(5);

P2 = 0x01;

P1 = code7seg[digit];

delay_ms(5);

void main()

unsigned char num;

while (1)

for (num = 0; num <= 9; num++)


{

unsigned int t;

for (t = 0; t < 100; t++)

display_digit(num);

c) Fixing the display pattern on any 3 segment

unsigned char code7seg[10] = {0xC0, 0xF9, 0xA4, 0xB0,


0x99, 0x92, 0x82, 0xF8,
0x80, 0x90};

void delay_ms(unsigned int time)


{
unsigned int i, j;
for (i = 0; i < time; i++)
for (j = 0; j < 1275; j++);
}

void display_digit(unsigned char digit)


{
P2 = 0x08;
P1 = code7seg[digit];
delay_ms(5);

P2 = 0x04;
P1 = code7seg[digit];
delay_ms(5);
P2 = 0x02;
P1 = code7seg[digit];
delay_ms(5);

P2 = 0x01;
P1 = code7seg[digit];
delay_ms(5);
}

void main()
{
while (1)
{
display_digit(4);
delay_ms(500);

display_digit(5);
delay_ms(500);

display_digit(6);
delay_ms(500);
}
}

d) Verify the difference between 130 and 0130

#include <reg51.h>

void display130(void) {
unsigned char i;
for (i = 0; i < 100; i++) {
P1 = 0x04;
P0 = 0xF9;
delay_ms(5);

P1 = 0x08;
P0 = 0xB0;
delay_ms(5);

P1 = 0x09;
P0 = 0xC0;
delay_ms(5);
}
}

void display0130(void) {
unsigned char i;
for (i = 0; i < 100; i++) {
P1 = 0x08;
P0 = 0xC0;
delay_ms(5);

P1 = 0x04;
P0 = 0xF9;
delay_ms(5);

P1 = 0x08;
P0 = 0xB0;
delay_ms(5);

P1 = 0x09;
P0 = 0xC0;
delay_ms(5);
}
}

void main() {
while(1) {
display130();
delay_ms(1000);
display0130();
delay_ms(1000);
}
}
Experiment –8 Timer 0 in mode 1
Part A : to complement the status of pin P3.6 after milli+3

+sec;

void delay_m(void) { TMOD = 0x01;

TL0 = 0xBE;

TH0 = 0xFC;

TR0 = 1;

while (TF0 == 0); TR0 = 0; TF0 = 0; }

void main() {

while (1) {

delay_m();

P3_6 = ~P3_6; } }

Part B : to generate variable delay with resolution of 1ms and complement the bit P 3.6
after 5msec

void delay_msec(unsigned int msec_count) { unsigned char i;

while (msec_count != 0) {

TMOD = 0x01;

TH0 = 0xFC;

TL0 = 0x66;

TF0 = 0;

TR0 = 1;

for (i = 0; i < 4; i++) {

while (TF0 == 0); TF0 = 0; }


TR0 = 0; msec_count--; } }

void main() {

while (1) {

delay_msec(5000);

P3_6 = ~P3_6; } }

Experiment –9 Timer 0 in mode 2


void delay_m(unsigned int sec){

unsigned i = 0;
for(i = 0;i < sec;i++){
TMOD=0x02;
//TL0=0xBE;
TH0=0x30;
TR0_bit=1;
while(TF0_bit==0){

}
TR0_bit=0;
TF0_bit=0;
}
return;

void main() { while(1){ delay_m(4000); P3_6_bit=~P3_6_bit; }

}
Experiment –10 Interrupts
/* void external0_ISR(void) org 0x0003{ P2_4_bit = ~P2_4_bit; }

void main(void){ P2_4_bit = 1; // IE = 0x81; IT0_bit = 1 ; EX0_bit = 1 ; EA_bit = 1; while(1); }

*/

/* unsigned int i = 0 ;

void external0_ISR(void) org 0x0003{ i++; P2 = i; }

void external1_ISR(void) org 0x0013{ i--; P2 = i; }

void main(void){ IT0_bit = 1; IT1_bit = 1; EX0_bit = 1; EX1_bit = 1; EA_bit = 1;

while(1); } */

unsigned char seg_code[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
unsigned char i = 0;

void external0_ISR(void) org 0x0003 { if (i < 9) i++; P0 = seg_code[i]; }

void external1_ISR(void) org 0x0013 { if (i > 0) i--; P0 = seg_code[i]; }

void main(void) { IT0_bit = 1; IT1_bit = 1; EX0_bit = 1; EX1_bit = 1; EA_bit = 1;

P0 = 0xFF;

while(1);

Experiment –11 LCD


// LCD module connections sbit LCD_RS at P2_0_bit; sbit LCD_EN at P2_1_bit;
sbit LCD_D4 at P2_2_bit; sbit LCD_D5 at P2_3_bit; sbit LCD_D6 at P2_4_bit; sbit LCD_D7 at
P2_5_bit; // End LCD module connections

char txt1[] = "Your Name"; char txt2[] = "MNNIT 2025"; //char txt3[] = ""; //char txt4[] = "";

char i; // Loop variable

void Move_Delay() { // Function used for text moving Delay_ms(500); // You can change the
moving speed here }

void main(){

Lcd_Init(); // Initialize LCD

Lcd_Cmd(_LCD_CLEAR); // Clear display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off


//LCD_Out(1,6,txt3); // Write text in first row

//LCD_Out(2,6,txt4); // Write text in second row Delay_ms(2000); Lcd_Cmd(_LCD_CLEAR);


// Clear display

LCD_Out(1,1,txt1); // Write text in first row LCD_Out(2,5,txt2); // Write text in second row

Delay_ms(2000);

// Moving text for(i=0; i<4; i++) { // Move text to the right 4 times
Lcd_Cmd(_LCD_SHIFT_RIGHT); Move_Delay(); }

while(1) { // Endless loop for(i=0; i<8; i++) { // Move text to the left 7 times
Lcd_Cmd(_LCD_SHIFT_LEFT); Move_Delay(); }

for(i=0; i<8; i++) { // Move text to the right 7 times


Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}

}}

You might also like