pic16f877 指令周期 問題

作者 Cnyntg927 於 2018年05月05日 10:30:59
大家好,我使用PIC16F877 目前程式可以閃爍,但我想請問 我在網路上看到指令周期的算法是 1/石英晶體 * 4
然後我外掛的石英震盪器是16 mhz 所以我的指令週期是 1/16mhz * 4 =0.25us一週期。所以我拿來RUN我的delay函式=4000*0.25us =1ms 產生1個flag_1ms旗標 並在迴圈減去a值,但是我測試delay(1000)的結果是這個程式run起來大約十秒亮十秒按,所以我改成delay(50)大約0.5秒亮0.5秒按 根據這個現實結果的算法我的指令周期大約是2.5us一周期 我想請問哪裡出狀況了....

code
-----------------------
#include <xc.h>
#include <pic16f877.h>
#include <stdio.h>
#include "configure.h"

void delay_ms(unsigned int a);

int main(int argc, char** argv) {
ADCON1=0x00;
TRISA=0x00;
TRISB=0x00;
TRISC=0x00;
PORTA=0xFF;
while(1)
{
PORTB=0xFF;
PORTC=0xFF;
delay_ms(50);
PORTB=0x00;
PORTC=0x00;
delay_ms(50);
}
}

void delay_ms(unsigned int a)
{
int delay_ms_flag=0;
for(;a!=0;)
{
if(delay_ms_flag==0)
{
for(int i=0;i<=4000;i++)
delay_ms_flag=1;
}
else
{
a--;
delay_ms_flag=0;
}
}

來自: http://www.microchip.com.tw/newbb/viewtopic.php?forum=1&topic_id=22287&post_id=78117