HiTech ANSI C 컴파일러 및 MPLAB v8.43과 함께 PIC18F14K50을 사용하고 있습니다. 지연 기능을 제외한 내 PIC 코드가 마침내 실행되고 작동합니다. 이것은 내 응용 프로그램에있어 중요합니다. 특정 주에서 지정된 밀리 초, 초 또는 분이 필요합니다.Delay on PIC18F
저는 약 2 주 동안이 문제에 대한 해결책을 찾으려고했지만 지금까지 실패했습니다. 내가 포기하고 루프 내에서 asm("nop");
으로 지연 기능을 썼다. 그러나 이것은 예측할 수없는 결과를 가져온다. 반 초나 5 초 정도 기다리라고하면 충분히 정확하게 작동합니다. 그러나 내가 10 분 동안 기다리는 것과 같이 말하면, 지연은 약 10-20 초 동안 지속되고, 2 분 앤드 업은 500ms 지연보다 짧게 깜박입니다. 내가 말했듯이 내가 wait(30000)
까지 wait(500)
를 호출하는 경우 다음 내가 관심 해요 tolerence 내에서 30 초 지연 0.5 초 얻을 것이다,
#include <htc.h>
__CONFIG(1, FOSC_IRC & FCMEN_OFF & IESO_OFF & XINST_OFF);
__CONFIG(2, PWRTEN_OFF & BOREN_OFF & WDTEN_OFF);
__CONFIG(3, MCLRE_OFF);
__CONFIG(4, STVREN_ON & LVP_OFF & DEBUG_OFF);
__CONFIG(5, 0xFFFF);
__CONFIG(6, 0xFFFF);
__CONFIG(7, 0xFFFF);
void wait(int ms)
{
for (int i = 0; i < ms; i++)
for (int j = 0; j < 12; j++)
asm("nop");
}
: 여기
내 설정 퓨즈 및 wait()
기능입니다 그러나 내가 wait(600000)
라고 전화하면 내가 예상했던대로 10 분 지연을 얻지는 않지만 오히려 약 10-15 초이며 wait(120000)
은 2 분 지연을주지 않고 오히려 빠른 깜박임을줍니다.
이상적으로는 __delay_ms()
함수가 작동하고 내 wait()
에서 호출되고 싶습니다. 그러나이 작업을 성공적으로 수행하지 못했습니다. #include <delay.h>
을 시도하면 MPLAB은 그런 파일이나 디렉토리가 없다고 불평합니다. delay.h를 내 HiTech 샘플에서 보면 DelayUs(unsigned char)
이 정의되어 있고 extern void DelayMs(unsigned char)
이 있는데,이 코드는 extern을 직접 내 C 코드에 넣으려고하면 링크 할 때 정의되지 않은 기호 오류가 발생합니다. .
짧은 지연에서 중간 지연 사이의 불일치와 긴 지연은 의미가 없습니다. 내가 가진 유일한 설명은 컴파일러가 NOP 등을 최적화했다는 것입니다.
내가 말했듯이, 위의 구성 퓨즈가있는 PIC18F14K50입니다. 필자는 PIC에 대한 많은 경험이 없지만이 설정을 고려할 때 4MHz로 실행되고 있다고 가정합니다.
도서관이나 매크로의 외부 기능이나 NOP가있는 손으로 직접 작성한 기능에 만족합니다. 내가 필요로하는 것은 1 분에 2 초 정도의 정확성 때문입니다.
그럴듯한 소리입니다! 나는 코드를 업데이트하고 어떤 일이 일어나는지 살펴볼 것이다. – Ozzah
감사합니다. 나는 그냥 기다리면서 wait (1000)를하는 wait_sec (int sec)를 썼다. 여러 번. :) – Ozzah