⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zichxu.asm

📁 单片机开发训练板”的使用者提供一个实验参考
💻 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 + -