線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1221
推到 Plurk!
推到 Facebook!

為何switch裡P2的值沒有進去

缺席
air0214
一般會員


發表:4
回覆:5
積分:1
註冊:2009-11-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-11-28 20:46:06 IP:210.70.xxx.xxx 訂閱
#include <regx51.h> /* 載入 8051 相關暫存器含括檔 */
sbit a = P0^1; /* 定義P0.1接腳 */
sbit b = P0^2; /* 定義P0.2接腳 */
sbit c = P0^3; /* 定義P0.3接腳 */
sbit d = P0^4; /* 定義P0.4接腳 */

/*----------------------------*/
void delay(unsigned int count)/* 延遲副程式 */
{
unsigned int i,j;
for(i=0;i for(j=0;j<114;j ) ;
}
/*----------------------------*/
void main() /* 主程式 */
{

unsigned char keyin=0xff;
P0_1=0;
P0_2=0;
P0_3=0;
P0_4=0;
while(1)
{
keyin=P2;
switch(keyin)
{
case 0x01:
a=1;
b=0;
c=1;
d=1;
delay(1000);
a=0;
b=1;
c=1;
d=1;
delay(1000);
a=1;
b=1;
c=0;
d=1;
delay(1000);
a=1;
b=1;
c=1;
d=0;
delay(1000);
break;
case 0x02:
a=1;
b=0;
c=1;
d=1;
delay(900);
a=0;
b=1;
c=1;
d=1;
delay(900);
a=1;
b=1;
c=0;
d=1;
delay(900);
a=1;
b=1;
c=1;
d=0;
delay(900);
break;
case 0x03:
a=1;
b=0;
c=1;
d=1;
delay(800);
a=0;
b=1;
c=1;
d=1;
delay(800);
a=1;
b=1;
c=0;
d=1;
delay(800);
a=1;
b=1;
c=1;
d=0;
delay(800);
break;
case 0x04:
a=1;
b=0;
c=1;
d=1;
delay(700);
a=0;
b=1;
c=1;
d=1;
delay(700);
a=1;
b=1;
c=0;
d=1;
delay(700);
a=1;
b=1;
c=1;
d=0;
delay(700);
break;
case 0x05:
a=1;
b=0;
c=1;
d=1;
delay(600);
a=0;
b=1;
c=1;
d=1;
delay(600);
a=1;
b=1;
c=0;
d=1;
delay(600);
a=1;
b=1;
c=1;
d=0;
delay(600);
break;
case 0x06:
a=1;
b=0;
c=1;
d=1;
delay(500);
a=0;
b=1;
c=1;
d=1;
delay(500);
a=1;
b=1;
c=0;
d=1;
delay(500);
a=1;
b=1;
c=1;
d=0;
delay(500);
break;
case 0x00:
a=1;
b=1;
c=1;
d=1;
default:
break;
}
}
}


為何感覺P2的值都沒法傳給P0
編輯記錄
air0214 重新編輯於 2009-11-28 20:47:14, 註解 無‧
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-11-28 21:57:00 IP:114.46.xxx.xxx 未訂閱
怪了, 這個問題怎麼會出現在 C++Builder 討論區?????
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-11-28 22:29:49 IP:59.115.xxx.xxx 訂閱
照你的寫法
while(1)
{
keyin=P2;
switch(keyin)
{
….....
}
}

的寫法loop是不會結束的,難道你因此判別p2的值沒給? 此外,有一個更大的問題,你的p2值是在中斷的程序上被給與的嗎? 若不是 interrupt routine裡給與,那p2永遠沒機會被指定任意的值,因為process一直在loop…

很怪…
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-11-30 00:45:54 IP:114.37.xxx.xxx 訂閱
幫忙移區 ^^
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-11-30 12:04:53 IP:114.46.xxx.xxx 未訂閱
我不知道你有沒有看8051的規格.
它的io要當輸入使用的話.是不是要先輸出1才能去讀???
不然是無法正確讀值.
這個書上都有寫的耶.
foreman
高階會員


發表:3
回覆:124
積分:190
註冊:2004-09-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-12-03 12:25:34 IP:114.39.xxx.xxx 未訂閱
大大:
我猜應改成如下
keyin=~P2;
switch(keyin) {
case 1:
..........
break;
case 2:
..........
break;
case 4:
..........
break;
case 8:
..........
break;
case 16:
..........
break;
case 32:
..........
break;
case 64:
..........
break;
case 128:
..........
break;
}
系統時間:2024-04-19 9:20:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!