/**********************************************************************
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
//----------------------------------------------