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

📄 51+Ҧ

📁 AT89C51汇编语言例子大全
💻
字号:
/***************************************************************************
标题:	串口调试程序,中断法接收数据
效果:	运行本例子,打开本例子文件夹中的上位机软件,设置波特率2400,再进行发送数据,数码管显示接收内容
本店网站      http://xxdpj.taobao.com/
以芯换心  竭诚为您服务 您学习单片机的好帮手
近期本店有很多优惠活动 有空就进来看看吧
http://xxdpj.taobao.com/
技术支持QQ:412150384
******************************************************************************/

;脚功能定义
	KEY1 EQU P3.7	;定义按键1
	KEY2 EQU P3.6	;定义按键2
	KEY3 EQU P3.5	;定义按键3
	KEY4 EQU P3.4	;定义按键4
	KEY5 EQU P3.3	;定义按键5
	KEY6 EQU P3.2	;定义按键5

	SMG_q EQU P1.0	;定义数码管阳级控制脚,千位
	SMG_b EQU P1.1	;定义数码管阳级控制脚,百位
	SMG_s EQU P1.2	;定义数码管阳级控制脚,十位
	SMG_g EQU P1.3	;定义数码管阳级控制脚,个位	
;定义数据RAM空间
	LDB EQU 30H	;定义一个变量存放显示值	
	OLDKEY EQU 31H	;保存按键接口状态

;数据存放
ORG 0100
TABLE:	DB 0C0h,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH	
			;表:共阳数码管 0-9 A-F

ORG 0000H
LJMP MAIN
ORG 0023H	;串口中断
LJMP COM

ORG 0100H
MAIN:	MOV TMOD,#20H	;设置定时器1为模式2,做为波特率发生器
	MOV TL1,#0F3H	;2400波特率的初值,板子使用12M晶振,初值=256-12000000/32/12/2400
	MOV TH1,#0F3H	;
	SETB TR1	;启动波特率发生
	MOV SCON,#50H	;串口的工作方式,设置为方式2
	SETB ES		;打开串口中断
	SETB EA		;打开总中断

	MOV LDB,#0	;变量复值0
M0:	LCALL READKEY	;
	JZ M10
	DEC A		;
	JNZ M1		;按下1键
	INC LDB		;显示数据加1处理
	SJMP M10		;处理后转入显示
M1:	DEC A		;处理按键2按下,与上类同
	JNZ M2
	DEC LDB		;减1处理
	SJMP M10
M2:	DEC A		;处理键3按下
	JNZ M3
	MOV A,LDB	;将变量加16处理,十六进制数
	ADD A,#16
	MOV LDB,A
	SJMP M10
M3:	DEC A		;按键4按下
	JNZ M4
	MOV A,LDB	;将变量减16处理
	SUBB A,#16
	MOV LDB,A
	SJMP M10
M4:	DEC A		;按键5按下
	JNZ M5
	MOV LDB,A	;将变量清0
	SJMP M10
M5:	DEC A		;按键6按下,发送数据到串口
	JNZ M10
	MOV A,LDB
	MOV SBUF,A
	JNB TI,$	;等待发关完成
	CLR TI		;

M10:	MOV A,LDB	;用A做参数传递到显示子程序进行显示
	LCALL DISPLAY	;调用显示子程序
	LJMP M0		;循环扫描按键

;串口中断,串口中断其实很简单,设置正确通讯的波特率,中断一来接收数据即可
COM:	JNB RI,CR	;判断是接收中断处理
	CLR RI		;允许接收下一字节,等待下一次中断
	MOV A,SBUF	;将当前接收的数据存入变量空间
	MOV LDB,A
CR:	RETI

;读键值---------------------------------------------
READKEY:	
	MOV A,P3	;
	ANL A,#0XFC	;
	CJNE A,OLDKEY,K01;
	CLR A		;
	SJMP K10	;	
	
K01:	MOV R7,#10	;延时约10MS,消抖动
	CALL DELAYM	;
	MOV A,P3	;
	ANL A,#0XFC	;
	CJNE A,#0XFC,K02 ;
	SJMP K09	; 
K02:	MOV OLDKEY,A	;

	JB KEY1,K1	;
	MOV A,#1	;
	SJMP K10	;
K1:	JB KEY2,K2	;
	MOV A,#2	;
	SJMP K10	;
K2:	JB KEY3,K3	;
	MOV A,#3	;
	SJMP K10	;
K3:	JB KEY4,K4	;
	MOV A,#4	;
	SJMP K10	;
K4:	JB KEY5,K5	;
	MOV A,#5	;
	SJMP K10	;
K5:	JB KEY6,K10	;
	MOV A,#6	;
	SJMP K10	;
K09:	CLR A		;
	MOV OLDKEY,#0XFC;
K10:	RET;

;延时子程序,可由R7控制时间量--------------------------
DELAYM:	MOV R6,#200
	DJNZ R6,$
	DJNZ R7,DELAYM
	RET

;数码管显示子程序-------------------------------------
DISPLAY:MOV DPTR,#TABLE	
	MOV B,#16
	DIV AB 
	CLR SMG_s	;选择十位数码管	
	MOVC A,@A+DPTR	;查表输出定义好的数码管段值到P0口,显示相应的内容
	MOV P0,A
	LCALL DELAY	;延时,停留一会,让人眼感触到它的亮度
	MOV P0,#0FFH	;清除数码管显示,因是共阳型,所以不是0
	SETB SMG_s	;关闭十位数码管

	CLR SMG_g	;选择个位数码管
	MOV A,B		;个位显示
	MOVC A,@A+DPTR	;查表输出定义好的数码管段值到P0口,显示相应的内容
	MOV P0,A
	LCALL DELAY	;延时,停留一会
	MOV P0,#0FFH	;清除数码管显示
	SETB SMG_g	;关闭个位数码管
	RET

;短延时子程序,-----------------------------------------
DELAY:	MOV R7,#10	;延时子程序
	DJNZ R7,$
	RET
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -