[請益] 關於8051音樂盒的程式

看板Electronics作者 (莉莉橘)時間18年前 (2008/01/06 14:42), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串1/1
老師希望我們作8051 音樂盒 但是自己初學者很多的東西不懂 照著書上打了程式碼後 此程式是小蜜蜂的音樂盒 我所使用的 模擬器是 Pinnacle 52 語言為組合語言 1. 但是在 delay程式中的 DJNZ A,DELAY 一直出錯 無法執行 想請問到底是怎麼摟?? 2.如果將MASK掉之後 會過 但是在跑時候出現 The Simulator executed 10 consecutive NOP instructions. 3.我要怎麼去確定這程式是真的可以跑出聲音的嗎? 模擬器要在哪裡看呢 感謝大家 程式↓ ORG 00H AJMP START ORG 0BH AJMP TIMER0 START: MOV SP,#60H MOV R4,#50 MOV R5,#100 MOV TMOD,#2 MOV TH0,#156 MOV TL0,#156 SETB EA SETB ET0 LOOP: MOV R0,#0 NEXT: CLR F0 MOV A,R0 MOV DPTR,#TONE MOVC A,@A+DPTR MOV R1,A XRL A,#0 JZ LOOP MOV A,R0 MOV DPTR,#BEAT MOVC A,@A+DPTR MOV R2,A MOV A,R1 DEC A MOV DPTR,#TABLE MOVC A,@A+DPTR MOV R3,A SETB TR0 S1: ACALL SP JNB F0,S1 CLR TR0 ACALL MUTE INC R0 SJMP NEXT TIMER0: CLR TR0 DJNZ R5,EXIT MOV R5,#100 DJNZ R4,EXIT MOV R4,#50 DJNZ R2,EXIT SETB F0 EXIT: SETB TR0 RETI SP: MOV A,R3 SETB P1.0 ACALL DELAY MOV A,R3 CLR P1.0 ACALL DELAY RET DELAY: NOP MOV R7,#8 DJNZ R7,$ DJNZ A,DELAY RET MUTE: MOV R6,#100 S2: MOV R7,#250 DJNZ R7,$ DJNZ R6,S2 RET TABLE: DB 48 DB 43 DB 38 DB 36 DB 32 DB 28 DB 25 DB 24 TONE: DB 5,3,3 DB 4,2,2 DB 1,2,3,4,5,5,5 DB 5,3,3 DB 4,2,2 DB 1,3,5,5,3 DB 2,2,2,2,2,3,4 DB 3,3,3,3,3,4,5 DB 5,3,3 DB 4,2,2 DB 1,3,5,5,1 DB 0 BEAT: DB 1,1,2 DB 1,1,2 DB 1,1,1,1,1,2 DB 1,1,2 DB 1,1,2 DB 1,1,1,1,4 DB 1,1,1,1,1,2 DB 1,1,1,1,1,2 DB 1,1,2 DB 1,1,2 DB 1,1,1,1,4 END -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.68.193.69

01/06 15:19, , 1F
先搞清楚為什麼會發出聲音...再來看這個程式是不是做
01/06 15:19, 1F

01/06 15:20, , 2F
對應的工作...還有...模擬器不是萬能的...
01/06 15:20, 2F

01/06 15:20, , 3F
模擬器也是有可能會出錯的...至少我就用過某個模擬器
01/06 15:20, 3F

01/06 15:20, , 4F
在模擬timer的時候會出現詭異的問題...
01/06 15:20, 4F

01/06 15:21, , 5F
你說的錯誤的地方只是個簡單的loop...
01/06 15:21, 5F

01/06 15:23, , 6F
檢查進去Delay之前A的值是多少吧
01/06 15:23, 6F

01/06 15:27, , 7F
你好~ 想請問為什麼會在此發生錯誤 謝謝您
01/06 15:27, 7F
文章代碼(AID): #17W7Xbj9 (Electronics)