89C2051的小問題(組合語言) |
答題得分者是:阿信
|
antonny-lee@yahoo.com.tw
一般會員 發表:4 回覆:1 積分:1 註冊:2005-04-30 發送簡訊給我 |
事先申明,小弟是初學者,如果問題太過膚淺請多包函
小弟有一個homework是關於製作音樂盒的,寫程式時遇到bug
1.程式開端一定要用宣告嗎??宣告的作用是什麼??
若程式使用宣告真的會使程式變比較短嗎??
2.使用按鈕控制P3.0 ,P3.1 這樣的語法對嗎??(P0.1為Speak, P1.4~P1.7接7447 => 七段顯示器)
START0: MOV 30H,#00 ;取樂譜碼指標,以30H為開端,每次00個BITES JB P3.0,$ ;按選歌鈕 MOV 30H,P3.0 ;令30H,取決於P3.0外部指令 GET: MOV 30H,#00H ;選取歌曲 XRL 30H,#01H ;比對30H,為01H MOV P1,#00010000B ;七段顯示器秀1,但不影響喇叭 JZ SING1 ;若相等跳SING1 XRL 30H,#02H ;比對30H,為02H MOV P1,#00100000B ;七段顯示器秀2,但不影響喇叭 JZ SING2 ;若相等跳SING2 XRL 30H,#03H ;比對30H,為03H MOV P1,#00110000B ;七段顯示器秀3,但不影響喇叭 JZ SING3 ;若相等跳SING3 JMP GET ;跳回GET,選錯可以從頭SING1~SING3更新 SING1: JB P3.1,$ ;<======SING1開始,等待按鈕按下 CALL DELAY1 ;等DELAY1秒數 JNB P3.1,$ ;等待按鈕放開 MOV DPTR,#DATA1 ;正式取音符程式歌曲1取DATE1發表人 - antonny-lee@yahoo.com.tw 於 2005/04/30 16:09:42 發表人 - antonny-lee@yahoo.com.tw 於 2005/04/30 16:14:14 |
阿信
版主 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
你有編譯過嗎 有語法錯誤耶
第三行:沒有把一個Bit放進一個Byte的指令 邏輯錯誤~
第四行第五行... :把#00H給30H
又判斷30H是否為#01H、#02H...
這不就像把水桶的水倒光
然後再檢查還有多少水是一樣的道理嗎
(根本不用檢查 一定沒水的 不是嗎) 程式風格:
記憶體的使用 最好宣告一個名字 ; ======================================= 程式 簡單一點 可以一個按鍵控制一首音樂
假設 第一首:P3.0 第二首:P3.1 第三首:P3.2
Start0: mov 30H,#00H jb P3.0,Start0 ;3個按鈕都放開才會到Start1 jb P3.1,Start0 jb P3.2,Start0 Start1: jnb P3.0,Get1 ;判斷第一首的按鈕 jnb P3.1,Get2 ;判斷第二首的按鈕 jnb P3.2,Get3 ;判斷第三首的按鈕 jmp Start1 ;都沒按 作迴圈 ;------------------------------------------ Get1: mov P1,#00010000B ;顯示1 jmp Sing1 Get2: mov P1,#00100000B ;顯示2 jmp Sing2 Get3: mov P1,#00110000B ;顯示3 jmp Sing3 ;------------------------------------------ Sing1: ; Sing1的程式------------------- 美好的事物 稍縱即逝 |
antonny-lee@yahoo.com.tw
一般會員 發表:4 回覆:1 積分:1 註冊:2005-04-30 發送簡訊給我 |
|
阿信
版主 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |