1 / 87

C Language Programming for the 8051

C Language Programming for the 8051. هاجر ملکیان(81130029) فاطمه مظاهری(81130028). Overview. C for microcontrollers Review of C basics Compilation flow for Cygnal C extensions In-line assembly Interfacing with C Examples Arrays and Pointers I/O Circuitry Functions and Header Files

vina
Download Presentation

C Language Programming for the 8051

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C Language Programmingfor the 8051 هاجر ملکیان(81130029) فاطمه مظاهری(81130028) EE/CS-152: Microprocessors and Microcontrollers

  2. Overview • C for microcontrollers • Review of C basics • Compilation flow for Cygnal • C extensions • In-line assembly • Interfacing with C • Examples • Arrays and Pointers • I/O Circuitry • Functions and Header Files • Multitasking and multithreading EE/CS-152: Microprocessors and Microcontrollers

  3. C for Microcontrollers • Of higher level languages, C is the closest to assembly languages • bit manipulation instructions • pointers (indirect addressing) • Most microcontrollers have available C compilers • Writing in C simplifies code development for large projects. EE/CS-152: Microprocessors and Microcontrollers

  4. Available C Compilers • Reads51 – detailed in textbook • Cygnal – integrated with the IDE we have been using for labs. EE/CS-152: Microprocessors and Microcontrollers

  5. Compilation Process (Cygnal) program.c compile no SRC option program.LST program.OBJ build/make program.M51 EE/CS-152: Microprocessors and Microcontrollers

  6. Modular Programming • Like most high level languages, C is a modular programming language (but NOT an object oriented language) • Each task can be encapsulated as a function. • Entire program is encapsulated in “main” function. EE/CS-152: Microprocessors and Microcontrollers

  7. Basic C Program Structure • Compiler directives and include files • Declarations of global variables and constants • Declaration of functions • Main function • Sub-functions • Interrupt service routines EE/CS-152: Microprocessors and Microcontrollers

  8. Back to C Basics • All C program consists of: • Variables • Functions (one must be “main”) • Statements • To define the SFRs as variables: #include <c8051F020.h> EE/CS-152: Microprocessors and Microcontrollers

  9. Variables • All variables must be declared at top of program, before the first statement. • Declaration includes type and list of variables. Example: void main (void) { int var, tmp; • Types: • int (16-bits in our compiler) • char (8-bits) • short (16-bits) • long (32-bits) • sbit (1-bit) • others that we will discuss later must go HERE! not standard C – an 8051 extension EE/CS-152: Microprocessors and Microcontrollers

  10. Variables • The following variable types can be signed or unsigned: signed char (8 bits) –128 to +127 signed short (16 bits) –32768 to +32767 signed int (16 bits) –32768 to +32767 signed long (32 bits) –2147483648 to +2147483648 unsigned char (8 bits) 0 to + 255 unsigned short (16 bits) 0 to + 65535 unsigned int (16 bits) 0 to + 65535 unsigned long (32 bits) 0 to + 4294967295 NOTE: Default is signed – it is best to specify. EE/CS-152: Microprocessors and Microcontrollers

  11. Statements • Assignment statement: variable = constant or expression or variable examples: upper = 60; I = I + 5; J = I; EE/CS-152: Microprocessors and Microcontrollers

  12. Operators • Arithmetic: +, -, *, / • Relational: >, >=, <, <= • Equality: ==, != • Logical: && (and), || (or) • Increment and decrement: ++, -- • Example: if (x != y) && (c == b) { a=c + d*b; a++; } EE/CS-152: Microprocessors and Microcontrollers

  13. $INCLUDE (C8051F020.inc) XL equ 0x78 XH equ 0x79 YL equ 0x7A YH equ 0x7B cseg at 0 ljmp Main cseg at 100h ; Disable watchdog timer Main: mov 0xFF, #0DEh mov 0xFF, #0ADh mov a, XL add a, YL mov XL, a mov a, XH addc a, YH mov XH, a nop end #include <c8051f020.h> void main (void) { int x, y, z; // disable watchdog timer WDTCN = 0xde; WDTCN = 0xad; z = x + y; } Example – Adder program (add 2 16-bit numbers) The C version The assembly version EE/CS-152: Microprocessors and Microcontrollers

  14. Compilation Process (Cygnal) Use the #pragma CODE compiler directive to get assembly code generated in LST file. adder.c compile look here in RAM when debugging adder.LST adder.OBJ build/make adder.M51 Map file shows where variables are stored. One map file is generated per project. Symbol Table in M51 file: ------ DO D:0008H SYMBOL x D:000AH SYMBOL y D:000CH SYMBOL z ------- ENDDO EE/CS-152: Microprocessors and Microcontrollers

  15. Bitwise Logic Instructions • AND • OR • XOR • left shift • right shift • 1’s complement Examples: & | ^ << >> ~ n = n & 0xF0; n = n & (0xFF << 4) n = n & ~(0xFF >> 4) EE/CS-152: Microprocessors and Microcontrollers

  16. Main: mov WDTCN, #0DEh mov WDTCN, #0ADh xrl a, #0xF0 ; invert bits 7-4 orl a, #0x0C ; set bits 3-2 anl a, #0xFC ; reset bits 1-0 mov P0, a ; send to port0 void main (void) { char x; WDTCN = 0xDE; WDTCN = 0xAD; x = x ^ 0xF0; x = x | 0x0C; x = x & 0xFC; P0 = x; } Example – Logic in Assembly and C The C version The assembly version EE/CS-152: Microprocessors and Microcontrollers

  17. Loop Statements - While • While loop: while (condition) { statements } while condition is true, execute statements if there is only one statement, we can lose the {} Example: while (1) ; // loop forever EE/CS-152: Microprocessors and Microcontrollers

  18. Loop Statements - For • For statement: for (initialization; condition; increment) {statements} initialization done before statement is executed condition is tested, if true, execute statements do increment step and go back and test condition again repeat last two steps until condition is not true EE/CS-152: Microprocessors and Microcontrollers

  19. Example: for loop for (n = 0; n<1000; n++) n++ means n = n + 1 Be careful with signed integers! for (i=0; i < 33000; i++) LED = ~LED; Why is this an infinite loop? EE/CS-152: Microprocessors and Microcontrollers

  20. Loops: do - while do statements while (expression); Test made at the bottom of the loop EE/CS-152: Microprocessors and Microcontrollers

  21. Decision – if statement if (condition1) {statements1} else if (condition2) {statements2} … else {statementsn} EE/CS-152: Microprocessors and Microcontrollers

  22. Decision – switch statement switch (expression) { case const-expr: statements case const-expr: statements default: statements } EE/CS-152: Microprocessors and Microcontrollers

  23. Example: switch switch (unibble) { case 0x00 : return (0xC0); case 0x01 : return (0xF9); case 0x02 : return (0xA4); case 0x03 : return (0xC0); default : return (0xFF); } Need a statement like “return” or “break” or execution falls through to the next case (unlike VHDL) EE/CS-152: Microprocessors and Microcontrollers

  24. C Extensions: Additional Keywords For accessing SFRs Specify where variables go in memory EE/CS-152: Microprocessors and Microcontrollers

  25. Accessing Specific Memory EE/CS-152: Microprocessors and Microcontrollers

  26. C Access to 8051 Memory code: program memory accessed by movc @a + dptr data bdata idata xdata EE/CS-152: Microprocessors and Microcontrollers

  27. تغيير ناحيه ذخيره سازی متغير در حافظه به طور صريح • کلمات کليدی برای تعيين کردن ناحيه حافظه متغير: • Data • Idata • bdata • Xdata EE/CS-152: Microprocessors and Microcontrollers

  28. data نشاندهنده ان است که مکان متغير در رم داخلی است و دسترسی به ان از طريق ادرس دهی مستقيم امکان پذير است. مثال: Data char I; The C version I =2; Mov I,#02h The assemblyversion EE/CS-152: Microprocessors and Microcontrollers

  29. Idata نشاندهنده ان است که مکان متغير در رم داخلی است و دسترسی به ان از طريق ادرس دهی غير مستقيم امکان پذير است. مثال: Idata char I; The C version I =2; Mov R0,#I Mov @R0,#02h The assemblyversion EE/CS-152: Microprocessors and Microcontrollers

  30. Pdata • نشاندهنده ان است که مکان متغير دريک صفحه 256 بايتی از حافظه رم خارجی است. pdata char I; The C version I =2; Mov a,#02h Mov R0,#I The assemblyversion Movx @R0,a EE/CS-152: Microprocessors and Microcontrollers

  31. Xdata • نشاندهنده ان است که مکان متغير در64 کيلو بايت از حافظه رم خارجی است. xdata char I; The C version I =2; Mov dptr ,#I Mov a, #02h The assemblyversion Movx @dptr , a EE/CS-152: Microprocessors and Microcontrollers

  32. Code • نشاندهنده ان است که عدد به صورت ثابت در حافظه رام بوده و قابل تغيير نيست. • به عنوان مثال اجرای اعلان زير باعث ميشود که ثابت در مکانی از حافظه رام قرار گيردو مقدار 2 را دارا باشد. Code char I =2; The C version Data char c; C=I; Mov dptr ,#I Clr a Movc a, @a+dptr The assemblyversion Mov c,a EE/CS-152: Microprocessors and Microcontrollers

  33. Bdata برای متغير هايي به کار ميرود که ادرس دهی انها هم به صورت بايت وهم به صورت بيت امکان پذير است . مثال: Int bdata ibase ; Char bdata barray[4]; :sbit امکان دسترسی مستقيم و تغيير بيت های مجزا از طريق Sbit mybit0=ibase^0; Sbit array07=barray[0]^7; در ما جول های ديگر به روش زير : sbit دسترسی به متغير نو extern bit mybit0; extern bit array07; : Ibaseو barray تغییر بیتهای mybit0=1; EE/CS-152: Microprocessors and Microcontrollers

  34. C Extensions for 8051 (Cygnal) • New data types: Example: bit bit new_flag; //stored in 20-2F sbit sbit LED = P1^6; sfr sfr SP = 0x81; //stack pointer sfr16 sfr16 DP = 0x82; // data pointer $INCLUDE (c8051F020.h) EE/CS-152: Microprocessors and Microcontrollers

  35. sbit مثالی از • Sbit switch =p1^3; //متغير سوييچ به بيت 3 از پورت 1 انتساب داده شده است. • Switch =0; //بيت 3 از پورت 1 صفر ميشود. EE/CS-152: Microprocessors and Microcontrollers

  36. SFR • اين نوع داده مشابه متغير قبلی است با اين تفاوت که برای تعريف متغيرهای 8بيتی استفاده ميشود و ادرس بعد از علامت “=” بايد يک ثابت عددی باشد قرارگيرد.(0x80-0xff) هاSfr ودر محدوده ادرس EE/CS-152: Microprocessors and Microcontrollers

  37. Sfr مثالی از • Sfr p1= 0x90; • Sfr p2=0xA0; • Unsigned char my_data; • my_data=p1; • P2=my_data++; EE/CS-152: Microprocessors and Microcontrollers

  38. Sfr16 • اين نوع داده مشابه قبلی است با اين تفاوت که برای تعريف متغيرهای 16 بيتی به کار میرود • وقتی ازاين نوع داده استفاده ميشود بايت پايين بايد قبل از بايت بالا اورده شود. EE/CS-152: Microprocessors and Microcontrollers

  39. sfr16 مثالی از • Sfr16 T2=0xcc; //Timer 2,T2l=cc & T2h=CD • T2=0xAE01; تايمر 2 در 8052از ادرس های • به ترتیب برای بایتهای پایین و بالا استفاده میکند0xCC و 0xCD EE/CS-152: Microprocessors and Microcontrollers

  40. C Data Types With Extensions EE/CS-152: Microprocessors and Microcontrollers

  41. Declaring Variables in Memory char data temp; char idata varx; int xdata array[100]; char code text[] = “Enter data”; EE/CS-152: Microprocessors and Microcontrollers

  42. Interrupts – Original 8051 Specify register bank 2 void timer0 (void) interrupt 1 using 2 { if (++interruptcnt == 4000) { /* count to 4000 */ second++; /* second counter */ interruptcnt = 0; /* clear int counter */ } } EE/CS-152: Microprocessors and Microcontrollers

  43. Other Interrupt Numbers Interrupt number is same as “Priority Order” in datasheet EE/CS-152: Microprocessors and Microcontrollers

  44. In-line Assembly • When it is more efficient, or easier, can insert assembly code in C programs. #pragma asm put your assembly code here #pragma endasm EE/CS-152: Microprocessors and Microcontrollers

  45. Compilation Process (Cygnal) program.c .OBJ or .SRC can be generated, not both compile no SRC option with SRC option program.SRC program.LST program.OBJ build/make rename file program.asm program.M51 assemble build/make program.OBJ Must use this path for C programs with in-line assembly It is also necessary to add #pragma SRC to code EE/CS-152: Microprocessors and Microcontrollers

  46. Interfacing with C • Example: Temperature Sensor program • Configures the external oscillator • Configures the ADC0 for temp. sensor • Configures Port1 so LED can be used • Configures Timer3 to synch the ADC0 • Uses ADC0 ISR to take temperature samples and averages 256 of them and posts average to global variable • Main program compares average temp. to room temp. and lights LED if temp is warmer. • Temp_2.c EE/CS-152: Microprocessors and Microcontrollers

  47. Converting to Real Values • C makes it easier to implement equations Example: Temperature conversion For analog to digital conversion – assuming left justified: The temperature sensor: EE/CS-152: Microprocessors and Microcontrollers

  48. Temperature Conversion Let Vref = 2.4V, Gain = 2 EE/CS-152: Microprocessors and Microcontrollers

  49. C for the Equation … unsigned int result, temperature; … result = ADC0; //read temperature sensor temperature = result - 42380; temperature = temperature / 156; * Must be careful about range of values expected and variable types EE/CS-152: Microprocessors and Microcontrollers

  50. Arrays in C • Useful for storing data type arr_name[dimension] int temp_array[256] Array elements are stored in adjacent locations in memory. temp_array[0] temp_array[1] temp_array[2] temp_array[3] ... temp_array[253] temp_array[254] temp_array[255] EE/CS-152: Microprocessors and Microcontrollers

More Related