Tutorial Microcontroller MCS-51 ATMEL ISP

Pelatihan Mikrokontroller

 

Microcontroller Kits

Programmer and Target 89s51

Simple Mikrokontroller 89s51 Trainer


Standart
Mikrokontroller 89s51 Trainer

Super Mikrokontroller Trainer 89s51

 

 

 

BACK

Driving 8 LED C Programming 8051 Microcontroller

 





/************************************************
           * example of using WHILE loop construct *
           * to drive 8 LEDS connected to port B *
           * *
           * * Compiler : MIDE-51 
           * *
           ************************************************/
#include < at89s51.h > /* Include 89s51 header file */ 
           
char const num[ ] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; 
 void wait (void)
           { ; /* wait function */ 
           } 
 void main( void )
           {
           unsigned int i;
           unsigned char j; 
 P0 = 0; /* initialize ZERO to P0 */
 while(1){
 for( j = 0; j < 8; j++ )
           {
           P0 = num[ j ];
           
           for ( i = 0; i < 10000; i++ )
           {
           wait(); /* delay for half second */ 
           }
           }
           }
           }
      


Makes LED blink every 0.5 second
C Programming 8051

Wichit Sirichote, kswichit@kmitl.ac.th


A basic circuit of the 89C2051 shown here can be made easily using point-to-point soldering with a universal PCB. Use an ordinary 20-pin socket, do not use a circle-pin socket. D1 is a small dot LED. U2 can be either 7805 or 78L05. U3 is optional for correcting any polarity DC adapter. Without the 2051 chip in the socket, checks the connection, then measures +5V between pin 20 and pin 10. Test the LED by shorting P1.7 pin to GND.

Test your board with myfirst.c, a simple c program 
that makes LED blink every 0.5 second.
/* 
           * myfirst.c 
           * First C program for 2051 experiment 
           * complement P1.7 every 0.5 sec 
           * Copyright (C) 1999 Wichit Sirichote 
           * compiled with Dunfield Micro-C for 8051 Release 3.2
           */ 
#include c:\mc\8051io.h /* include i/o header file */
           #include c:\mc\8051reg.h 
extern register char cputick; 
// cputick was incremented every 10ms            
   register unsigned char sec100,flag1; 
#define n 50 
task1(); // functions declarations 
           task2(); 
main() 
{ 
 flag1 = 0; 
 sec100 = 0; 
 serinit(9600); // set timer0 to be 16 bit counter 
 while(1){ 
 while(cputick == 0) 
 ; 
 cputick = 0; 
 task1(); 
 task2(); 
 } 
} 
task1() // set bit 0 of flag1 every n*10ms 
{ 
 sec100++; // increment sec100 
 if (sec100 >= n) 
 {sec100 = 0; // clear sec100 
 flag1 |= 0x01; // set bit 0 of flag1 
 } 
} 
task2() 
{ 
 if ((flag1 & 0x01) != 0) // execute below if bit 0 of flag1 is set
{ 
  // P1 ^= 0x80; // exclusive or the latch bit 7 with 0x80 
  asm " CPL P1.7"; // complement P1.7 
  flag1 &= ~0x01; // clear bit 0 of flag1 
 } 
} 

Comments, questions and discussion about this topic

BACK