Выбрать главу

/**********************************************************************

                          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

//----------------------------------------------