Wednesday, December 4, 2013

Assembly Code To Blink LEDs


interface one led with 8051


The Delay Generation ASM Routine For Generating Delay

;file: delays.asm
;ALL DELAYS ROUTINES HERE
DELAY_SEG SEGMENT CODE
RSEG DELAY_SEG
;DELAY OF 1MS SUBROUTINE
DELAY1MS:
MOV R7,#250
DJNZ R7,$
MOV R7,#247
DJNZ R7,$
RET
;DELAY OF 100MS SUBROUTINE
DELAY100MS:
MOV R6,#99;1MUS
L1:
ACALL DELAY1MS ;99MS
DJNZ R6,L1;198MUS
MOV R6,#250;1MUS
DJNZ R6,$;500US
MOV R6,#147;1US
DJNZ R6,$;294US
NOP
RET;1US
;DELAY 0F 1SEC SUB ROUTINE
DELAY1S:
MOV R5,#9
L2:
ACALL DELAY100MS
DJNZ R5,L2
MOV R5,#99
L3:
ACALL DELAY1MS
DJNZ R5,L3
MOV R5,#250
DJNZ R5,$
MOV R5,#138
DJNZ R5,$
RET


The Main ASM Routine For Operation

;file:main.asm
;Glow Alternate Leds Connected to A Port 0
$INCLUDE(delays.asm)
cseg at 0
MOV A,#0ffH
MOV A,#055H
MAIN:
MOV P2,A
LCALL DELAY1S
LCALL DELAY1S
XRL A,#0FFH
SJMP MAIN
END
Download Keil Project And Proteous Project For This

Thursday, October 3, 2013

Interface One Led with 8051

Interfacing one Led to 8051 Micro-controller

interface one led with 8051

Description About Interfacing Led to 8051


Led is a simple 1 bit out put device. So we need only one bit(or pin) to operate it.
Led can be configured as active low(i.e Glow when pin is Low ) or It can be configured as
active high(i.e Glow when pin is High).
In above figure it is configured as active low. So For Glowing of led the bit must be 0
and 1 for off the led.

Code for The Above configuration

  #include "./include/reg51.h"  /*contain 8051 specific definition*/
  #include "./include/delays_header.h" /* contain delay generation declaration*/
  /*AS LED IS CONFIGURED AS A NEGATIVE LOGIC DEVICE */
  #define ON 0
  #define OFF 1
  sbit LED1=P0^0;

  void main()
  {
   while(1)/*super loop for embedded application*/
   {
    LED1=ON;
    /*provide some delay so that led in ON state for some time*/
    delay_500_ms();
    LED1=OFF;
    /*provide some delay so that led in OFF state for some time*/
    delay_500_ms();
   }
  }

  

Links For Download Complete keil's Project

The above Link contain single Led as well as 8 leds(full port). Also contain Proteus Simulator Example.

Thursday, September 27, 2012

CALLING ASSEMBLY DELAY ROUTINE FROM C SOURCE CODE

THIS POST IS ALL ABOUT HOW TO CALL AN ASSEMBLY ROUTINE FROM C SOURCE CODE

I PRESENT A EXAMPLE BELOW

THERE IS THREE FILES
1) DELAYS.ASM
2)DELAY_MAIN.C
3)DELAY_HEADER.H

DELAYS.ASM
------------------------------------------------------------------------------------------------------------
;;
;THIS IS A ASSEMBLY LANGUAGE ROUTINES WHICH GENERATING
; 1MILI SEC,500MILI SEC
;AND 1SEC ROUTINES.
;THIS ROUTINES CAN BE CALLED FROM C LANGUAGE USING BELOW FORMATS
;FOR 1 MILI SEC:: void delay_1_ms(void);
;FOR 500 MILI SEC:: void delay_500_ms(void);
;FOR 1 SEC:: void delay_1_sec(void);
;FILE NAME:DELAYS.ASM
;AUTHOR::RAJESH KUMAR SAHOO
;SKYPE ID:rajesh88642
;face book:www.facebook.com/sahoorajesh.d
;                                  ;                                  ;


