Êíèãà: Advanced PIC Microcontroller Projects in C
5.3.2 Creating and Compiling a New File
Ðàçäåëû íà ýòîé ñòðàíèöå:
5.3.2 Creating and Compiling a New File
mikroC files are organized into projects, and all files for a single project are stored in the same folder. By default, a project file has the extension “.ppc”. A project file contains the project name, the target microcontroller device, device configuration flags, the device clock, and list of source files with their paths. C source files have the extension “.c”.
The following example illustrates step-by-step how to create and compile a program source file.
Example 5.1
Write a C program to calculate the sum of the integer numbers 1 to 10 and then send the result to PORTC of a PIC18F452-type microcontroller. Assume that eight LEDs are connected to the microcontroller’s PORTC via current limiting resistors. Draw the circuit diagram and show the steps involved in creating and compiling the program.
Solution 5.1
Figure 5.37 shows the circuit diagram of the project. The LEDs are connected to PORTC using 390 ohm current limiting resistors. The microcontroller is operated from a 4MHz resonator.
Figure 5.37: Circuit diagram of the project
The program is created and compiled as follows:
Step 1 Double-click the mikroC icon to start the IDE.
Step 2 Create a new project called EXAMPLE. Click Project?New Project and fill in the form, as shown in Figure 5.38, by selecting the device type, the clock, and the configuration fuse.
Figure 5.38: Creating a new project
Step 3 Enter the following program into the Code Editor section of the IDE:
/**********************************************************************
EXAMPLE PROGRAM
8 LEDs are connected to a PIC18F452 type microcontroller.
This program calculates the sum of integer numbers from 1 to 10
And then displays the sum on PORTC of the microcontroller.
Author: Dogan Ibrahim
File: EXAMPLE.C
**********************************************************************/
void main() {
unsigned int Sum,i;
TRISC = 0;
Sum = 0;
for(i=1; i<=10; i++) {
Sum = Sum + i;
}
PORTC = Sum;
}
Step 4 Save the program with the name EXAMPLE by clicking File?Save As. The program will be saved with the name EXAMPLE.C.
Step 5 Compile the project by pressing CTRL+F9 or by clicking the Build Project button (see Figure 5.39).
Figure 5.39: Build Project button
Step 6 If the compilation is successful, a Success message will appear in the Message Window as shown in Figure 5.36. Any program errors will appear in the Message Window and should be corrected before the project proceeds further. The compiler generates a number of output files, which can be selected by clicking Tools?Options?Output. The various output files include:
.ASM file This is the assembly file of the program. Figure 5.40 shows the EXAMPLE.ASM file.
; ASM code generated by mikroVirtualMachine for PIC - V. 6.2.1.0
; Date/Time: 07/07/2007 16:46:12
; Info: http://www.mikroelektronika.co.yu
; ADDRESS OPCODE ASM
; ----------------------------------------------
$0000 $EF04 F000 GOTO _main
$0008 $ _main:
;EXAMPLE.c,14 :: void main()
;EXAMPLE.c,18 :: TRISC = 0;
$0008 $6A94 CLRF TRISC, 0
;EXAMPLES.c,20 :: Sum = 0;
$000A $6A15 CLRF main_Sum_L0, 0
$000C $6A16 CLRF main_Sum_L0+1, 0
;EXAMPLE.c,21 :: for(i=1; i <= 10; i++)
$000E $0E01 MOVLW 1
$0010 $6E17 MOVWF main_i_L0, 0
$0012 $0E00 MOVLW 0
$0014 $6E18 MOVWF main_i_L0+1, 0
$0016 $ L_main_0:
$0016 $0E00 MOVLW 0
$0018 $6E00 MOVWF STACK_0, 0
$001A $5018 MOVF main_i_L0+1, 0, 0
$001C $5C00 SUBWF STACK_0, 0, 0
$001E $E102 BNZ L_main_3
$0020 $5017 MOVF main_i_L0, 0, 0
$0022 $080A SUBLW 10
$0024 $ L_main_3:
$0024 $E307 BNC L_main_1
;EXAMPLE.c,23 :: SUM = Sum + i;
$0026 $5017 MOVF main_i_L0, 0, 0
$0028 $2615 ADDWF main_Sum_L0, 1, 0
$002A $5018 MOVF main_i_L0+1, 0, 0
$002C $2216 ADDWFC main_Sum_L0+1, 1, 0
;EXAMPLE.c,24 :: }
$002E $ L_main_2:
;EXAMPLE.c,21 :: for(i=1; i <= 10; i++)
$002E $4A17 INFSNZ main_i_L0, 1, 0
$0030 $2A18 INCF main_i_L0+1, 1, 0
;EXAMPLE.c,24 :: }
$0032 $D7F1 BRA L_main_0
$0034 $ L_main_1:
;EXAMPLE.c,26 :: PORTC = Sum;
$0034 $C015 FF82 MOVFF main_Sum_L0, PORTC
;EXAMPLE.c,27 :: }
$0038 $D7FF BRA $
Figure 5.40: EXAMPLE.ASM
.LST file This is the listing file of the program. Figure 5.41 shows the EXAMPLE.LST file.
; ASM code generated by mikroVirtualMachine for PIC - V. 6.2.1.0
; Date/Time: 07/07/2007 16:46:12
; Info: http://www.mikroelektronika.co.yu
; ADDRESS OPCODE ASM
; ----------------------------------------------
$0000 $EF04 F000 GOTO _main
$0008 $ _main:
;EXAMPLE.c,14 :: void main()
;EXAMPLE.c,18 :: TRISC = 0;
$0008 $6A94 CLRF TRISC, 0
;EXAMPLES.c,20 :: Sum = 0;
$000A $6A15 CLRF main_Sum_L0, 0
$000C $6A16 CLRF main_Sum_L0+1, 0
;EXAMPLE.c,21 :: for(i=1; i <= 10; i++)
$000E $0E01 MOVLW 1
$0010 $6E17 MOVWF main_i_L0, 0
$0012 $0E00 MOVLW 0
$0014 $6E18 MOVWF main_i_L0+1, 0
$0016 $ L_main_0:
$0016 $0E00 MOVLW 0
$0018 $6E00 MOVWF STACK_0, 0
$001A $5018 MOVF main_i_L0+1, 0, 0
$001C $5C00 SUBWF STACK_0, 0, 0
$001E $E102 BNZ L_main_3
$0020 $5017 MOVF main_i_L0, 0, 0
$0022 $080A SUBLW 10
$0024 $ L_main_3:
$0024 $E307 BNC L_main_1
;EXAMPLE.c,23 :: SUM = Sum + i;
$0026 $5017 MOVF main_i_L0, 0, 0
$0028 $2615 ADDWF main_Sum_L0, 1, 0
$002A $5018 MOVF main_i_L0+1, 0, 0
$002C $2216 ADDWFC main_Sum_L0+1, 1, 0
;EXAMPLE.c,24 :: }
$002E $ L_main_2:
;EXAMPLE.c,21 :: for(i=1; i <= 10; i++)
$002E $4A17 INFSNZ main_i_L0, 1, 0
$0030 $2A18 INCF main_i_L0+1, 1, 0
;EXAMPLE.c,24 :: }
$0032 $D7F1 BRA L_main_0
$0034 $ L_main_1:
;EXAMPLE.c,26 :: PORTC = Sum;
$0034 $C015 FF82 MOVFF main_Sum_L0, PORTC
;EXAMPLE.c,27 :: }
$0038 $D7FF BRA $
//** Procedures locations **
//ADDRESS PROCEDURE
//----------------------------------------------
$0008 main
//** Labels locations **
//ADDRESS LABEL
//----------------------------------------------
$0008 _main:
$0016 L_main_0:
$0024 L_main_3:
$002E L_main_2:
$0034 L_main_1:
//** Variables locations **
//ADDRESS VARIABLE
//----------------------------------------------
$0000 STACK_0
$0001 STACK_1
$0002 STACK_2
$0003 STACK_3
$0004 STACK_4
$0005 STACK_5
$0006 STACK_6
$0007 STACK_7
$0008 STACK_8
$0009 STACK_9
$000A STACK_10
$000B STACK_11
$000C STACK_12
$000D STACK_13
$000E STACK_14
$000F STACK_15
$0010 STACK_16
$0011 STACK_17
$0012 STACK_18
$0013 STACK_19
$0014 STACK_20
$0015 main_Sum_L0
$0017 main_i_L0
$0F82 PORTC
$0F94 TRISC
$0FD8 STATUS
$0FD9 FSR2L
$0FDA FSR2H
$0FDB PLUSW2
$0FDC PREINC2
$0FDD POSTDEC2
$0FDE POSTINC2
$0FDF INDF2
$0FE0 BSR
$0FE1 FSR1L
$0FE2 FSR1H
$0FE3 PLUSW1
$0FE4 PREINC1
$0FE5 POSTDEC1
$0FE6 POSTINC1
$0FE7 INDF1
$0FE8 WREG
$0FE9 FSR0L
$0FEA FSR0H
$0FEB PLUSW0
$0FEC PREINC0
$0FED POSTDEC0
$0FEE POSTINC0
$0FEF INDF0
$0FF3 PRODL
$0FF4 PRODH
$0FF5 TABLAT
$0FF6 TBLPTRL
$0FF7 TBLPTRH
$0FF8 TBLPTRU
$0FF9 PCL
$0FFA PCLATH
$0FFB PCLATU
$0FFD TOSL
$0FFE TOSH
$0FFF TOSU
Figure 5.41: EXAMPLE.LST
.HEX file This is the most important output file as it is the one sent to the programming device to program the microcontroller. Figure 5.42 shows the EXAMPLE.HEX file.
:1000000004EF00F0FFFFFFFF946A156A166A010E05
:10001000176E000E186E000E006E1850005C02E1A4
:1000200017500A0807E31750152618501622174ACA
:10003000182AF1D715C082FFFFD7FFFFFFFFFFFF90
:020000040030CA
:0E000000FFF9FFFEFFFFFBFFFFFFFFFFFFFF0B
:00000001FF
Figure 5.42: EXAMPLE.HEX
- Shared Cache file
- Áåçîïàñíîñòü âíåøíèõ òàáëèö. Ïàðàìåòð EXTERNAL FILE DIRECTORY
- Ðàçðàáîòêà ïðèëîæåíèé áàç äàííûõ InterBase íà Borland Delphi
- Open Source Insight and Discussion
- Introduction to Microprocessors and Microcontrollers
- Chapter 6. Traversing of tables and chains
- Chapter 8. Saving and restoring large rule-sets
- Chapter 11. Iptables targets and jumps
- Chapter 5 Installing and Configuring VirtualCenter 2.0
- Chapter 13. rc.firewall file
- Chapter 16. Commercial products based on Linux, iptables and netfilter
- Appendix A. Detailed explanations of special commands