PDF 3
PDF 3
LED BLINKING
#define LED_PORT P3
unsigned int i, j;
void main()
{ while
(1) {
LED_PORT = 0xFF;
delay_ms(500);
LED_PORT = 0x00;
delay_ms(500);
a) 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;
}
}
{ 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
addressing
void main()
{ asm{
MOV A,
#09; MOV
P2, A;
//
2.Register
//addressin
//g mode
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
CPL
DAA
In assembly language
void main() {
asm {
SETB P3.2
SETB P2.3
AGAIN:
JB P3.2, BUTTON_PRESSED
CLR P2.3
SJMP AGAIN
BUTTON_PRESSED:
SETB P2.3
SJMP AGAIN
void main() {
while(1) {
if (BUTTON == 0) { // Check if the
button is pressed (low)
LED = 1; // Turn on the LED
} else {
LED = 0; // Turn off the LED
}
}
}
Experiment –5 ASM Program for delay of 200ms
void main() {
asm{
NEXT:
ACALL DELAY
ACALL DELAY
SJMP NEXT
DELAY:
MOV R0, #2
L3:
L2:
L1:
DJNZ R2, L1
DJNZ R1, L2
DJNZ R0, L3
RET
}
Experiment –6 LED Display
//Part a : program for display codes from lookup table
unsigned char
display_code[]={0x99,0xb0,0xa4,0xf9};
unsigned int i, j;
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(10
00); j=j<<1;
return;
}
}
void main() {
display_data();
//Part B
Display codes from lookup table , the display appear after pressing the key on
int test_key(){
P2_0_bit=1;
if(P2_0_bit == 0) return 1;
else return 0;
j=display_value%10;
display_code[i]=lookup_7seg[j];
display_value/=10;
return;
void display_data(void){
while(1){
j=1;
for(i=0;i<4;i++){
P0=display_code[i];
P1=j;
delay_ms(1000);
j=j<<1;
}
}
void main() {
int display_value=7404;
while(test_key() != 1)
transfer_display_code(display_value);
display_data();
Experiment –7
a) To display numeric value of 7 segment display.
unsigned int i, j;
void display_data(void)
unsigned
char i; while
(1)
P1 =
display_code[i];
delay_ms(1000);
void main()
display_data();
0xA4, 0xB0,
0x80, 0x90};
void delay_ms(unsigned int time)
unsigned int i, j;
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)
unsigned int t;
display_digit(num);
0xA4, 0xB0,
0x80, 0x90};
unsigned int i, 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)
unsigned int t;
display_digit(num);
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);
}
}
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;
TH0 =
0xFC; TR0
= 1;
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
TMOD =
0x01; TH0 =
0xFC; TL0 =
0x66; TF0 =
0;
TR0 = 1;
msec_count--; } } void
main() {
while (1) {
delay_msec(5000);
P3_6 = ~P3_6; } }
while (msec_count--) {
for (i = 0; i < 4; i++) { // Fine-tune to 1ms if needed
TR0_bit = 1; // Start Timer 0
while (TF0_bit == 0); // Wait for overflow
TF0_bit = 0; // Clear overflow flag
}
}
void main() {
while (1) {
delay_msec_2(500); // 500ms delay
P3 |= 0x40; // Toggle P3.6 (Set bit 6)
P3 &= ~0x40; // Reset bit 6 (Toggle P3.6)
}
}
Experiment –10 Interrupts when INT0 ocuurs led at
p2.4 toggles
// A part external INT0 occurs , led at pin 2.4 toggles
//External Interrupt 0 ISR
void external0_ISR(void) interrupt 0 {
P2_4 = ~P2_4; // Toggle P2.4
}
void main(void) {
IT0 = 1; // INT0 edge triggered
EX0 = 1; // Enable External Interrupt 0
EA = 1; // Enable Global Interrupt
while(1); // Infinite loop
}
//B part external edge triggered interrupt int0 and int 1 , maintain integer count that
is incremented by 1 on the arrival of int 0
unsigned char port_val = 0;
// ISR for External Interrupt 0 (Increment) // org 0x0003
void external0_ISR(void) interrupt 0 {
port_val++;
P2 = port_val;
}
//part B
// ISR for External Interrupt 1 (Decrement) //org 0x0013
void external1_ISR(void) interrupt 2 {
port_val--;
P2 = port_val;
}
void main(void) {
IT0 = 1; // INT0 edge triggered
IT1 = 1; // INT1 edge triggered
EX0 = 1; // Enable External Interrupt 0
EX1 = 1; // Enable External Interrupt 1
EA = 1; // Enable Global Interrupt
while(1); // Infinite loop
}
//C part : display the count value on port 2 led , also count is decremented by 1 on
the arrival of int 1
P1 = 0x01;
P0 = seg_code[count];
while(1);
}
Experiment –11 LCD
// LCD module connections
void main(){
Delay_ms(2000);
// Moving text
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
Lcd_Cmd(_LCD_SHIFT_LEFT);
Move_Delay();
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();