[問題] AT89S51 keil c 的語法問題 switch case

看板ASM (組合語言)作者 (怪獸)時間12年前 (2012/09/15 20:52), 編輯推噓1(1016)
留言17則, 5人參與, 最新討論串1/1
不好意思我想問一下 有關 AT89S51 keil c 的語法問題 目前在學switch case的語法 我用整個8bit PORT 0當輸入 下面的程式是沒問題的 switch (P0) { case 0xFF: { P1=0XF0; } break; case 0xFE: { P1=0X0F; } break; } 但若改port 0.7只有一個bit當輸入的話(如下) 下面的程式是有問題的 switch (P0_7) { case 1: { P1=0XF0; } break; case 0: { P1=0X0F; } break; } compiler就過不去了 他說switch expression has illeagl type 想問一下如果只想用一個bit來做迴圈判斷式的話 可以做到嗎? 謝謝 -- HEY~~~HEY~~~CHAAAAARLIE~!   。。。。。 1 http://ppt.cc/Mvip ⊙ . ▼▼▼▼ 2 http://ppt.cc/Waty \▲▲▲▲ 3 http://ppt.cc/Vk@J φ . \ . δ ./ㄨ \\/ˊ▄▄ \|/ㄑ ( ︶ ˋ\///\/. by Armour@joke 掐~~~~~力 掐~~~~~力 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.205.245

09/15 23:52, , 1F
#define P0_7 P0^7
09/15 23:52, 1F
啊咧 小弟程式基礎差 看不太懂 不好意思 → kdjf:用case 0x1, 0x0呢? 09/16 09:44 我試試...不行耶 似乎問題是出在 switch (P0_7)這行 ※ 編輯: l1l1l1l1 來自: 123.193.205.245 (09/16 13:17) ※ 編輯: l1l1l1l1 來自: 123.193.205.245 (09/16 13:19)

09/16 20:09, , 2F
bit是擴充變數,不能用在case裡面,組語裡面bit也不能索引
09/16 20:09, 2F

09/16 20:35, , 3F
不愧是前輩 直接道出問題點
09/16 20:35, 3F

09/16 20:36, , 4F
所以建議你改成這樣
09/16 20:36, 4F

09/16 20:36, , 5F
char x;
09/16 20:36, 5F

09/16 20:36, , 6F
x=P0^7;
09/16 20:36, 6F

09/16 20:36, , 7F
switch(x){
09/16 20:36, 7F

09/16 20:37, , 8F
case 1:
09/16 20:37, 8F

09/16 20:37, , 9F
P1=x; break;
09/16 20:37, 9F

09/16 20:38, , 10F
case 2:
09/16 20:38, 10F

09/16 20:38, , 11F
P1=0X0f; break;
09/16 20:38, 11F

09/16 20:39, , 12F
} //CASE裡面我隨便打的 看你自己的需求
09/16 20:39, 12F

09/16 20:40, , 13F
CASE2 我不小心多按了一次 幫我修掉 感謝
09/16 20:40, 13F
成功了!!XDDDDDDDDDD Deltaguita謝謝你

09/16 23:21, , 14F
用char x的話,不就跟P0沒兩樣了嗎? 這段用asm寫如何?
09/16 23:21, 14F
這段可以用~~~ ※ 編輯: l1l1l1l1 來自: 123.193.205.245 (09/16 23:33)

09/16 23:40, , 15F
typecast成char就行了 switch((char)P)_7)
09/16 23:40, 15F

09/16 23:42, , 16F
keil C的 ^ 只在sbit宣告時是定義bit位置
09/16 23:42, 16F

09/16 23:42, , 17F
訂正: switch((char)P0_7)
09/16 23:42, 17F
謝謝m(_"_)m → Deltaguita:恩 要改成x=P0_7才對 XD 09/17 00:50 ※ 編輯: l1l1l1l1 來自: 123.193.205.245 (09/18 20:42)
文章代碼(AID): #1GL7e30C (ASM)
文章代碼(AID): #1GL7e30C (ASM)