【微处理器与嵌入式】实验2——蜂鸣器+流水灯 汇编

本文提供了一组使用汇编语言实现流水灯效果和蜂鸣器音乐播放的实例代码。通过详细注释,展示了如何控制单片机的IO口来驱动外部设备,并介绍了基本的延时函数及中断服务程序。

【微处理器与嵌入式】实验2——蜂鸣器+流水灯 汇编

1、流水灯

ORG 0000H
		AJMP MAIN
		ORG 0030H
MAIN:	MOV A,#0FEH
		
;LOOP:	CLR P1.0
		;ACALL DELAY
		;SETB P1.0
		;CLR P1.6
		;ACALL DELAY
		;SETB P1.6
		;AJMP LOOP
		;MOV R7,#10
		
LOOPL:	MOV P1,A
		RL	A
		ACALL DELAY
		JNB ACC.7,LOOPR
		AJMP LOOPL
		
LOOPR:	MOV P1,A
		RR	A
		ACALL DELAY
		JNB ACC.0,LOOPL
		AJMP LOOPR
		
		
		
//延时程序  delay	100ms	
DELAY:	MOV R6,#200
LOOP2:	MOV R7,#248
		NOP
HERE:	DJNZ R7,HERE
		DJNZ R6,LOOP2
		RET
END

2、蜂鸣器

ORG 0000H
		AJMP MAIN
		ORG 0030H
		
		MOV A,#0FEH
		
MAIN:	MOV	R2,#08H
		
		MOV P1,A
		JNB P1.7,INIT
		RL	A
		
DLV1:	MOV	R3,#0FAH
DLV2:	CPL	P2.0
		LCALL	DELAY1		;延时
		DJNZ	R3,DLV2
		DJNZ	R2,DLV1
		
		MOV P1,A
		JNB P1.7,INIT
		RL	A
		
		MOV	R2,#10H		;改变循环初值

DLV3:	MOV	R3,#0FAH
DLV4:	CPL	P2.0
		LCALL	DELAY2
		DJNZ	R3,DLV4
		DJNZ	R2,DLV3
		AJMP	MAIN
		
DELAY1:	MOV	R7,#00

LLA:	DJNZ	R7,LLA
	RET

DELAY2:	MOV	R7,#128

LLB:	DJNZ	R7,LLB
	RET
		

INIT:	MOV A,#0FEH
		RET
		


	END

3、仿真图

在这里插入图片描述

4、蜂鸣器plus

   ORG     0000H
        LJMP    START
        ORG     000BH
        INC     20H     ;中断服务,中断计数器加1
        MOV     TH0,#0D8H
        MOV     TL0,#0EFH  ;12M晶振,形成10毫秒中断
        RETI
START:  
        MOV     SP,#50H
        MOV     TH0,#0D8H
        MOV     TL0,#0EFH
        MOV     TMOD,#01H
        MOV     IE,#82H
MUSIC0:
        NOP
        MOV     DPTR,#DAT      ;表头地址送DPTR
        MOV     20H,#00H        ;中断计数器清0
        MOV     B,#00H          ;表序号清0
MUSIC1:
        NOP
        CLR     A
        MOVC    A,@A+DPTR       ;查表取代码
        JZ      END0     ;00H,则结束
        CJNE    A,#0FFH,MUSIC5
        LJMP    MUSIC3
MUSIC5:
        NOP
        MOV     R6,A
        INC     DPTR
        MOV     A,B
        MOVC    A,@A+DPTR       ;取节拍代码送R7
        MOV     R7,A
        SETB    TR0             ;启动计数
MUSIC2:
        NOP
        CPL     P2.0
        MOV     A,R6
        MOV     R3,A
        LCALL   DEL
        MOV     A,R7
        CJNE    A,20H,MUSIC2    ;中断计数器(20H)=R7否?
                                ;不等,则继续循环
        MOV     20H,#00H        ;等于,则取下一代码
        INC     DPTR
;        INC     B
        LJMP    MUSIC1
MUSIC3:
        NOP
        CLR     TR0     ;休止100毫秒
        MOV     R2,#0DH
MUSIC4:
        NOP
        MOV     R3,#0FFH
        LCALL   DEL
        DJNZ    R2,MUSIC4
        INC     DPTR
        LJMP    MUSIC1
END0:
        NOP
        MOV     R2,#10H ;歌曲结束,延时1秒后继续
MUSIC6:
        MOV     R3,#00H
        LCALL   DEL
        DJNZ    R2,MUSIC6
        LJMP    MUSIC0
DEL:
        NOP
DEL3:                  
        MOV     R4,#02H
DEL4:   
        NOP
        DJNZ    R4,DEL4
        NOP
        DJNZ    R3,DEL3
        RET
        NOP
DAT:
 db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h
 db 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h
 db 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h
 db 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h
 db 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h
 db 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h
 db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h
 db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h
 db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h
 db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h
 db 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h
 db 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h
 db 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h
 db 20h,10h,2bh,10h,26h,30h,30h,80h,00H

END 
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

one1Beginner

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值