2011-11-21 3 views
1

나는 PIC18F87J11 장치를 가지고 내가 만들 생각 해요 :
1)해야하는데 100ms마다
2) 우선 순위가 낮은 ISR을 트리거해야하는데 우선 순위가 높은 ISR 트리거 내가 타이머 0에 대한 예에서, 사전 스케일러를 구성하는 방법에 대한 기본적인 지식을 가지고 10ms마다ISR에서 프리스케일러를 마이크로 초 단위로 일정 간격으로 설정하는 방법은 무엇입니까?

, 그것은

movlw b'00000010' 
movwf T0CON 

같은 매뉴얼 페이지 읽기의,이해야 Timer0 ~ 16bit 카운터, 프리 스케일러 1 : 8 (장치 설명서 179 페이지)을 구성하십시오. 문제는 100ms 간격을 원할 때 올바른 프리 스케일러 설정을 결정하는 방법을 모르겠다는 것입니다. 도움을 주시면 감사하겠습니다.

편집 :
자, 이제 나는 아마 내가 생각했던 그때 뭘하는지에 대한 방법 덜 생각을 가지고 있음을 알고 있습니다. manual에서 관련 정보를 찾을 수 없습니다 (그리고 거기에있을 것입니다). 설정해야합니다 Timer0 to 100ms 및 Timer1 to 10ms.

+0

@cyphy, 오실레이터 속도에 대한 정보를 줄 수 있습니까? – Kortuk

+0

나는 오실레이터의 속도가 10MHz라고 믿는다. 그러나 내가 이해하지 못하는 매뉴얼에 너무 많은 정보가 있기 때문에 나는 정말로 확신 할 수 없다. – cypher

+0

그러나 많이 읽었을 때 나는 (보통 여러 마이크로 컨트롤러를 사용하여) 사진을 보지 못했던 2 ~ 4 번으로 나누는 것을 종종 발견합니다. 나는 LED가 깜박이거나 일부 gpio를 사용하여 새 타이머를 이해하는 경향이있다. (사용 가능한 LED가없는 경우 스코프 또는 전압계를 사용한다.) 초침으로 깜박임 속도를 확인하여 초침 또는 무언가와 비교할 수있다. 스톱워치, 알려진 정확도를 지닌 무언가. 프리스케일러와 함께 플레이하고 이해했는지 확인하십시오. 일단 타이머가 이해되면 성공에 대한 일정 수준의 시간 간격을 선택하는 것이 간단합니다. –

답변

1

여기 TMR0에 대한 ISR 우선 순위 시작 루틴이 있습니다.

사용자가 정의해야합니다 MCPU 개시 코드의 매우 시작에서

...

;Init TMR0 as 8 bit timer, overflow every 1024 CPU cycles if TMRxPrescaler4 is set 
;{ 
TMRxPrescaler2  equ 0 
TMRxPrescaler4  equ 1 
TMRxPrescaler8  equ 2 
TMRxPrescaler16  equ 3 
TMRxPrescaler32  equ 4 
TMRxPrescaler64  equ 5 
TMRxPrescaler128 equ 6 
TMRxPrescaler256 equ 7 

    movlw (1<<TMR0ON) + (1<<T08BIT) + TMRxPrescaler4 
    movwf T0CON 
    bsf INTCON, TMR0IE  ;enable TMR0 overflow interrupt 
;}; 

MCPU 개시 인터럽트에 전환하는 것을 잊지 마세요 후 ...

bsf  INTCON, GIE 

ISR의 rutine :

ISR 
    bcf INTCON, TMR0IF    ;demask TMR0 overflow interrupt 
;your ISR code 
    retfie 1 

10MHz CPU 클럭의 경우 TMR0 오버 플로우의 ISR 루틴 카운트 수 : 10000000/4/102 4 = 2441.4는 1 초 동안 오버플로됩니다.

두 이벤트를 모두 처리하는 ISR 루틴은 하나만 사용하는 것이 좋습니다.

관련 문제