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

請教8051的問題

 
antonny-lee@yahoo.com.tw
一般會員


發表:4
回覆:1
積分:1
註冊:2005-04-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-30 14:26:04 IP:218.165.xxx.xxx 未訂閱
請教各位先進,小弟就讀機械科是8051初學者 小弟的老師指派一個HOMEWORK,限母親節以前完工 有關於將89C2051製作一個音樂盒並編輯三首歌曲(音節超過255) P1.4~P1.7--->接7447--->七段顯示器 P1.0-------->接8歐姆0.25W的SPEAK喇叭 P3.0-------->接按紐開關(控制選曲) P3.1-------->接按紐開關(控制歌曲開始) 條件限制:1.只可以選代表母親節的歌,三首必須有一首以上超過255音節 ,第一首為指定歌曲 2.只可以用組合語言 3.必須要有選曲功能,也就是可以任選一首先聽並且七段顯示器 要秀第幾首歌 小弟的問題是:指定歌曲未超過255已完工,書上抄錄的 1.歌曲超過255,寫出來有很多BUG 2.按鈕控制要以哪一個位址為指向 3.按鈕控制輸入如何同時秀七段顯示器 4.歌曲節拍控制若由16進位控制,如果超過15不是會進位成 為FH -> 10H這樣會讀的到嗎 .SYSMBOLS ;消除雜音 ORG 00H ;主程式起始點位址為00H MOV SP,#5FH ;消除雜音 JMP START ;跳到主程式START ORG OBH ;中斷向量(設定TIMER0位址) JMP TIM0 ;跳到TIMER0並中斷副程式 START: MOV TMOD,#00000001B ;設TIMER0在MODE1 MOV IE,#10000010B ;中斷致能 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 JMP SONG ;跳到SONG SING2: JB P3.1,$ ;<===========================SING2開始,等待按鈕按下 CALL DELAY1 ;等DELAY1秒數 JNB P3.1,$ ;等待按鈕放開 MOV DPTR,#DATA2 ;正式取音符程式歌曲2取DATE2 JMP SONG ;跳到SONG SING3: JB P3.1,$ ;<===========================SING3開始,等待按鈕按下 CALL DELAY1 ;等DELAY1秒數 JNB P3.1,$ ;等待按鈕放開 MOV DPTR,#DATA3 ;正式取音符程式歌曲3取DATE3 JMP SONG ;跳到SONG SONG: MOV A,#0 ;清空累加器 A MOVC A,@A DPTR ;A=#音符前二位元 MOV R1,A ;將BOX A 的值放入暫存區R1 MOV A,#0 ;清空BOX A INC DPTR ;DPTR加1 MOVC A,@A DPTR ;取到A=#節拍碼,為音符的後二位元 JZ END ;比較節拍碼是否等於0,等於跳END MOV R2,A ;先將A=#節拍碼之內容放入暫存區R2,A即清空 MOV A,R1 ;再將R1之值取放入A JNZ SING4 ;JNZ比對A取到之R1是否為0,不等於0跳SING4 CLR TR0 ;等於0不發音 JMP D1 ;前往指定方塊D1 SING4: MOV DPTR,#DATA ;針對音符碼解譯 MOVC A,@ DPTR ;取到的值為16 BIT,放入累加器A~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~這裡有BUG為什麼?? MOV TH0,A ;將A的前8 BIT放入TIMER0的TH0 MOV 21H,A ;將A的值放入21H的位址 MOV A,R1 ;將R1的值放入A INC A ;指定A的位址為加1的位址 MOVC A,@A DPTR ;取到的值為16 BIT,放入累加器A MOV TL0,A ;將A的後8 BIT放入TIMER0的TL0 MOV 20H,A ;將A的值放入20H的位址 SETB TR0 ;TH0,TL0設定結束後,啟動TIMER0 D1: CALL DELAY ;啟動DELAY 單位時間: 1/4 = 125 毫秒,試以計算節拍 INC 30H ;每次取簡碼指標再加 1 JMP SING1 ;跳回程式分析 END: CLR TR0 ;即將結束,先清潔TIMER0 JMP START0 ;<============================回到START0,重新選歌 TIM0: PUSH A ;TIMER的設定值 PUSH PSW MOV TL0,20H MOV TH0,21H CPL P1.0 ;SPEAK反向 POP PSW POP A RETI DELAY1: MOV R7,#02 ;按鈕用DELAY1所需時間,不設定暫時用原節拍停止時間 D4: MOV R4,#125 D5: MOV R3,#248 DJNZ R3,$ DJNZ R7,D4 DJNZ R5,DELAY RETI ;DELAY1結束,用RETI跳回主程式 DELAY: MOV R7,#02 ;節拍用DELAY所需時間 D2: MOV R4,#125 ;4/4拍使用125毫秒 D3: MOV R3,#248 DJNZ R3,$ DJNZ R7,D2 DJNZ R5,DELAY RET ;DELAY結束,因為是副程式最後一行故用RET,不用RETI DATA: DW 00000,63628,63731,63835,63928 ;各音符列表 DW 64021,64103,64185,64260,64331 DW 64400,64463,64524,64580,64633 DW 64684,64732,64777,64820,64860 DW 64898,64934,64968,64994,65030 DW 65058,65085,65110,65134,65157 DW 65178,65198,65217,65235,65252 DW 65268,65283 DATA1: ;1遊子吟第一段 DW 000EH,1002H DW 2208H,1E04H,2204H DW 1A04H,1002H,0002H,1002H DW 2808H,2404H,2804H DW 220CH,0002H,1A02H DW 2C08H,2C04H,2C04H DW 2808H,2202H,2804H DW 2804H,2402H,2202H,2404H,2804H DW 220CH,0002H,1A02H DW 2C08H,3204H,2C04H DW 2808H,2202H,0002H,2804H DW 2804H,2402H,2202H,2404H,2804H DW 220CH,0004H ;2遊子吟第二段 DW 000EH,1002H DW 2208H,1E04H,2204H DW 1A04H,1002H,0002H,1002H DW 2808H,2404H,2804H DW 220CH,0002H,1A02H DW 2C08H,2C04H,2C04H DW 2808H,2202H,2804H DW 2804H,2402H,2202H,2404H,2804H DW 220CH,0002H,1A02H DW 2C08H,3204H,2C04H DW 2808H,2202H,0002H,2804H DW 2804H,2402H,2202H,2404H,2804H DW 220CH,0004H DW 0000H ;<=====END DATA2: ;1媽媽請您不通痛前奏 DW 0002H,2201H,1E01H DW 2202H,2202H,2202H,1E02H,1A05H,1A01H,1A01H DW 1402H,1A01H,1E01H,1A02H,1A01H,1401H,1008H DW 280CH,2C02H,2801H,2201H DW 280CH,2202H,1E01H,1A01H DW 1408H,0002H,1E02H,1402H,1A02H DW 1E08H,2008H ;2媽媽請您不通痛第一副歌(第一輪迴) DW 0002H,2802H,2802H,2202H,2C02H,2802H,2202H,1E02H DW 1A10H DW 0002H,2C01H,3201H,3201H,3201H,3202H,3202H,2204H,2801H,2C01H DW 2810H DW 2C02H,3204H,3201H,2C01H,3602H,3202H,3204H DW 3A03H,3A01H,3A02H,3602H,3205H,3201H,3201H DW 3601H,3201H,3A01H,3601H,3605H,2801H,2801H,2C02H,2801H,3601H DW 3210H ;3媽媽請你不通痛第二副歌 DW 0003H,3601H,3602H,3601H,3601H,3602H,3601H,2801H,3201H,3603H DW 3A05H,3602H,3208H DW 0001H,3201H,3201H,3201H,3202H,2C04H,3201H,2C01H,3201H,3601H,3A01H,3601H DW 360CH,0002H,3A01H,3601H DW 3A03H,3A01H,3A02H,3602H,3205H,3201H,3201H DW 2C02H,3201H,3601H,3202H,3201H,2C01H,2805H,2201H,2201H DW 2805H,2801H,3A01H,3601H,3A01H,3601H,3201H,2C01H,3201H,2C01H,2801H,2C01H DW 3210H ;4媽媽請你不通痛間奏 DW 400CH,4402H,3A02H DW 400CH,3A02H,3601H,3A01H DW 2C08H,0003H,3A01H,3602H,3201H,2C01H DW 3605H,4002H,4002H,3C04H,3A01H,2C01H,3A01H DW 2805H,2202H,3202H,3001H,2C01H,2C04H DW 2803H,2C01H,2201H,1A01H,1402H,1E08H DW 1E05H,2802H,2202H,1E01H,1A01H,1A04H DW 3608H,0002H,2C02H,2802H,2C02H DW 1E10H ;5媽媽請您不通痛第一副歌(第二輪迴) DW 0002H,2802H,2802H,2202H,2C02H,2802H,2202H,1E02H DW 1A10H DW 0002H,2C01H,3201H,3201H,3201H,3202H,3202H,2204H,2801H,2C01H DW 2810H DW 2C02H,3204H,3201H,2C01H,3602H,3202H,3204H DW 3A03H,3A01H,3A02H,3602H,3205H,3201H,3201H DW 3601H,3201H,3A01H,3601H,3605H,2801H,2801H,2C02H,2801H,3601H DW 3210H ;6媽媽請你不通痛第二副歌 DW 0003H,3601H,3602H,3601H,3601H,3602H,3601H,2801H,3201H,3603H DW 3A05H,3602H,3208H DW 0001H,3201H,3201H,3201H,3202H,2C04H,3201H,2C01H,3201H,3601H,3A01H,3601H DW 360CH,0002H,3A01H,3601H DW 3A03H,3A01H,3A02H,3602H,3205H,3201H,3201H DW 2C02H,3201H,3601H,3202H,3201H,2C01H,2805H,2201H,2201H DW 2805H,2801H,3A01H,3601H,3A01H,3601H,3201H,2C01H,3201H,2C01H,2801H,2C01H DW 3210H ;7媽媽請你不通痛間奏 DW 400CH,4402H,3A02H DW 400CH,3A02H,3601H,3A01H DW 2C08H,0003H,3A01H,3602H,3201H,2C01H DW 3605H,4002H,4002H,3C04H,3A01H,2C01H,3A01H DW 2805H,2202H,3202H,3001H,2C01H,2C04H DW 2803H,2C01H,2201H,1A01H,1402H,1E08H DW 1E05H,2802H,2202H,1E01H,1A01H,1A04H DW 3608H,0002H,2C02H,2802H,2C02H DW 1E10H ;8媽媽請您不通痛第一副歌(第三輪迴) DW 0002H,2802H,2802H,2202H,2C02H,2802H,2202H,1E02H DW 1A10H DW 0002H,2C01H,3201H,3201H,3201H,3202H,3202H,2204H,2801H,2C01H DW 2810H DW 2C02H,3204H,3201H,2C01H,3602H,3202H,3204H DW 3A03H,3A01H,3A02H,3602H,3205H,3201H,3201H DW 3601H,3201H,3A01H,3601H,3605H,2801H,2801H,2C02H,2801H,3601H DW 3210H ;9媽媽請你不通痛第二副歌 DW 0003H,3601H,3602H,3601H,3601H,3602H,3601H,2801H,3201H,3603H DW 3A05H,3602H,3208H DW 0001H,3201H,3201H,3201H,3202H,2C04H,3201H,2C01H,3201H,3601H,3A01H,3601H DW 360CH,0002H,3A01H,3601H DW 3A03H,3A01H,3A02H,3602H,3205H,3201H,3201H DW 2C02H,3201H,3601H,3202H,3201H,2C01H,2805H,2201H,2201H DW 2805H,2801H,3A01H,3601H,3A01H,3601H,3201H,2C01H,3201H,2C01H,2801H,2C01H ;10媽媽請你不通痛結尾 DW 320CH,0002H,3A01H,3601H DW 3A03H,3A01H,3A02H,3602H,3205H,3201H,3201H DW 2C02H,3201H,3601H,3202H,3201H,2C01H,2808H DW 280CH,2202H,1E01H,1A01H DW 1408H,0002H,1002H,1402H,1A02H DW 1E08H,2008H DW 3A10H DW 0000H ;<=====END DATA3: ;1回鄉的我前奏 DW 2804H,1E04H,2804H,3204H DW 3610H DW 3201H,3601H,3201H,2C01H,2801H,2C01H,2802H,1E08H DW 2804H,2C04H,4008H DW 280CH,2801H,2C01H,3201H,3601H DW 3A02H,3A02H,0002H,3A02H,3602H,3A01H,3601H,3202H,2C02H DW 3202H,3202H,0002H,3602H,3202H,3601H,3201H,2C02H,2802H DW 2202H,1E02H,1A02H,1E02H,2202H,2802H,2802H,2C02H DW 2802H,0002H,0004H,2802H,2C02H,3202H,3602H DW 3A08H,3A02H,3A02H,3602H,4002H DW 3A04H,0002H,3A02H,3604H,3A02H,3602H DW 3210H DW 3210H ;2回鄉的我第一輪迴 DW 0005H,3A02H,3A04H,3604H DW 3205H,3202H,2C02H,2802H,2204H DW 0004H,1A02H,1E02H,2204H,2802H,2202H DW 2808H,3202H,2C02H,2802H,2202H DW 2810H DW 2810H DW 0005H,2C02H,2C04H,2C04H DW 3205H,3602H,3202H,2C02H,2802H DW 0004H,1E02H,1E02H,1E04H,1E02H,2202H DW 2802H,2204H,2202H,2802H,2202H,2202H,1E02H DW 1A10H DW 1A10H DW 0005H,2802H,3A04H,3604H DW 3205H,3202H,3204H,3602H,3201H,3601H DW 3A10H DW 0005H,3602H,4004H,3A04H DW 3205H,3A02H,3602H,3A01H,3601H,3202H,3801H,3201H DW 2C10H DW 0003H,3202H,3204H,3C02H,2802H DW 2203H,1E02H,2204H,2804H DW 0004H,2C02H,3202H,3604H,3A04H DW 0004H,3A02H,4402H,4404H,4402H,4002H,3A02H DW 4010H DW 4010H DW 4402H,4002H,3A02H,3602H,3A08H DW 4002H,3A02H,3602H,3202H,3608H DW 0004H,3602H,3A02H,3602H,3202H,2C02H,2802H DW 2C10H DW 0003H,3202H,3204H,2C02H,2802H DW 2203H,1E02H,2204H,2804H DW 0002H,2C02H,3202H,3602H,3A01H,3601H,3202H,3602H DW 3A10H DW 0003H,3602H,3604H,3204H DW 2C03H,3202H,2C02H,2802H,2204H DW 0004H,3A02H,3A02H,3604H,4604H DW 4003H,3A02H,3604H,3A02H,3602H DW 3210H DW 3210H ;3回鄉的我間奏 DW 1002H,1402H,1402H,1402H,1402H,1402H,1402H,1A02H DW 1A02H,1E02H,1E02H,1E02H,1E02H,1E02H,2202H,2802H DW 2802H,2C02H,2C02H,2C02H,2C02H,3202H,3602H,3A02H DW 4002H,0002H,4020H,0002H,2802H,2C02H,3202H,3602H DW 3A08H,3A02H,3A02H,3602H,4002H DW 3A02H,0002H,0002H,3A02H,3604H,3A02H,3602H DW 3210H DW 3210H ;4回鄉的我第二輪迴 DW 0005H,3A02H,3A04H,3604H DW 3205H,3202H,2C02H,2802H,2204H DW 0004H,1A02H,1E02H,2204H,2802H,2202H DW 2808H,3202H,2C02H,2802H,2202H DW 2810H DW 2810H DW 0005H,2C02H,2C04H,2C04H DW 3205H,3602H,3202H,2C02H,2802H DW 0004H,1E02H,1E02H,1E04H,1E02H,2202H DW 2802H,2204H,2202H,2802H,2202H,2202H,1E02H DW 1A10H DW 1A10H DW 0005H,2802H,3A04H,3604H DW 3205H,3202H,3204H,3602H,3201H,3601H DW 3A10H DW 0005H,3602H,4004H,3A04H DW 3205H,3A02H,3602H,3A01H,3601H,3202H,3801H,3201H DW 2C10H DW 0003H,3202H,3204H,3C02H,2802H DW 2203H,1E02H,2204H,2804H DW 0004H,2C02H,3202H,3604H,3A04H DW 0004H,3A02H,4402H,4404H,4402H,4002H,3A02H DW 4010H DW 4010H DW 4402H,4002H,3A02H,3602H,3A08H DW 4002H,3A02H,3602H,3202H,3608H DW 0004H,3602H,3A02H,3602H,3202H,2C02H,2802H DW 2C10H DW 0003H,3202H,3204H,2C02H,2802H DW 2203H,1E02H,2204H,2804H DW 0002H,2C02H,3202H,3602H,3A01H,3601H,3202H,3602H DW 3A10H DW 0003H,3602H,3604H,3204H DW 2C03H,3202H,2C02H,2802H,2204H DW 0004H,3A02H,3A02H,3604H,4604H DW 4003H,3A02H,3604H,3A02H,3602H DW 3210H DW 3210H ;5回鄉的我結尾 DW 3A0CH,3602H,4002H DW 3A02H,0002H,0002H,3A02H,3604H,3A02H,3602H DW 3210H DW 0000H ;<=====END
系統時間:2024-05-03 7:09:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!