?PR?del_seg SEGMENT CODE
    PUBLIC delay_1_ms
    PUBLIC delay_500_ms
    PUBLIC delay_1_sec
    RSEG ?PR?del_seg
delay_1_ms:
    MOV R7,#250
    DJNZ R7,$
    MOV R7,#247
    DJNZ R7,$
    RET
delay_500_ms:
    MOV R6,#250
L1_500:
    ACALL delay_1_ms
    DJNZ R6,L1_500
   
    MOV R6,#248
L2_500:
    ACALL delay_1_ms
    DJNZ R6,L2_500
    MOV R6,#250
    DJNZ R6,$
    MOV R6,#247
    DJNZ R6,$
    NOP
    NOP
    RET
delay_1_sec:
    MOV R5,#8
LO_SEC:
    MOV R6,#124
LI_SEC:
    ACALL delay_1_ms
    DJNZ R6,LI_SEC
    DJNZ R5,LO_SEC
    MOV R5,#5
L_SEC:   
    ACALL delay_1_ms
    DJNZ R5,L_SEC
    MOV R5,#250
    DJNZ R5,$
    MOV R5,#237
    DJNZ R5,$
    RET
    END
    

---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
DELAY_MAIN.C
---------------------------------------------------------------------------------------------------------------
/**
*THIS IS A C SOURCE CODE FROM WHERE ASSEMBLY ROUTINES ARE CALLED
*FILE NAME: DELAY_MAIN.C
*
*/
#include <reg51.h>
#include "delays_header.h"
void main()
{
    delay_1_sec();
    delay_500_ms();
    delay_1_ms();
    delay_1_sec();
}


---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
DELAY_HEADER.H
---------------------------------------------------------------------------------------------------------------
#ifndef _delay_h_
#define _delay_h_

void delay_1_ms(void);
void delay_500_ms(void);
void delay_1_sec(void);

#endif


---------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
THE HOLE EXAMPLE PROJECT YOU CAN DOWNLOAD FROM HERE
DOWNLOAD HERE

USING OF DELAY IN A ASSEMBLY PROGRAM

;;
;THIS PROGRAM CALL DELAY ROUTINES AVAILABLE IN
; DELAY.ASM FILE(SEE PREVIOUS POST)
;
;FILE NAME: DELAY_DEMO.ASM
;DELAY.ASM FILE MUST PRESENT IN THE PROJECT FOLDER
;                      ;                            ;


$INCLUDE(delay1ms.asm)
CSEG AT 0H
MAIN:
ACALL DELAY1MS
SJMP $
END

DELAY GENERATION USING ASSEMBLY INSTRUCTIONS

;THIS IS AN ASSEMBLY LANGUAGE PROGRAM FOR GENERATION OF DELAY
;FILE NAME : DELAY.ASM
;COMPILED WITH KEIL IDE
;CRYSTAL:12MHZ USED
;THIS FILE USED WHEN EVER DELAY REQUIRED
;JUST YOU HAVE TO INCLUDE THIS FILE TO YOUR SOURCE PROGRAM
;                    ;                    ;
;ALL DELAYS ROUTINES HERE
DELAY_SEG SEGMENT CODE
RSEG DELAY_SEG
;DELAY OF 1MS SUBROUTINE
DELAY1MS:
MOV R7,#250
DJNZ R7,$
MOV R7,#247
DJNZ R7,$
RET
;DELAY OF 100MS SUBROUTINE
DELAY100MS:
MOV R6,#99;1MUS
L1:
ACALL DELAY1MS ;99MS
DJNZ R6,L1;198MUS
MOV R6,#250;1MUS
DJNZ R6,$;500US
MOV R6,#147;1US
DJNZ R6,$;294US
NOP
RET;1US
;DELAY 0F 1SEC SUB ROUTINE
DELAY1S:
MOV R5,#9
L2:
ACALL DELAY100MS
DJNZ R5,L2
MOV R5,#99
L3:
ACALL DELAY1MS
DJNZ R5,L3
MOV R5,#250
DJNZ R5,$
MOV R5,#138
DJNZ R5,$
RET