看板 ASM 關於我們 聯絡資訊
不好意思我想問一下 有關 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
wasidada:#define P0_7 P0^7 09/15 23:52
啊咧 小弟程式基礎差 看不太懂 不好意思 → 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)
WolfLord:bit是擴充變數,不能用在case裡面,組語裡面bit也不能索引 09/16 20:09
Deltaguita:不愧是前輩 直接道出問題點 09/16 20:35
Deltaguita:所以建議你改成這樣 09/16 20:36
Deltaguita:char x; 09/16 20:36
Deltaguita:x=P0^7; 09/16 20:36
Deltaguita:switch(x){ 09/16 20:36
Deltaguita: case 1: 09/16 20:37
Deltaguita: P1=x; break; 09/16 20:37
Deltaguita: case 2: 09/16 20:38
Deltaguita: P1=0X0f; break; 09/16 20:38
Deltaguita:} //CASE裡面我隨便打的 看你自己的需求 09/16 20:39
Deltaguita:CASE2 我不小心多按了一次 幫我修掉 感謝 09/16 20:40
成功了!!XDDDDDDDDDD Deltaguita謝謝你
narcissusli:用char x的話,不就跟P0沒兩樣了嗎? 這段用asm寫如何? 09/16 23:21
這段可以用~~~ ※ 編輯: l1l1l1l1 來自: 123.193.205.245 (09/16 23:33)
ksmrt0123:typecast成char就行了 switch((char)P)_7) 09/16 23:40
ksmrt0123:keil C的 ^ 只在sbit宣告時是定義bit位置 09/16 23:42
ksmrt0123:訂正: switch((char)P0_7) 09/16 23:42
謝謝m(_"_)m → Deltaguita:恩 要改成x=P0_7才對 XD 09/17 00:50 ※ 編輯: l1l1l1l1 來自: 123.193.205.245 (09/18 20:42)