8051 programming skills using EMBEDDED C

7,518 views

Published on

It contains basic programming tips for embedded c for those who are just into it and don't know much about it....have a look in it and u will surely find it easy.

Published in: Education, Technology
6 Comments
13 Likes
Statistics
Notes
No Downloads
Views
Total views
7,518
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
650
Comments
6
Likes
13
Embeds 0
No embeds

No notes for slide

8051 programming skills using EMBEDDED C

  1. 1. BY:- Aman Sharma Dronacharya College Of Engineering Email Id- aman.sharma616@gmail.com
  2. 2. Key features of embedded c-  It is easy and less time consuming to write in C than Assembly.  C is easier to modify and update.  You can use code available in function libraries.  C code is portable to other microcontroller with little of no modification.  A good understanding of C data types for 8051 can help programmers to create smaller hex files
  3. 3. Supports following data types-  Unsigned char  Signed char  Unsigned int  Signed int  Sbit (single bit)  Bit.  Note:-C compilers use the signed char as the default if we do not put the keyword Unsigned.
  4. 4. Their range  Data types Size Range  bit 1-bit RAM bit-addressable only  sbit 1-bit SFR bit-addressable only  (signed) int 16-bit -32768 to +32767  unsigned int 16-bit 0 to 65535  (signed) char 8-bit -128 to +127  unsigned char 8-bit 0 to 255 //SFR= specific function register.
  5. 5. Some programmes… //wap to send values 00 – FF to port P1.  #include <reg51.h> void main(void) { unsigned char z; for (z=0;z<=255;z++) P1=z; }
  6. 6. //WAP to send hex values for ASCII characters of 0, 1, 2, 3, 4, 5, A, B, C, and D to port P1.  #include <reg51.h> void main(void) { unsigned char mynum[]={‘0’,’1’,’2’,’3’,’4’,’5’,’A’,’B’,’C’,’D’}; unsigned char z; for (z=0;z<10;z++) P1=mynum[z]; }
  7. 7. //WAP to toggle all the bits of P1 continuously.  #include <reg51.h> #include<reg51.h> void main(void) void main() { { for (; ;) for (; ;) { { p1=0x55; P1=0; p1=0xAA; P1=1; } } } } NOTE:- You can use while loop in above program by:- while(1) { condition ; }
  8. 8. To create Time delay -- Three factors that can affect the accuracy of the delay-  The 8051 design.. – The number of machine cycle – The number of clock periods per machine cycle  The crystal frequency connected to the X1 – X2 input pins  Compiler choice – C compiler converts the C statements and functions to Assembly language instructions – Different compilers produce different code
  9. 9. Program- //Toggle P1 forever with some delay in between “on” and “off”.  #include <reg51.h> void main(void) { unsigned int x; for (; ;) //repeat forever { p1=0x55; for (x=0;x<40000;x++); //delay size unknown p1=0xAA; for (x=0;x<40000;x++); } }
  10. 10. //WAP to toggle bits of P1 ports continuously with a 250 ms.  #include <reg51.h> void main(void) { while (1) //repeat forever { p1=0x55; MSDelay(250); p1=0xAA; MSDelay(250); } }
  11. 11. //WAP to toggle led connected to P1.  #include <reg51.h> #define LED P1; void main(void) { P1=0; //clear P1 LED=0; //clear LED for (; ;) //repeat forever { P1=LED; P1++; //increment P1 } }
  12. 12. //WAP to get a byte of data form P1, wait ½ second, and then send it to P2.  #include <reg51.h> void MSDelay(unsigned int); void main(void) { unsigned char mybyte; P1=0xFF; //make P1 input port while (1) { mybyte=P1; //get a byte from P1 MSDelay(500); P2=mybyte; //send it to P2 } }
  13. 13. //WAPto toggle only bit P2.4 continuously without disturbing the rest of the bits of P2. //Toggling an individual bit #include <reg51.h> sbit mybit=P2^4; //Use the Px^y format, //where x is the port 0, 1, 2, or 3 and // y is the bit 0 – 7 of that port void main(void) { while (1) { mybit=1; //turn on P2.4 mybit=0; //turn off P2.4 } }
  14. 14. Operators used:-  AND (&&),  OR (||),  EX-OR (^),  Inverter (~),  Shift Right (>>),  Shift Left (<<)
  15. 15. //WAP to toggle all the bits of P0 and P2 continuously with a 250 ms delay, Using the inverting and Ex-OR operators, respectively.  #include <reg51.h> void MSDelay(unsigned int); void main(void) { P0=0x55; P2=0x55; while (1) { P0=~P0; P2=P2^0xFF; MSDelay(250); } }
  16. 16.  WAP to read the P1.0 and P1.1 bits and issue an ASCII character to P0 according to the following table. P1.1 P1.0 0 0 send ‘0’ to P0 0 1 send ‘1’ to P0 1 0 send ‘2’ to P0 1 1 send ‘3’ to P0  #include <reg51.h> void main(void) { unsigned int x,y; x=P1^0; y=P1^1;
  17. 17. if(x==0 && y==0) { P0=‘0’; break; } else if (x==0 && y==1) { P0=‘1’; break; } else if (x==1 && y==0) { P0=‘2’; break; } else if (x==1 && y==1) { P0=‘3’; break; } }
  18. 18. //WAP to calculate the checksum byte for the data 25H, 62H, 3FH, and 52H.  #include <reg51.h> void main(void) { unsigned int mydata[]={‘0x25’,’0x62’,’0x3F’,’0x52’}; unsigned int sum=0; unsigned int x; unsigned int chksumbyte; for (x=0;x<4;x++) { P2=mydata[x]; sum=sum+mydata[x]; P1=sum; } chksumbyte=~sum+1; P1=chksumbyte; }
  19. 19. Different ways of allocating memory in RAM  (a) #include <reg51.h> void main(void) { P1=‘H’; P1=‘E’; P1=‘L’; P1=‘L’; P1=‘O’; } ... //Short and simple, but the individual characters are embedded into the program and it mixes the code and data together
  20. 20.  (b) #include <reg51.h> void main(void) { unsigned char mydata[]={‘H’,’E’,’L’,’L’,’O’}; unsigned char z; for (z=0;z<5;z++) P1=mydata[z]; } //Use the RAM data space to store array elements, therefore the size of the array is limited
  21. 21.  (c) #include <reg51.h> void main(void) { code unsigned char mydata[]={‘H’,’E’,’L’,’L’,’O’}; unsigned char z; for (z=0;z<=5;z++) P1=mydata[z]; } //Use a separate area of the code space for data. This allows the size of the array to be as long as you want if you have the on-chip ROM. //However, the more code space you use for data,the less space is left for your program code.

×