📄 zichxu.asm
字号:
NAME SHIYAN
?PR?MUSIC?SHIYAN SEGMENT CODE
?PR?DELAY?SHIYAN SEGMENT CODE
?PR?INTX0?SHIYAN SEGMENT CODE
?PR?INTX1?SHIYAN SEGMENT CODE
;?PR?_RECEIVE?SHIYAN SEGMENT CODE
?PR?_SEND?SHIYAN SEGMENT CODE
EXTRN CODE(DISPLAY)
EXTRN DATA(MUS_NUM)
EXTRN DATA(MUS_TH0)
EXTRN DATA(MUS_TL0)
EXTRN DATA(MUS_TH1)
EXTRN DATA(MUS_TL1)
EXTRN DATA(DIS_BUF)
PUBLIC MUSIC
PUBLIC DELAY
;PUBLIC _RECEIVE
PUBLIC _SEND
TR2 BIT 0CAH
RCAP2L EQU 0CAH
RCAP2H EQU 0CBH
TL2 EQU 0CCH
TH2 EQU 0CAH
;********************************************************
CSEG AT 0003H
LJMP INTX0
RSEG ?PR?INTX0?SHIYAN
INTX0:
push ACC
MOV A,R7
PUSH ACC
MOV A,PSW
PUSH ACC
MOV R7,#18
DJNZ R7,$
SETB P3.2
JB P3.2,INTX0END ;fosc=12MHz,设置波特率为9600
MOV TL0,#155 ;常数在148---162之间正确,用汇编语言写接收程序正确
MOV TH0,#155 ;,而C语言写的接收不正确
SETB TR0
INTX0END:
CLR EX0
POP ACC
MOV PSW,A
POP ACC
MOV R7,A
POP ACC
RETI
;********************************************************
CSEG AT 0013H
LJMP INTX1
RSEG ?PR?INTX1?SHIYAN
INTX1:
MOV TL0,#90H
SETB TR0
MOV TH0,#0FEH
CLR EX1
RETI
;********************************************************
RSEG ?PR?_SEND?SHIYAN
_SEND:
CLR P3.3
MOV A,R7
MOV R7,#8
SENDLP:
MOV R6,#50
DJNZ R6,$
RRC A
MOV P3.3,C
DJNZ R7,SENDLP
MOV R6,#50
DJNZ R6,$
SETB P3.3
MOV R6,#50
DJNZ R6,$
RET
;********************************************************
; RSEG ?PR?_RECEIVE?SHIYAN
;_RECEIVE:
SETB EX0
MOV SBUF,R7
CLR TF0
SETB P3.2
MOV R7,#8
RECEIVELP:
JNB TF0,$
MOV C,P3.2
RRC A
CLR TF0
DJNZ R7,RECEIVELP
MOV DIS_BUF+1,A
JNB TF0,$
CLR TR0
RET
;********************************************************
RSEG ?PR?DELAY?SHIYAN
DELAY: ;显示延时2ms;fosc=12MHz
MOV A,R6
push ACC
MOV A,R7
PUSH ACC
MOV R7,#4
DELP1:
MOV R6,#250
DJNZ R6,$
DJNZ R7,DELP1
POP ACC
MOV R7,A
POP ACC
MOV R6,A
RET
;*************************************************************************
RSEG ?PR?MUSIC?SHIYAN
music: ;音乐子程序
MOV A,R0
push ACC
MOV A,R1
push ACC
MOV A,R3
PUSH ACC
MOV MUS_NUM,#0
MOV DIS_BUF+6,#55H
MUSLP:
MOV A,MUS_NUM
INC MUS_NUM
MOV DPTR,#gepu
MOVC A,@A+DPTR
JZ JIESHU
MOV R0,A ;R0中为歌谱
ANL A,#0F0H
JZ MUNT1
SWAP A
RL A
MOV R1,A
MOV DPTR,#timex
MOVC A,@A+DPTR
MOV TH0,A
MOV MUS_TH0,A ;C语言中的变量
MOV A,R1
INC A
MOVC A,@A+DPTR
MOV TL0,A
MOV MUS_TL0,A
MOV A,#14
ADD A,R1
MOV R1,A
MOVC A,@A+DPTR
MOV TH2,A
MOV RCAP2H,A
MOV MUS_TH1,A
MOV A,R1
INC A
MOVC A,@A+DPTR
MOV TL2,A
MOV RCAP2L,A
MOV MUS_TL1,A
; SETB TR0
SETB TR2
MUNT1:
MOV A,R0
ANL A,#0FH
MOV R3,A
MOV A,DIS_BUF+6 ;C语言中的数组在汇编中的使用方法
CPL A
MOV DIS_BUF+6,A
MLP1:
LCALL DEL1S
DJNZ R3, MLP1
; CLR TR0
CLR TR2
LJMP MUSLP
JIESHU:
SETB P2.7
POP ACC
MOV R3,A
POP ACC
MOV R1,A
POP ACC
MOV R0,A
RET
;************************************************************************
DEL1S: ;音乐延时
MOV A,R4
PUSH ACC
MOV R4,#12 ; #80
DEL:
LCALL DISPLAY ; DELAY ;KEY;
DJNZ R4,DEL
POP ACC
MOV R4,A
RET
;*********************************************************************************
; RSEG ?CO?timexb?MUSIC
timex:
; DW 0,58724,59109,59809,60434,60991 ;12MHz?
; DW 61248,61713, 62130,62323,62672,62985,63263
DW 0, 62130,62323,62672,62985,63263
DW 63391,63625, 63834,63929,64104,64261,64400 ;
DW 64463,64581, 64685,64732,64820,64898,64968, 65000 ;降B调,M3~HH1
; DW 0,62401,62582,62903,63979,63441 ;为11.0592MHz,为双音演奏
; DW 63558,63777,63969,64054,64216,64360,64489
; DW 64547,64655,64751,64795,64876,64948,65012
; DW 65042
;***************************************************
; RSEG ?CO?gepub?MUSIC
gepu: ;十八湾水路到我家。降B调,M3~HH1
DB 32H,31H,31H,41H,61H,41H,31H,32H,02H,62H,41H,61H,7FH,0A1H
DB 71H,71H,71H,71H,0A2H,0A1H,81H,72H,02H,71H,61H,61H,41H,66H,41H,33H,06H
DB 32H,31H,31H,41H,61H,41H,31H,32H,01H,31H,71H,61H,61H,41H,61H,68H,62H
DB 81H,71H,61H,41H,31H,11H
DB 72H,71H,61H,61H,41H,32H,72H,71H,61H,61H,41H,32H,34H,41H,61H,41H,31H,38H,32H,02H
DB 31H,41H,61H,71H
DB 82H,81H,71H,82H,81H,71H,82H,81H,71H,62H,02H
DB 82H,81H,71H,82H,81H,71H,32H,32H,32H,02H
DB 0A1H,82H,81H,72H,0A1H,82H,81H,72H,0A1H,82H,81H,72H,62H,02H
DB 32H,31H,11H,32H,41H,61H,7CH,0A2H,02H,61H,41H,41H,31H,32H,02H
DB 0A4H,0A1H,81H,81H,71H,0A4H,0A1H,81H,81H,71H
DB 82H,81H,71H,82H,81H,71H,61H,71H,81H,61H,72H,02H ,0
DB 0A4H,0A1H,81H,81H,71H,0A4H,0A1H,81H,81H,71H
DB 82H,81H,71H,82H,81H,71H,61H,41H,41H ,0;169个
DB 62H,02H,61H,41H,41H,31H,32H,02H,72H,72H,0A8H,0D4H,04H,0D4H,04H
DB 0A1H,0B1H,0B1H,0A1H,0A1H,0B1H,0B1H,0A1H,0A1H,81H,81H,71H,0A2H,02H
DB 0A1H,0B1H,0B1H,0A1H,0A1H,0B1H,0B1H,0A1H,0A1H,81H,81H,71H,72H,02H
DB 82H,81H,71H,82H,81H,71H,61H,71H,81H,71H,62H,62H
DB 32H,31H,11H,32H,41H,61H,7CH,0A2H,02H
DB 0A1H,0B1H,0B1H,0A1H,0A2H,02H,0A4H,04H ,0;141个
;**********************************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -