1
我是新来的工作汇编代码,我想制作一个程序,它将读取ROM中的值,并根据它们在特定时间长度内播放某个音符的值。代码本身编译得很好,但是当我将代码发送到8051时,没有任何反应。我想我已经正确设置了定时器(以及它们各自的中断)。但是,我绝不是专家。现在代码并没有太多的功能,假设只是一遍又一遍地播放一个音符,但是没有任何反应......实际的芯片是89LPC932A1,这里是一本用户手册:http://www.nxp.com/documents/user_manual/UM10109.pdf8051定时器+中断
这是代码:
#include <reg932.inc>
NOTE_LENGTH EQU R0
HIGH_CURRENT_NOTE EQU R1
LOW_CURRENT_NOTE EQU R2
TEMP EQU R3
HIGH_NOTE_LENGTH EQU R4
LOW_NOTE_LENGTH EQU R5
DPTR_VALUE EQU R6
ORG 0
LJMP SETUP
ORG 000BH
TIMER0: CPL P1.7
MOV TH0, HIGH_CURRENT_NOTE
MOV TL0, LOW_CURRENT_NOTE
RETI
ORG 001BH
TIMER1: CJNE NOTE_LENGTH, #0, TIMER1_END
SETB TR0
MOV TEMP, A
MOV DPTR, #SONG
MOV A, DPTR_VALUE
MOVC A, @A+DPTR
MOV HIGH_CURRENT_NOTE, A
INC DPTR_VALUE
MOV A, DPTR_VALUE
MOVC A, @A+DPTR
MOV LOW_CURRENT_NOTE, A
INC DPTR_VALUE
MOV A, DPTR_VALUE
MOVC A, @A+DPTR
MOV NOTE_LENGTH, A
INC DPTR_VALUE
MOV A, DPTR_VALUE
MOVC A, @A+DPTR
MOV HIGH_NOTE_LENGTH, A
INC DPTR_VALUE
MOV A, DPTR_VALUE
MOVC A, @A+DPTR
MOV LOW_NOTE_LENGTH, A
INC DPTR_VALUE
MOV A, TEMP
MOV DPTR_VALUE, #0
CLR TR0
RETI
TIMER1_END: DEC NOTE_LENGTH
RETI
ORG 0080H
SETUP: MOV DPTR, #SONG
MOV DPTR_VALUE, #0
MOV A, DPTR_VALUE
MOVC A, @A+DPTR
MOV HIGH_CURRENT_NOTE, A
INC DPTR_VALUE
MOV A, DPTR_VALUE
MOVC A, @A+DPTR
MOV LOW_CURRENT_NOTE, A
INC DPTR_VALUE
MOV A, DPTR_VALUE
MOVC A, @A+DPTR
MOV NOTE_LENGTH, A
INC DPTR_VALUE
MOV A, DPTR_VALUE
MOVC A, @A+DPTR
MOV HIGH_NOTE_LENGTH, A
INC DPTR_VALUE
MOV A, DPTR_VALUE
MOVC A, @A+DPTR
MOV LOW_NOTE_LENGTH, A
INC DPTR_VALUE
MOV IEN0, #0x88
MOV TMOD, #0x11
SETB TR1
SETB TR0
MAIN: SJMP $
ORG 0F00H
SONG: DB 80H, 80H, 26, 0, 0
END
无论何时您希望其他人查看它,汇编代码中都需要注释。 SO也不例外。 –