;机器人代码:(外部中断用来接红外传感器的)
ORG 0000H
JMP INIT
ORG 0003H
JMP INT_0
ORG 000BH
JMP INT_T
ORG 0023H
JMP INT_S
;-------------------------------------
FLAG_F EQU 01H ;功能选择,0为播放,1为演奏
FLAG_L EQU 02H ;指示灯选择,0指示灯亮或1亮
FLAG_P EQU 03H ;是否播放标志,0停止,1播放
FLAG_CH EQU 04H ;演奏时是否换音符,1有效
FLAG_LAST EQU 05H ;播放时是否到最后64分音符
FLAG_PRESS EQU 06H ;是否有演奏按键
FLAG_GO EQU 07H ;是否行走标志位(1为行走,0为停止)
STAT_0 EQU 08H ;4位行走状态,对应P1.0--P1.3
STAT_1 EQU 09H
STAT_2 EQU 0AH
STAT_3 EQU 0BH
FLAG_MUTE EQU 0CH
PERIOD_H EQU 30H ;音长(定时器高位)
PERIOD_L EQU 31H ;音长(定时器低位)
COUNTER EQU 32H ;定时器计数(设定定时周期的倍数)
CU_COUNTER EQU 41H ;当前定时器计数
TONE EQU 33H ;音高
SPEED EQU 34H ;乐曲速度
D_1 EQU 35H
D_2 EQU 36H
P_1 EQU 37H
P_2 EQU 38H
NUM EQU 39H ;乐曲的位置(第几首)
POSITION EQU 40H ;乐曲中音符的位置
TAB_H EQU 42H ;当前乐曲的音长表首地址高八位
TAB_L EQU 43H ;当前乐曲的音长表首地址低八位
TAB_TONE_H EQU 44H ;当前乐曲的音高表首地址高八位
TAB_TONE_L EQU 45H ;当前乐曲的音高表首地址低八位
THIS_NUM EQU 46H ;存储当前按键号
PRE_NUM EQU 47H ;存储上次按键号
COUNTER_1 EQU 48H ;判断是否为最后64分音符用,其值等于COUNTER-1
D_L1 EQU 49H
D_L2 EQU 4AH
D_L3 EQU 4BH
P_L1 EQU 4CH
P_L2 EQU 4DH
TAB_1 EQU 4EH ;查表时的高低字节序号存储
TAB_2 EQU 4FH
CMD EQU 50H
;行走命令存储 (1:功能选择、2:加速、3:减速、4:原速、5:停止/前进、
;(6:左转、7:右转、8:朝前) )
COUNTER_LOOP EQU 51H ;定时器循环计数
; STATUS EQU 52H ;行走状态寄存
PERIOD_TEMP EQU 53H
;*****************主程序*************************
ORG 0030H
INIT: ; CALL LONG
CLR P3.7
; SETB P3.7
MOV SP, #54H
CLR FLAG_F ;初始化
CLR FLAG_L
CLR FLAG_P
CLR FLAG_LAST
SETB FLAG_CH
CLR FLAG_PRESS
SETB FLAG_GO
CLR FLAG_MUTE
SETB STAT_0
SETB STAT_1
SETB STAT_2
SETB STAT_3
MOV CMD, #00H
MOV PERIOD_H, #00H
MOV PERIOD_L, #00H
MOV TONE, #00H
MOV SPEED, #00H
MOV COUNTER, #00H
MOV NUM, #00H
MOV POSITION, #00H
;MOV STATUS, #0FFH
MOV D_1, #80
MOV D_2, #79
MOV P_L1, #01H
MOV P_L2, #0FFH
MOV TMOD, #21H ;定时器0为16位计数器定时 ,1为8位自动装载
MOV TH0, #0FFH
MOV TL0, #0FFH
MOV TH1, #0CCH
MOV TL1, #0CCH
MOV SCON, #0D0H
SETB IT0 ;设定外部中断0为负跳变触发
SETB PX0 ;外部中断为高优先级
SETB PS
SETB EA
SETB ET0
SETB EX0 ;开外部中断
SETB ES
SETB TR1
;CALL DELAY
;-------------------------------------------
LOOP: JB FLAG_F, PLAY ;演奏功能跳转
OUT: JNB FLAG_P, LOOP ;播放部分
MOV A, TONE
JZ MUTE
JB FLAG_MUTE, MUTE_1
SETB P3.7
MUTE_1: CJ