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:

unsigned char data x;
//or
unsigned char idata y;
		
bdata

Description: The variable will be stored in bit addressable memory of controller. example:

unsigned char bdata x;
//each bit of the variable x can be accessed as follows
x ^ 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:

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:

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:

unsigned char pdata x;
		
_at_

Description: This keyword is used to store a variable on a defined location in ram. example:

unsigned char idata x _at_ 0x30;
// 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:

sbit Port0_0 = 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:

sfr Port1 = 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:

sfr16 DPTR = 0x82;
// 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:

void function () using 2
{
	// 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.

Interrupt vector
example:

void External_Int0() interrupt 0
{
	//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:

//For Small Memory model
#pragma small
//For Compact memory model
#pragma compact
//For large memory model
#pragma large
		

Conversation

Tue Aug 19 2014, 04:51 PM
allen ndumu
please i will like to know if the problem of speed control of dc motor using keypad and l298 was if yes can i have the complete project send it to the address i really need to see it
Tue Aug 19 2014, 10:47 AM
Amit Bisht
sir i want to have some trending projects on which i could work related to ATmega 16 microcontroller
ExperimenterUK
Sat Aug 16 2014, 04:16 PM
@diligent . create a thread
Sat Aug 16 2014, 03:17 PM
diligent
in assembly langauage programming..
Sat Aug 16 2014, 03:14 PM
diligent
will anyone help me?
Thu Aug 14 2014, 10:24 PM
Amirudin Tone
i help, i need liberary IC 4047 in the proteus. thanks
ExperimenterUK
Thu Aug 14 2014, 03:59 PM
@NARAYANA are you getting an error ?
Tue Aug 12 2014, 11:47 PM
NARAYANA
i am not able to get reg please provide me registration link
Tue Aug 12 2014, 10:32 AM
saloni
sir I was needing literature survey of''ANDROID CONTROLLED SPY ROBOT USING MICROCONTROLLER"
ajay_bhargav
Mon Aug 11 2014, 12:30 PM
@nisargpatel and @NARAYANA please post questions in forum.

Downloads

Comments

samchovatiya
Thu Aug 21 2014, 02:30 PM
hasmukhjain
Wed Aug 20 2014, 06:28 AM
rablo
Tue Aug 19 2014, 10:10 AM
faizhameed
Tue Aug 12 2014, 10:39 PM
ind3siszive
Sun Aug 10 2014, 01:05 PM
snaxxx68
Sat Aug 09 2014, 11:06 AM
[email protected]
Sat Aug 09 2014, 08:58 AM
rajiabdul
Mon Aug 04 2014, 01:31 PM

Online

Guests: 66, Members: 0 ...

most ever online: 182184
(Members: , Guests: 182184) on 06 Aug 2010: 01:37 AM

Members: 37497
Newest member: samchovatiya
Forum Activity
gaurav7577 Avatar
Posted By gaurav7577
Fri Aug 22 2014, 01:30 AM
thnks for rply..i hav attached error pic here...pl...
ajay_bhargav Avatar
Posted By ajay_bhargav
Fri Aug 22 2014, 12:46 AM
It is clearly mention with segment name on the pin...
ajay_bhargav Avatar
Posted By ajay_bhargav
Fri Aug 22 2014, 12:42 AM
What is the error that you're getting?
samchovatiya Avatar
Posted By samchovatiya
Thu Aug 21 2014, 02:57 PM
I want to know that in my project of Simple Digita...
gaurav7577 Avatar
Posted By gaurav7577
Thu Aug 21 2014, 05:47 AM
Hi..I hav lpc 2148 dev board from nex Robotics. I ...
hasmukhjain Avatar
Posted By hasmukhjain
Thu Aug 21 2014, 01:50 AM
for that try to add a variable wch can save your p...
jayachandra Avatar
Posted By jayachandra
Wed Aug 20 2014, 08:11 AM
thanq for reply @hasmukhjain,actually my applicati...
hasmukhjain Avatar
Posted By hasmukhjain
Wed Aug 20 2014, 06:40 AM
Hi Mr jayachandra,I feel ur if statement for switc...
nisargpatel Avatar
Posted By nisargpatel
Wed Aug 20 2014, 01:29 AM
see we are measuring electrical parameters by CT, ...
jayachandra Avatar
Posted By jayachandra
Tue Aug 19 2014, 08:22 AM
HELLOim facing problem with eeprom, i wrote a prog...