MCU: PIC18F45K20

IDE: MPLAB X IDE v6.00

Compiler: XC8 v2.36

 

 

MCC로 프로젝트를 생성하고 인터럽트를 사용하여 타이머를 구동해 보도록 해 보겠습니다.

 

File > New Project를 클릭하여 프로젝트를 생성합니다.

Standalone Project 선택 후 Next >

 

알맞는 Device를 선택하고 Next >

 

Compiler 선택하고 Next >

 

Project Name, Location 설정하고 Finish

 

프로젝트 생성 완료

 

MCC 버튼을 눌러 설정을 불러옵니다.

 

이 버튼이 없다면,  [PIC][XC8][MPLABX] 개발환경 구축 :: 취미 블로그 (tistory.com)

 

[PIC][XC8][MPLABX] 개발환경 구축

안녕하세요. Microchip사의 8bit PIC을 사용하기 위한 MPLABX 환경을 구성해 보겠습니다. 우선 PIC은 MPLABX 라고 불리우는 IDE를 사용합니다. 아래 링크에서 다운 받아 줍니다. MPLAB® X IDE | Microchip Techno..

jeonhj.tistory.com

여기를 참조하여 설치를 해 주세요.

 

 

잠시 기다리면 다음 화면이 나옵니다. Select MCC Classic 버튼을 클릭합니다

Select MCC Classic 클릭

 

라이브러리 선택 페이지인데 사용하지 않으므로 Finish 버튼을 눌러줍니다.

Finish 클릭

 

 

잠시 기다리면 MCC 프로젝트가 생성됩니다.

 

MCC 프로젝트 생성 완료

 

1. System Module 설정

저의 보드에는 크리스탈이 달려있지 않으므로 내부 Oscillator 블럭을 사용하고 PLL을 사용하도록 설정하겠습니다.

 

2. 타이머0 설정

Device Resources에 TMR0를 +클릭합니다

TMR0 Resource 추가

 

 

그러면 Peripherals에 TMR0가 나타나게 되고

저는 1ms마다 인터럽트가 발생되도록 아래와 같이 설정했습니다.

TIMER 0 설정

 

3. 인터럽트 설정

System > Interrupt Module 페이지로 가면 TMR0 인터럽트가 Enabled 된 것을 확인합니다.

 

TMR0 인터럽트 Enabled 설정

 

4. GPIO 설정

타이머가 정상 동작하는지 눈으로 확인하기 위해 GPIO를 설정해줍니다.

저는 PORTD0~7번 핀을 Output으로 설정하겠습니다.

GPIO 설정

설정이 완료되었으면 Generate 버튼을 눌러 코드를 생성합니다.

 

코드 Generate

 

MCC 프로젝트를 종료하려면 MCC 버튼을 다시 누르면 됩니다.

 

 

이제 프로젝트 트리를 보면 다음과 같이 코드 파일이 생성된 것을 볼 수 있습니다.

 

Main.c에 다음과 같이 작성해주었습니다.

#include "mcc_generated_files/mcc.h"

/*
                         Main application
 *  1ms마다 인터럽트를 발생시켜 tick을 증가시키고,
 *  1초마다 PORTD 출력을 토글시키기
 */

volatile uint32_t tick = 0;

void TIMER0_InterruptHandler(void){
    tick ++;
}

void main(void)
{
    uint32_t time = 0;
    // Initialize the device
    SYSTEM_Initialize();

    // Timer0 인터럽트 핸들러 설정
    TMR0_SetInterruptHandler(TIMER0_InterruptHandler);
    // If using interrupts in PIC18 High/Low Priority Mode you need to enable the Global High and Low Interrupts
    // If using interrupts in PIC Mid-Range Compatibility Mode you need to enable the Global and Peripheral Interrupts
    // Use the following macros to:

    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Enable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptEnable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();

    while (1)
    {
        // 1초마다 PORTD 토글
        if (tick - time >= 1000) {
            time = tick;
            PORTD ^= 0xFF;
        }
        // Add your application code
    }
}
/**
 End of File
*/

 

컴파일 하고, 프로그램을 다운로드 해 줍니다.

 

다운로드가 완료되면 1초마다 PORTD가 토글되는 것을 볼 수 있습니다.

반응형

'MCU > PIC' 카테고리의 다른 글

[PIC][MPLABX][XC8]TIMER0 + 인터럽트  (0) 2022.06.17
Microchip Programmer & Debugger  (0) 2022.06.15
[PIC][MPLABX][XC8] GPIO  (0) 2022.06.14
[PIC][MPLABX][XC8] 개발환경 구축  (0) 2022.06.11
[PIC][XC8][MPLAB X][MCC] GPIO  (0) 2022.06.11
[XC8] 컴파일 Warning 메세지 띄우지 않기  (0) 2022.03.28

+ Recent posts