Beruflich Dokumente
Kultur Dokumente
Quick Reference
V1.3
June 2009
Information contained in this publication regarding device applications and the like is intended through suggestion only and may be
superseded by updates. It is your responsibility to ensure that your application meets with your specifications. No representation or
warranty is given and no liability is assumed by Cytron Technologies Incorporated with respect to the accuracy or use of such information
or infringement of patents or other intellectual property rights arising from such use or otherwise. Use of Cytron Technologiess products
as critical components in life support systems is not authorized except with express written approval by Cytron Technologies. No licenses
are conveyed, implicitly or otherwise, under any intellectual property rights.
ROBOT . HEAD to TOE
Quick Reference C Programming Language
Index
1. Introduction 1
3. Radix Format 3
a. Identifiers 3
b. Variable 4
c. Keywords 4
d. Data Type 5
e. Declaring Variable 6
f. Array 6
g. String 7
5. Operators 9
a. Arithmetic Operators 9
b. Assignment Operators 9
c. Relational Operators 10
d. Logical Operators 10
e. Bitwise Operators 10
f. Shift Operators 10
g. Memory Addressing Operators 11
h. Other Operators 11
i. Operator Precedence 12
6. Statements 13
a. Expression Statements 13
b. Compound Statements 13
c. Control Statements 14
i. if Statement 15
ii. switch Statement 16
iii. for Statement 19
iv. while Statement 20
v. do-while Statement 21
vi. break Statement 22
vii. continue Statement 23
7. Function 24
8. Creating Project using MPLAB + HI-TECH C PRO Compiler 27
9. Starting a PIC Program 36
1. Introduction
This reference guide is intended to quickly introduce user to C language syntax with the aim
to easily start programming microcontroller (PIC) during code development.
1st question, Why C language? Because C offers unmatched power and flexibility in
programming microcontrollers.
a. Comments
b. Include header
file
Prepared by
c. Configuration
bits Cytron Technologies Sdn. Bhd.
19, Jalan Kebudayaan 1A,
d. Include libraries,
function declaration, Taman Universiti,
global variable 81300 Skudai,
e. Function name Johor, Malaysia.
End of block
a. C Comments
/* Put your comments here. This is actually the format of C comments. It may takes
multiple lines, as long as it is end with */
OR
// Put your comments after //, this only allow one line.
// If you need multiple lines you will need // in front of each line.
// This is C++ format of putting comments.
As the file placed before the program proper, it is called a header file (with the file
extension .h).
c. Configuration Bits
A macro that writes a value into the special register that controls the core executing
operations of the microcontroller. It start with two _ and followed with
CONFIG(configuration bits);
If the configuration bits are not specified correctly, the PIC MCUs might not run the
application code properly
e. Function Name
All C programs are written in terms of functions. It is the basic building block in C
programming. C program must have at least the function main( ). The void means the
main( ) function doesn't return any value when it exit (finish running)..
f. Function Body
Every function, including main( ), must have a body enclosed in braces { }.The function
body (also called block) can be of any size. The curly braces are to signify the block of
codes belonging to main( ). Do take note that there MUST NOT be a semicolon after the
closing brace.
3. Radix Format
Radix format is the way a value is being presented in C language
There are four methods to present value:
Radix Format Comments
Binary 0bnumber or 0Bnumber MPASM binary is in format Bnumber.
a. Identifiers
Identifiers are simply names or labels given to program elements such as variables, functions,
arrays.
Identifier
First Character Remaining Characters
_ (underscore) _ (underscore)
A to Z A to Z
a to z a to z
0 to 9
Remember! Is case sensitive, Temp not the same as temp.
b. Variable
A variable is a valid identifier that represents one or more memory locations used to hold
program data. It must be declared before uses. Data type must be assigned to a variable.
c. Keywords
Keywords also called reserved words, have standard, predefined meanings and must be used
only for their intended purpose.
asm auto break case char
class const continue default delete
do double else enum extern
far float for friend goto
huge if inline int interrupt
long near new operator private
protected public register return short
sizeof static struct switch this
typedef union unsigned virtual void
volatile while
d. Data Type
Data Type is type assigned to variable to determine the size and how the variable being
interpreted.
Fundamental Type
Type Description Bits
char single character 8
int integer 16
float single precision floating point number 32
double double precision floating point number 64
e. Declaring Variable
Standard Syntax
type identifier1, identifier2,.., identifiern;
Other method
One declaration on a line
type identifier;
Example:
unsigned int x;
unsigned y = 12;
int a, b, c;
long int myVar = 0x12345678;
long z;
char first = 'a', second, third = 'c';
float big_number = 6.02e+23;
f. Array
Arrays are variables that can store many items of the same data type. The individual items
known as elements, are stored sequentially and are uniquely identified by the array index
(sometimes called a subscript). The index is zero based.
Standard Syntax
type arrayName[size];
size refer to the number of elements and it must be a constant integer.
Example:
int a[5] = {10, 20, 30, 40, 50};
Using Array:
Standard Syntax
arrayName[index]
index may be a variable or a constant
The first element in the array has an index of 0
Example1:
int i, a[10]; //An array that can hold 10 integers
Example2:
unsigned char count[5] = {1,2,3,4,5};
element Value
count[0] 1
count[1] 2
count[2] 3
count[3] 4
count[4] 5
g. String
Strings are arrays of char whose last element is a null character \0 with an ASCII of 0. C has
no native string data type, so strings must always be treated as character arrays.
Strings:
- Are enclosed in double quotes string.
- Are terminated by a null character \0.
- Must be manipulated as arrays of characters (treated element by element).
- May be initialized with a string literal.
Example:
char str1[] = Cytron"; // 7 chars Cytron\0"
5. Operators
Most C Compiler recognizes following operators:
- Arithmetic Operators
- Assignment Operators
- Relational Operators
- Logical Operators
- Bitwise Operators
- Shift Operators
- Memory Addressing Operators
- Other Operators
a. Arithmetic Operators
Operator Operation Example Product Remarks
* Multiplication x * y Product of x and y Binary
/ division x / y Quotient of x and y Binary
Remainder of x divided by
% Modulo x % y y Binary
+ Addition x + y Sum of x and y Binary
- Subtraction x - y Difference of x and y Binary
+ Positive + x Value of x Unary
- Negative - y Negative value of y Unary
++ Increment ++ x increase x by 1 Unary
-- Decrement -- x decrease x by 1 Unary
b. Assignment Operators
Operator Operation Example Result
= Assignment x = y Assign x the value of y
+= Compound Assignment x += y x=x+y
-= Compound Assignment x -= y x=x-y
*= Compound Assignment x *= y x=x*y
/= Compound Assignment x /= y x=x/y
%= Compound Assignment x %= y x=x%y
&= Compound Assignment x &= y x=x&y
^= Compound Assignment x ^= y x=x^y
|= Compound Assignment x |= y x=x|y
<<= Compound Assignment x <<= y x = x << y
>>= Compound Assignment x >>= y x = x >> y
c. Relational Operators
Operator Operation Example Result (FASLE = 0, TRUE0)
< Less than x < y 1 if x less than y, else 0
<= Less than or equal to x <= y 1 if x less than or equal to y, else 0
> Greater than x > y 1 if x greater than y, else 0
>= Greater than or equal x >= y 1 is x greater than or equal to y, else
to 0
== Equal to x == y 1 is x equal to y, else 0
!= Not equal to x != y 1 is x not equal to y, else 0
d. Logical Operators
Operator Operation Example Result (FASLE = 0, TRUE0)
&& Logical AND x && y 1 if both x 0 and y 0, else 0
|| Logical OR x || y 1 if both x = 0 and y = 0, else 1
! Logical NOT !x 1 if x = 0, else 0
e. Bitwise Operators
The operation is carried out on each bit of the first operand with each corresponding bit of the
second operand.
Operator Operation Example Result (for each bit position)
& x & y 1 if 1 in both x and y
Bitwise AND
0, if 0 is x or y or both
| x | y 1, if 1 in x or y or both
Bitwise OR
0, if 0 in both x and y
^ x ^ y 1, is 1 in x or y but not both
Bitwise XOR
0, if 0 or 1 in both x and y
~ ~x 1, if 0 in x
Bitwise NOT
0, if 1 in x
f. Shift Operators
Operator Operation Example Result
<< Shift Left x << y Shift x by y bits to the left
>> Shift Right x >> y Shift x by y bits to the right
h. Other Operators
Operator Operation Example Result
( ) foo(x) Passes control to the function with
Function call
the specified arguments
sizeof Size of an object or sizeof x the number of bytes x occupies in
type in bytes memory
(type) (short) x Converts the value of c to the
Explicit type cast
specified type
?: Conditional x ? y : z The value of y if x is true, else value
expression of z
, Sequential x, y Evaluates x then y, else result is
evaluation value of y
i. Operator Precedence
Which operator will be evaluated first?
Operator Description Associativity
( ) Parenthesized Expression
[ ] Array Subscript
Left-to-Right
. Structure Member
-> Structure Pointer
+ - Unary + and - (Positive and Negative Signs)
++ -- Increment and Decrement
! ~ Logical NOT and Bitwise Complement
* Deference (Pointer) Right-to-Left
& Address of
sizeof Size of Expression or Type
(type) Explicit Typecast
* / % Multiply, Divide, and Modulus
+ - Add and Subtract
<< >> Shift Left and Shift Right
< <= Less Than and Less Than or Equal To
> >= Greater Than and Greater Than or Equal To
== != Equal To and Not Equal to Left-to-Right
& Bitwise AND
^ Bitwise XOR
| Bitwise OR
&& Logical AND
|| Logical OR
? : Conditional Operator
= Assignment
+= -= Addition and Subtraction Assignments
/= *= Division and Multiplication Assignments
Right-to-Left
%= Modules Assignment
<<= >>= Shift Left and Shift Right Assignments
&= |= Bitwise AND and OR Assignments
^= Bitwise XOR Assignments
, Comma Operator Left-to-Right
6. Statements
Statements can be roughly divided into:
- Expression Statements
- Compound Statements
- Control Statements
a. Expression Statements
An expression followed by a semi-colon. It caused the expression to be evaluated.
Example:
i = 0;
i++;
a = 5 + i;
y = (m * x) + b;
printf("Slope = %f", m);
;
b. Compound Statements
A group of individual statements enclosed within a pair of curly braces { and }. It does not
end with a semicolon after }. It is also called Block Statements.
Example:
{
float start, finish;
start = 0.0;
finish = 400.0;
distance = finish start;
time = 55.2;
speed = distance / time;
printf("Speed = %f m/s", speed);
}
c. Control Statements
Used for loops, branches and logical tests. Often require other statements embedded within
them.
Example:
int main(void)
{
int x = 5, y, z; y = 1 (TRUE)
i. if Statement
Standard Syntax
if (expression) statement
expression is evaluated for Boolean TRUE (0) or FALSE (=0), if TRUE, then
statement is executed.
START
START
expression 0
TRUE
expression
expression statement
statement
expression = 0
FALSE
END
END
Example:
{
int x = 5;
if (x)
{
printf("x = %d\n", x);
}
while (1);
}
}
expression is evaluated and tested for a match with the const-expr in each case
clause. The statements in the matching case are executed.
START
START
Const-expr11==
Const-expr
statement
expression? statement11
expression?
Notice that each statement
falls through to the next
Const-expr22==
Const-expr
statement
statement22 This is the default behavior
expression?
expression?
of the switch statement
Const-exprnn==
Const-expr
statement
expression? statementnn
expression?
statement
statementn+1
n+1
END
END
Const-expr11==
Const-expr statement
statement11
expression?
expression? break;
break;
Adding a break
Const-expr22==
Const-expr statement
statement22
statement to each
expression?
expression? break;
break; statement block will
eliminate fall
through, allowing
only one case
Const-exprnn==
Const-expr statement
statementnn
clause's statement
expression?
expression? break;
break; block to be executed
statement
statementn+1
n+1
END
END
Example:
switch(channel)
{
case 2: printf("WBBM Chicago\n"); break;
case 3: printf("DVD Player\n"); break;
case 4: printf("WTMJ Milwaukee\n"); break;
case 5: printf("WMAQ Chicago\n"); break;
case 6: printf("WITI Milwaukee\n"); break;
case 7: printf("WLS Chicago\n"); break;
case 9: printf("WGN Chicago\n"); break;
case 10: printf("WMVS Milwaukee\n"); break;
case 11: printf("WTTW Chicago\n"); break;
case 12: printf("WISN Milwaukee\n"); break;
default: printf("No Signal Available\n");
}
- expression1 initializes a loop count variable once at start of loop (e.g. I = 0).
- expression2 is the test condition: the loop will continue while this is true (e.g. I <=
10).
- expression3 is executed at the end of each iteration (loop): usually to modify the
loop count variable (e.g. i++).
START
START
Initialize loop
variable expression
expression11 Modify loop
i = 0 variable
expression
expression33
i++
Test loop variable for TRUE
exit condition expression2??
expression statement
statement
2
i < n
FALSE
END
END
Example:
int i;
Expected result:
Loop iteration 0
Loop iteration 1
Loop iteration 2
Loop iteration 3
Loop iteration 4
expression?
expression? statement
statement
END
END
Example:
Expected result:
Loop iteration 0
Loop iteration 1
Loop iteration 2
Loop iteration 3
Loop iteration 4
v. do-while Statement
Always called do-while loop
Standard Syntax
do statement while (expression);
START
START
statement
statement
expression?
expression?
END
END
Example:
Loop counter initialized outside
int i = 0;
of loop Loop counter incremented
do manually inside loop
{
printf("Loop iteration #%d\n", i++);
} while (i < 5); Condition checked at end of
loop iterations
Expected result:
Loop iteration 0
Loop iteration 1
Loop iteration 2
Loop iteration 3
Loop iteration 4
Loop iteration 5
START
START
TRUE
expression?
expression? statement
statement
break
break
FALSE
statement
statement
END
END
Example:
int i = 0;
Exit from the loop when I = 5.
while (i < 10) Iteration 6-9 will not be executed.
{
i++;
if (i == 5) break;
printf("Loop iteration #%d\n", i);
}
Expected result:
Loop iteration 1
Loop iteration 2
Loop iteration 3
Loop iteration 4
START
START
TRUE
expression?
expression? statement
statement
continue
continue
FALSE
statement
statement
END
END
Example:
int i = 0;
Skip remaining iteration when i=2.
while (i < 6) Iteration 2 will not be completed.
{
i++;
if (i == 2) continue;
printf("Loop iteration #%d\n", i);
}
Expected result:
Loop iteration 1
Loop iteration 3
Loop iteration 4
Loop iteration 5
7. Functions
Functions are self contained program segments designed to perform a specific, well defined
task.
- All C programs have one or more functions.
- The main( ) function is the minimum function needed.
- Functions can accept parameters from the code that calls them.
- Functions usually return a single value.
- Functions help to organize a program into logical, manageable segments.
eat()
{
main() ...
{ return;
be_merry()
... }
{
eat(); ...
... drink() return;
drink(); { }
... ...
} be_merry();
return;
}
Syntax
Data ty pe of
return expression Parameter List
Name (optional)
Example:
z = (x >= y) ? x : y;
return z;
}
Function Prototypes
- Like variables, a function must be declared before it may be used.
- Declaration must occur before main( ) or other functions that use it.
- Declaration may take two forms:
o The entire function definition
o Just a function prototype the function definition itself may then be placed
anywhere in the program
Example:
int a = 5, b = 10, c;
Function is declared with
int maximum(int x, int y);
prototype before use in main ( )
int main(void)
{
c = maximum(a, b);
printf("The max is %d\n", c)
}
1. Double click on the icon installed on the desktop after installation or select
Start>Programs>Microchip> MPLAB IDE v8.20a>MPLAB IDE. A screen will
display the MPLAB IDE logo followed by the MPLAB IDE desktop as in diagram
below.
2. The next step is to create a project using the Project Wizard. A project is the way the
files are organized to be compiled and assembled. We Choose Project>Project
Wizard.
4. The next dialog (Step One) allows you to select the device. In this example,
PIC16F877A was selected from the drop down menu. Click Next>.
5. The next step of the Project Wizard is sets up the language tools that are used with
this project. Select HI-TECH Universal Toolsuite in the Active Toolsuite list box.
Then select HI-TECH ANSI C Compiler in the Toolsuite Contents box. When you
are finished, click Next.
6. Step three of the project wizard allows user to create new project file.
8. Then open the folder, project. Project named project can be created by typing the
project name in the column for File name, and click Save.
9. Diagram below shown the Project project had been created and the directory. Click
Next>.
10. Step four of the project wizard allow user to add existing file to the project, however,
for this example, no files will be added. Please click Next> to proceed.
11. A summary will be shown at the end of project wizard, all the project parameters are
shown. Please click Finish to exit from project wizard.
12. After pressing the Finish button, review the Project Window on the MPLAB IDE
desktop. It should look like the diagram below. If the Project Window is not open,
please select View>Project.
13. In this example, sample source code for Cytron DIY project, PR23 will be added to
this project. The sample source code can be downloaded at
http://www.cytron.com.my/PR23.asp . Diagram below show the sample source code,
PR23.c being copied and pasted in the folder, project.
14. To add file in Source Files, right click on the Source Files, then click on Add Files,
diagram below shown the example for add file to Source Files
15. After clicking on Add Files, a window pop out, do make sure the Files of type is All
Source Files(*.asm;*.c), then browse to the folder Project to add in PR23.c. User
can select the file, PR23.c, and click open to add the file.
17. After added the source file, user can open PR23.c file in this workspace and try to
compile it. Diagram below shown opened PR23.c file. To compile, user can go
Project>Build or the build icon (in red circle) on menu bar as shown in diagram
below.
18. After build success, a message Build successful! will appear in output window like
shown in diagram below.
Prepared by
Cytron Technologies Sdn. Bhd.
19, Jalan Kebudayaan 1A,
Taman Universiti,
81300 Skudai,
Johor, Malaysia.
URL: www.cytron.com.my
Email: support@cytron.com.my
sales@cytron.com.my