Basic of a C program

As we already discussed, Keil C is not much different from a normal C program. If you know assembly, writing a C program is not a problem, only thing you have to keep in mind is forget your controller has general purpose registers, accumulators or whatever. But do not forget about Ports and other on chip peripherals and related registers to them.

In basic C, all programs have atleast one function which is entry point for your application that function is named as \"main\" function. Similarly in keil, we will have a main function, in which all your application specific work will be defined. Lets move further deep into the working of applications and programs.

When you run your C programs in your PC or computer, you run them as a child program or process to your Operating System so when you exit your programs (exits main function of program) you come back to operating system. Whereas in case of embedded C, you do not have any operating system running in there. So you have to make sure that your program or main file should never exit. This can be done with the help of simple while(1) or for(;;) loop as they are going to run infinitely. Following layout provides a skeleton of Basic C program.

void main()
{
	//Your one time initialization code will come here
	while(1){
		//while 1 loop
		//This loop will have all your application code
		//which will run infinitely
	}
}

When we are working on controller specific code, then we need to add header file for that controller. I am considering you have already gone through "Keil Microvision" tutorial. After project is created, add the C file to project. Now first thing you have to do is adding the header file. All you have to do is right click in editor window, it will show you correct header file for your project.

Figure below shows the windows context for adding header file to your c file.

include file

Writing Hardware specific code

In harware specific code, we use hardware peripherals like ports, timers and uart etc. Do not forget to add header file for controller you are using, otherwise you will not be able to access registers related to peripherals.
Lets write a simple code to Blink LED on Port1, Pin1.

#include <REGx51.h>
 //header file for 89C51
void main()
{
	//main function starts
	unsigned int i;
	//Initializing Port1 pin1
	P1_1 = 0; //Make Pin1 o/p
	while(1){
		//Infinite loop main application
		//comes here
		for(i=0;i<1000;i++)
			; //delay loop
		P1_1 = ~P1_1;
		//complement Port1.1
		//this will blink LED connected on Port1.1
	}
}

You can now try out more programs. "Practice makes a man perfect".

In next section of this tutorial, we will learn how to mix C and assembly codes.

Conversation

ExperimenterUK
Sun Jan 25 2015, 08:10 PM
This box is for chat. Post problems in a suitable forum
ExperimenterUK
Sun Jan 25 2015, 08:04 PM
@gaurav.k Use the purple "Post reply" button. Green buttons often present a fresh edit box.
ExperimenterUK
Sun Jan 25 2015, 07:33 PM
@avianash..we have no entry for avianash.. Are you sure that is your login name ?
Fri Jan 23 2015, 04:29 AM
lolokijuh
DJ Bakal tulungan mo ako s IC Tester
Fri Jan 23 2015, 04:29 AM
lolokijuh
sir help about IC Tester
Thu Jan 22 2015, 01:59 PM
apparao majji
could you please help in programming
Thu Jan 22 2015, 10:13 AM
avianash
hi my account is inactive plz help me
gaurav.k
Thu Jan 22 2015, 07:04 AM
not able top post any reply from my login... after pressing "post Reply "it takes me to a blank page
Thu Jan 22 2015, 04:06 AM
frankie
friend, that modification should be done in the program so that led up and down oscillation is one blink, thanks
Wed Jan 21 2015, 05:06 PM
Gargiarya
to get a clear view of seven segment with 8051 visit http://www.mechaterrain.com/seven-segment-fixed-display-using-8051

Downloads

Comments

nawfel
Sat Jan 17 2015, 07:27 AM
Rohi123
Sat Jan 10 2015, 11:00 AM
safakarici
Fri Jan 09 2015, 08:55 PM
Nikita_Pinjare
Thu Jan 08 2015, 03:10 PM
mayank058
Wed Jan 07 2015, 05:43 AM
Overeating
Tue Jan 06 2015, 05:56 AM
trancebreaker11
Sun Jan 04 2015, 07:42 AM
akash474001
Thu Jan 01 2015, 05:49 AM

Online

Guests: 41, Members: 0 ...

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

Members: 37573
Newest member: nawfel
Forum Activity
ExperimenterUK Avatar
Posted By ExperimenterUK
Sun Jan 25 2015, 08:19 PM
According to this page the output is fairly linear...
mayank058 Avatar
Posted By mayank058
Thu Jan 22 2015, 12:16 PM
dear sir, Now i want to generate a si...
mayank058 Avatar
Posted By mayank058
Tue Jan 20 2015, 06:40 AM
dear sir, Now its working properly. Th...
ajay_bhargav Avatar
Posted By ajay_bhargav
Tue Jan 20 2015, 04:36 AM
ajay_bhargav Avatar
Posted By ajay_bhargav
Tue Jan 20 2015, 04:35 AM
I found another issue with your code:calling PWMIn...
mayank058 Avatar
Posted By mayank058
Mon Jan 19 2015, 05:47 AM
dear sir, Please do it for me..
PsySc0rpi0n Avatar
Posted By PsySc0rpi0n
Sun Jan 18 2015, 08:23 PM
But it's a way to debug to consider to the future ...
ajay_bhargav Avatar
Posted By ajay_bhargav
Sun Jan 18 2015, 06:04 AM
I remember i created small library for lpc23xx ser...
ajay_bhargav Avatar
Posted By ajay_bhargav
Sun Jan 18 2015, 06:00 AM
It's obviously a personal choice. Digging into map...
ajay_bhargav Avatar
Posted By ajay_bhargav
Sun Jan 18 2015, 05:58 AM
@karan123 I suggest you to create a new thread for...