Êíèãà: 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

Îãëàâëåíèå êíèãè


Ãåíåðàöèÿ: 1.281. Çàïðîñîâ Ê ÁÄ/Cache: 3 / 1
ïîäåëèòüñÿ
Ââåðõ Âíèç