Sunday, 29 June 2014

CREATING A SIMPLE PROGRAM TO BLINK A LED USING ASSEMBLY


A microcontroller is a self-contained system with peripherals, memory and a processor that can be used as an embedded system. Most programmable microcontrollers that are used today are embedded in other consumer products or machinery including phones, peripherals, automobiles and household appliances for computer systems. Due to that, another name for a microcontroller is "embedded controller." Some embedded systems are more sophisticated, while others have minimal requirements for memory and programming length and a low software complexity. Input and output devices include solenoids, LCD displays, relays, switches and sensors for data like humidity, temperature or light level, amongst others.


General architecture of a microcontroller 
The architecture of a microcontroller depends on the application it is built for. For example, some designs include usage of more than one RAM, ROM and I/O functionality integrated into the package.

  • BEFORE PROCEEDING TO THE PROGRAM HERE ARE SOME OF THE IMPORTANT THINGS YOU SHOULD KNOW ABOUT PROGRAMMING FOR MCU(MICRO-CONTROLLER UNIT). 
  1. ITS A 8 BIT MICRO-CONTROLLER WITH FOUR REGISTER BANKS. B0,B1,B2,B3. EACH BANK CONSIST OF 7 REGISTERS NAMELY   r0,r1,r2,r3,r4,r5,r6.r7 .EACH REGISTER  CAN STORE A VALUE FROM 0 TO 255 (IN DECIMAL) OR FROM 00h TO FFh. HERE h STANDS FOR HEXADECIMAL .
  2. SO HERE IS A BASIC PROGRAM TO BLINK A LED WITH A DELAY SO THAT THE OUTPUT CAN BE SEEN.
  3. WE USE DELAY BECAUSE THE CODE EXECUTION TIME OF THE MCU IS EXTREMELY FAST. SO BY CALLING THE DELAY FUNCTION WE MAKE A HALT BEFORE THE EXECUTION OF THE NEXT  STEP.
  4. NOW WE GONNA DISCUSS  EVERY ASPECT OF THE DELAY FUNCTION.
  5. Delay:              :-   //WE HAVE CREATED A LABEL/FUNCTION FOR DELAY
mov r0,#200       :-//WE  HAVE ASSIGNED A VALUE OF 200 TO THE REGISTER r0.
                          //FOR DOING IT WE HAVE USED THE KEYWORD ‘MOV’ WHICH STANDS FOR MOVE.    
h1:mov r1,#100  :-//AGAIN WE HAVE  CREATED A JUNCTION SO THAT WE CAN HAVE A LOOP HERE.
                                 //NOW WE HAVE MOVED A VALUE OF100 INTO THE REGISTER r1.
                                //’”h1:”  IS JUST A LABEL 

h2:djnz r1,h2 :-//AGAIN WE  HAVE CREATED A JUNCTION HERE  NAMED h2.
                       //DJNZ STANDS FOR DECREASE AND JUMP IF NOT EQUAL TO ZERO
//IT IS A CONDITIONAL STATEMENT  WHICH, ON BEING TRUE RESULTS IN JUMP OF THE  
    //EXECUTION  TO A DIFFERENT JUNCTION /LABEL.
//WHICH MEANS  IT  WILL DECREASE THE VALUE OF r1 BY 1,i.e  NOW THE VALUE OF
// r1  WILL BE  99. AFTER  DECREASING THE VALUE  IT  WILL  JUMP  TO  h2  LABEL WHICH IN TURN
//RESULT IN FURTHER DECREASE IN THE VALUE OF r1. THIS WILL CONTINUE  UNTILL THE
//VALUE IN r1 BECOMES ZERO. AFTER  DECREASING THE VALUE  IN r1 TO ZERO  PROGRAM 
//EXECUTION  WILL GO THE NEXT COMMAND.
                djnz r0,h1                 :-                                                                                                                     
//HERE AGAIN  IT  WILL START DECREASING THE VALUE PRESENT IN THE REGISTER r0. NOW    
//THE DIFFERENCE IS THAT , AFTER DECREASING THE VALUE THE PROGRAM EXECUTION WILL    
      //JUMP TO h1 LABEL. I.E IT WILL AGAIN  MOVE A VALUE OF 100 INTO THE REGISTER  r1.
//AGAIN IT WILL DECREASE THE REGISTER r1 TO ZERO . NOW THE VALUE  IN r0 WILL BE
//DECREASED AGAIN . AND THE EXECUTION WILL BE SHIFTED TO THE LABEL  h1.  SO
ULTIMATELY THE  THE DECREAMENT WILL  OCCUR FOR  200*100. 
Ret       :-  //IT IS A KEYWORD  USED TO GET OUTPUT FROM A FUNCTION  OR THE PROGRAM
// IT  IS NECESSARY  TO WRITE “ret” AT THE END OF THE PROGRAM CODE.
End    :-  //THIS IS ALSO A KEYWORD USED TO CLOSE THE MEMORY LOCATION  AND THE  PROGRAM .
                //IT IS ALSO NECESSARY TO WRITE "end " AT THE END OF THE PROGRAM CODE
  • AFTER YOU HAVE CREATED THE PROGRAM YOU CAN DEBUG TO SEE IF IT IS WORKING OR NOT.
  • BEFORE DEBUG BUILD THE TARGET AS SHOWN.

  • AFTER YOU HAVE BUILT YOUR TARGET GO TO  DEBUG TAB IN YOUR MENU BAR. CLICK ON IT AND START THE SESSION.
  • AFTER STARTING THE SESSION IT WILL SHOW A MESSAGE DIALOGUE. CLICK ON OK AND PROCEED. NOW CLICK ON THE PERIPHERALS. GO TO I/O-PORTS AND SELECT THE PORT WE HAVE USED OR WHOSE BIT WE HAVE USED.
  • NOW A POP UP WINDOW WILL OPEN  AS SHOWN.PRESS F11 TO CHECK THE OUTPUT OF YOUR PROGRAM.
  • YOU CAN CHECK THE VALUE OF THE REGISTERS IN THE WINDOW NAMED REGISTERS NEXT TO THE FILE WHERE YOU HAD WRITTEN  YOUR PROGRAM.

No comments:

Post a Comment