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();
}
}}