請問有沒有人用過單晶片16F877的計數器功能呢 |
缺席
|
barryHsu
一般會員 發表:55 回覆:49 積分:20 註冊:2005-01-25 發送簡訊給我 |
有沒有人有用過16F877的計數器功能,使用的軟體試用CCS C寫的,小弟我有寫了一段簡單的程式,但是執行出來不是我預期的這樣,想要請問各位大大,我做的功能是,給五個訊號給同一個腳位之後會帶動另外一個腳位是HIGH的程式
#include<16F877.h> #fuses HS,NOWDT,NOPROTECT,NOBROWNOUT #use delay(clock=4000000) void main() { int a=0; do { if (input(PIN_D2)) { a=a 1; if(a==5) { output_high(PIN_D3); } } }while(1); }P.S: po程式碼請做好縮排動作.您有用code指令,但沒有做好縮排. 發表人 - ㊣ 於 2005/06/29 10:21:52 |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
請清楚描述問題.所謂執行不是你預期的,那執行結果是怎樣呢?
"給五個訊號給同一個腳位之後會帶動另外一個腳位是HIGH"-->你所謂的5個訊號是指?? 你的寫法看起來,只要PIN_D2 high一段時間後,PIN_D3便會輸出high,且一直為high
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
barryHsu
一般會員 發表:55 回覆:49 積分:20 註冊:2005-01-25 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
1>改用中斷的方式,每次觸發才使a+1,a=5時PIN_D3才輸出high.(觸發可為low active或high active) 2>PIN_D2為high後,等其變為low 才做a=a+1
do { if (input(PIN_D2)) { a=a 1; if(a==5) { output_high(PIN_D3); } } }while(1); 第二個方法將上面的部分修改為下面的部分試試 do { if (input(PIN_D2)) { while(input(PIN_D2)); a=a 1; if(a==5) { output_high(PIN_D3); } } }while(1);
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
barryHsu
一般會員 發表:55 回覆:49 積分:20 註冊:2005-01-25 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
|
barryHsu
一般會員 發表:55 回覆:49 積分:20 註冊:2005-01-25 發送簡訊給我 |
|
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
引言: ㊣您好: 因為我寫這個程式是要搭配光遮斷器做的,因為我想要用光遮斷器作位置回饋,所以我才會想說我這樣寫行不行,你所說的第二種方法,不知道你可不可以舉各範例,不好意思...你沒看清楚我回的嗎?我已經寫在下面了........ 請看清楚我的回應...
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
barryHsu
一般會員 發表:55 回覆:49 積分:20 註冊:2005-01-25 發送簡訊給我 |
|
barryHsu
一般會員 發表:55 回覆:49 積分:20 註冊:2005-01-25 發送簡訊給我 |
㊣您好:
我將程式修改過了,不知道我有沒有誤會您的意思,我將程式修改成如下所示。
#include<16F877.h> #fuses HS,NOWDT,NOPROTECT,NOBROWNOUT #use delay(clock=4000000) void main() { int a=0; int b=0; do { output_low((PIN_D2)); output_low((PIN_C4)); if(input(PIN_D0)) { while(input(PIN_D2)) a=a 1; if(a==5) { output_high(PIN_D3); } } if(input(PIN_D1)) { output_low((PIN_D2)); while(input(PIN_C4)) b=b 1; if(b==5) { output_low(PIN_D3); } } }while(1); } |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
你這次的功能又是什麼?你這樣寫應該達不到你要的動作....
看仔細....我寫的是:
do { if (input(PIN_D2)) { while(input(PIN_D2)); a=a 1; if(a==5) { output_high(PIN_D3); } } }while(1);
------
------------------------------------------------------------------------- 走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!? |
barryHsu
一般會員 發表:55 回覆:49 積分:20 註冊:2005-01-25 發送簡訊給我 |
|
阿信
版主 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
試試看吧
< class="code">
#include<16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT
#use delay(clock=4000000)
void main()
{
int a=0;
int b=0;
while(1) {
whlie (input(PIN_D2)==1) {
if (b==0) a=a 1;
b=1;
}
whlie (input(PIN_D2)==0) {
if (b==1) a=a 1;
b=0;
} if (a>=10) output_high(PIN_D3);
}
}
-------------------
美好的事物 稍縱即逝
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |