实验3 串口中断和外部中断EX0

单片机实验3

实验内容

甲、乙两个单片机之间通信,其中甲机连接8个流水灯循环闪烁和一个按键,乙机连接又一个LED数码管,按下甲机的按键,流水灯闪烁不受影响,乙机显示按键按下的次数
单片机型号为AT89C51、用proteus8.9、keil5软件 汇编语言编写

代码

//发送
====================================================================
 Processor: AT89C51
 Compiler:  ASEM-51 (Proteus)
====================================================================
ORG 0000H
AJMP MAIN
ORG 0003H   //中断1地址
AJMP INTOSEL
ORG 0023H	//串口中断地址
AJMP SENDover
ORG 0030H

MAIN:
	MOV TMOD, #20H	//1.定时器T1 , 模式2 八位自动充装载
	MOV TL1, #0FDH	//2.9600MHZ的波特率,
	MOV TH1, #0FDH	//3.
	SETB TR1	//开定时器1
	MOV SCON, #50H	//串口通讯模式1
	MOV R0, #0FEH  	//流水灯循环
	MOV R1, #1H   	//起始按键
	SETB EX0	//开外部中断0
	SETB IT0	//模式1
	SETB ES		//开串口终端
	SETB EA		//开总中断
	MOV SP, #60H	//堆栈
	MOV DPTR, #TAB	
LEDLOOP:	//流水灯循环
	MOV A, R0
	MOV P0, A
	RL A
	MOV R0, A
	LCALL DELAY	//延时
	AJMP LEDLOOP

INTOSEL:	//外部中断
	INC SP	//保护现场
	PUSH  ACC
	MOV A, R1	//按键次数
	LCALL Choose	//判断按键次数,并且判断是否重新归零
	MOVC A, @A+DPTR
	MOV SBUF, A	//发送数据
	POP ACC		//还原现场
	DEC SP
	RETI	//退出
	
Choose:
	INC R1	//按键+1
	CJNE R1, #0AH,RET1	//判断是否过10次  语法CJNE
	MOV R1, #0H
	RET
RET1:
	RET

SENDover:	//串口中断
	JNB TI, $	//判断是否发送完毕
	CLR TI	//清零
	RETI	//返回
//延迟
DELAY:
	MOV R2, #03H
LOOP:
	MOV R3 , #0FFH
LOOP1:
	MOV R4 , #0FFH
	DJNZ R4 , $
	DJNZ R3 , LOOP1
	DJNZ R2, LOOP
	RET
//共阳性数码管	
TAB:
	DB 0C0H , 0F9H , 0A4H , 0B0H , 99H , 92H , 82H , 0F8H , 80H , 90H 
END

// 接收

====================================================================
	Created:   2021
	Processor: AT89C51
	Compiler:  ASEM-51 (Proteus)
====================================================================
ORG 0000H
AJMP MAIN
ORG 0023H
AJMP Reach	//接受中断入口
ORG 0030H

MAIN:
	MOV TMOD, #20H	//设置波特率 发送和接收的波特率必须一致
	MOV TL1, #0FDH
	MOV TH1, #0FDH
	SETB TR1
	MOV SCON, #50H	//串口模式1
	SETB ES
	SETB EA
	MOV P0, #0C0H	//首次数码管显示0
Reach:	//接收
	JNB RI, $	//等待接收
	MOV A, SBUF	//将接收的数据赋值给累加器A
	MOV P0, A	//在数码管上显示按键次数
	CLR RI		//清零
	LJMP Reach
END

开始图开始
按键一次

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值