會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





pic16f877 指令周期 問題
新會員
註冊日期:
4月21日 19:42:17
所屬群組:
註冊會員
文章: 18
等級: 2; EXP: 97
HP : 0 / 49
MP : 6 / 23
離線
大家好,我使用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;
}
}

5月05日 10:30:59
轉換PDF檔 列印


Re: pic16f877 指令周期 問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14335
等級: 72; EXP: 80
HP : 1077 / 1795
MP : 4778 / 74159
離線
用 C 來做 Delay 因為不曉的是怎樣的編譯,所以無法一眼看出究竟是 Delay 了多久。這需要用軟體模擬跑一下才會知道的正確的時間。



for(int i=0;i<=4000;i++)

這絕對不是 0.25uS 就可以執行一個殊值的迴圈敘述。看一下這一行的反組譯後的組合語言,大概要 10 個指令才能完成這一個敘述。

5月07日 12:09:52
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2018 Winter Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project