2010-01-06 2 views
4

단지 몇 주 전에 마이크로 프로세서 클래스를 대학에서 마쳤습니다. 어셈블리에서 프로그래밍 만했습니다. 우리는 인터럽트에 대해 공정한 금액 (IMHO)을 배웠습니다.PIC 16F684 마이크로 컨트롤러 인터럽트 처리

여기 내 질문 : 나는 C에서 인터럽트 (PIC 16F684 Datasheet 섹션 12.4) 논의하는 데이터 시트 섹션에서 16F684, HiTech 컴파일러를 사용하여 프로그래밍 오전 프로그램이 인터럽트 벡터 0x0004 이동합니다 말한다. 내 마이크로 프로세서 클래스의 어셈블리를 사용하여 해당 주소를 가리키는 .org 문을 설정하고 필요한 어셈블리를 아래에 작성하면 인터럽트가 발생할 때 인터럽트가 발생하여 실행됩니다. 어셈블리에서 그 점을 이해할 수 있습니다. 그러나 C로 프로그래밍 할 때 프로그램 조각이 메모리에 놓여있는 곳을 제어 할 수 없다고 생각합니다. 문제가 있습니다. 내가 C에서 인터럽트 명령을 배치하는 방법을 알아낼 수 없습니다.

내가 명확히 해야할지 알려 주시기 바랍니다!

답변

3

This FAQ by Microchip 내 사본 시간을 다운로드 할 때 한

+0

당신이 준 링크가 좋은 예가 될 것 같습니다. 감사합니다. – onaclov2000

+0

제공된 링크를 사용하여 테스트를 실행했습니다 (인터럽트가 발생하면 LED가 켜짐). 고맙습니다! – onaclov2000

1

당신은 HiTech 문서를 파고 들지 만 컴파일러는 인터럽트 기능을 정의하기위한 특별한 키워드를 가지고있는 경우가 많습니다. 컴파일러 또는 런타임 시스템은 인터럽트에 의해 특별히 호출되는 함수를 처리해야합니다. 벡터를 설정하는 것 외에도 컴파일러 (또는 런타임 시스템)는 모든 레지스터를 보존해야합니다. 정상적인 비 인터럽트 기능을 위해 그렇게 할 필요는 없습니다.

매뉴얼은 친구가됩니다.

void interrupt my_interrupt_handler (void) { 
    handle_interrupts_here(); 
} 

당신은 정말 컴파일러에 대한 매뉴얼을 얻어야한다 :

+0

설명서에 대한 나에게 상기시켜 줘서 고마워, 내가 매뉴얼에있을 것만 큼 단순한 생각을하지 않고 있었던 이유 ... LOL – onaclov2000

3

하이텍 C는 interrupt 기능 형과 C 언어를 확장합니다. 나는 그림 라이트의 사용 설명서를 다운로드 무료 그것은 내가 2001

+0

나는 그것을 시도해야 할 것이다. 이 문장은 플러그 앤 플레이 방식으로 처리됩니다. handle_interrupts_here라는 함수를 처리 할 수 ​​있거나 "인터럽트"가 인터럽트 유형으로 대체 될 수 있습니까? – onaclov2000

+0

PIC16은 인터럽트 유형이 '유형 1'만 있습니다. 일어난 일을 알아 내기 위해 레지스터 (HiTech가 헤더를 글로벌 변수로 정의하고 헤더 파일을 확인)를 확인하는 것은 당신에게 달려 있습니다. – slebetman

0

하이텍 C.이란 이름으로 CCS compiler for PICs 사용을 인터럽트를 사용하는 방법에 대한 몇 가지 정보를했다 적어도 생각 # INT_ * 컴파일러 지시문 또는 다양한 인터럽트 소스에 대한 인터럽트 처리 기능의 '속성'.