►Introduction
The use of C language to program microcontrollers is becoming too common. And most of the time its not easy to buld an application in assembly which instead you can make easily in C. So Its important that you know C language for microcontroller which is commonly known as Embedded C. As we are going to use Keil C51 Compiler, hence we also call it Keil C.
►Keywords:
Keil C51 compiler adds few more keywords to the scope C Language:
_at_ | far | sbit |
alien | idata | sfr |
bdata | interrupt | sfr16 |
bit | large | small |
code | pdata | _task_ |
compact | _priority_ | using |
data | reentrant | xdata |
data/idata:
Description: The variable will be stored in internal data memory of controller.
example:
CODE:
unsigned char data x;
//or
unsigned char idata y;
//or
unsigned char idata y;
bdata:
Description: The variable will be stored in bit addressable memory of controller.
example:
CODE:
unsigned char bdata x;
//each bit of the variable x can be accessed as followsx ^ 1 = 1; //1st bit of variable x is set
x ^ 0 = 0; //0th bit of variable x is cleared
xdata:
Description: The variable will be stored in external RAM memory of controller.
example:
CODE:
unsigned char xdata x;
code:
Description: This keyword is used to store a constant variable in code memory. Lets say you have a big string which is not going to change anywhere in program. Wasting ram for such string will be foolish thing. So instead we will make use of the keyword "code" as shown in example below.
example:
CODE:
unsigned char code str="this is a constant string";
pdata:
Description: This keyword will store the variable in paged data memory. This keyword is used occasionally.
example:
CODE:
unsigned char pdata x;
_at_:
Description: This keyword is used to store a variable on a defined location in ram.
example:
CODE:
unsigned char idata x _at_ 0x30;
// variable x will be stored at location 0x30
// in internal data memory
// variable x will be stored at location 0x30
// in internal data memory
sbit:
Description: This keyword is used to define a special bit from SFR (special function register) memory.
example:
CODE:
sbit Port0_0 = 0x80;
// Special bit with name Port0_0 is defined at address 0x80
// Special bit with name Port0_0 is defined at address 0x80
sfr:
Description: sfr is used to define an 8-bit special function register from sfr memory.
example:
CODE:
sfr Port1 = 0x90;
// Special function register with name Port1 defined at addrress 0x90
// Special function register with name Port1 defined at addrress 0x90
sfr16:
Description: This keyword is used to define a two sequential 8-bit registers in SFR memory.
example:
CODE:
sfr16 DPTR = 0x82;
// 16-bit special function register starting at 0x82
// DPL at 0x82, DPH at 0x83
// 16-bit special function register starting at 0x82
// DPL at 0x82, DPH at 0x83
using:
Description: This keyword is used to define register bank for a function. User can specify register bank 0 to 3.
example:
CODE:
void function () using 2{
// code
}
// Funtion named "function" uses register bank 2 while executing its code
// code
}
// Funtion named "function" uses register bank 2 while executing its code
Interrupt:
Description: This keyword will tells the compiler that function described is an interrupt service routine. C51 compiler supports interrupt functions for 32 interrupts (0-31). Use the interrupt vector address in the following table to determine the interrupt number.
example:
CODE:
void External_Int0() interrupt 0{
//code
}
//code
}
►Memory Models:
There are three kind of memory models available for the user:
- Small: All variables in internal data memory.
- Compact: Variables in one page, maximum 256 variables (limited due to addressing scheme, memory accessed indirectly using r0 and r1 registers)
- large: All variables in external ram. variables are accessed using DPTR.
Depending on our hardware configuration we can specify the momory models as shown below:
CODE:
//For Small Memory model
#pragma small
//For Compact memory model
#pragma compact
//For large memory model
#pragma large
No comments:
Post a Comment