作者cheerful526 (莉莉橘)
站内Electronics
标题[请益] 关於8051音乐盒的程式
时间Sun Jan 6 14:42:42 2008
老师希望我们作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
1F:推 mosquito520:先搞清楚为什麽会发出声音...再来看这个程式是不是做 01/06 15:19
2F:→ mosquito520:对应的工作...还有...模拟器不是万能的... 01/06 15:20
3F:→ mosquito520:模拟器也是有可能会出错的...至少我就用过某个模拟器 01/06 15:20
4F:→ mosquito520:在模拟timer的时候会出现诡异的问题... 01/06 15:20
5F:→ mosquito520:你说的错误的地方只是个简单的loop... 01/06 15:21
6F:→ mosquito520:检查进去Delay之前A的值是多少吧 01/06 15:23
7F:→ cheerful526:你好~ 想请问为什麽会在此发生错误 谢谢您 01/06 15:27