📄 msc.asm
字号:
;FOR EAT598
PI EQU 0F208H ;开关输入口地址
ORG 0000H
LJMP START
ORG 000BH ;T0 中断程序入口地址
LJMP INT_T0
ORG 0040H
START:
MOV SP,#60H
MOV TMOD,#01H ;T0 方式 1
CLR TR0 ;关 T0
SETB ET0
SETB EA ;开中断
READ:
MOV DPTR,#PI
MOVX A,@DPTR ;读开关值
MOV R1,A
MOV R0,#08H ;置计数器初值
MOV A,#01H ;置比较初值
KEY:
ANL A,R1
JZ SOUND ;比较开关值
RL A ;改变比较值
DJNZ R0,KEY
CLR TR0 ;开关未拨,不发声
SJMP READ
SOUND:
DEC R0
MOV A,R0
ADD A,R0 ;产生表格偏移量
MOV R0,A
MOV DPTR,#FREQUENCY ;置表格起始值
MOVC A,@A+DPTR
MOV R7,A ;查表,将结果存入公用寄存器R6,R7
MOV A,R0
INC A
MOVC A,@A+DPTR
MOV R6,A
SETB TR0 ;T0 允许
SJMP READ
INT_T0: CLR TR0 ;T0 关闭
CPL P1.0 ;产生波形
MOV TH0,R7 ;重载定时器
MOV TL0,R6
SETB TR0 ;T0 允许
RETI
; 音阶频率表
FREQUENCY:
DB 0FCH,8FH,0FCH,5BH,0FBH,0E9H,0FBH,68H ;i,7,6,5
DB 0FAH,0D8H,0FAH,8CH,0F9H,0E1H,0F9H,21H ;4,3,2,1
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -