采用AT89S52单片机与MAX232芯片配合串口精灵软件,实现了单片机与计算机之间的双向通信简单的功能
;-------------------------------------------------
;-------------------------------------------------
ORG 0000H
LJMP CSH ;转初始化程序
ORG 0023H
LJMP INTS ;转串行口中断程序
ORG 0050H
;--------------------------------------------------
;---------------初始化程序-------------------------
CSH:
MOV TMOD,#20H ;设置定时器1工作方式2:自动再装入8位计数器
MOV TL1,#0F3H ;设置波特率4800:初值为243
MOV TH1,#0F3H
SETB TR1 ;
MOV SCON,#50H ;设置串行寄存器工作方式1:10位UART
MOV PCON,#80H ;设置波特率倍增位
SETB EA
SETB ES ;允许串行口中断
MOV P2,#0FFH ;按键初始化:低电平检测
MOV R0,#36H ;动态扫描初始位
MOV DPTR ,#TAB ;查表首地址
MOV 3EH,#0FEH ;数码管位控制寄存器赋初值:P1.7控制36H
LJMP MAIN
;--------------------------------------------------
;-------------串行口中断程序-----------------------
INTS:
CLR EA ;关总中断:保证正常执行中断申请
CLR RI
PUSH DPL ;保护栈值
PUSH DPH
MOV 70H,A ;保护累加器A的内容
MOV A,SBUF
MOV 30H,A ;接收PC机发送过来的数据:用30H寄存
POP DPH
POP DPL ;出栈
;-------
MOV A,71H ;对71H取反:作中断执行标志判断
CPL A
MOV 71H,A
;-------
MOV A,70H ;还原A值
SETB EA ;开总中断
RETI
;--------------------------------------------------
;-------------------主程序-------------------------
MAIN:
MOV A,71H ;71H内容取反
CPL A
MOV 71H,A
MOV A,72H ;72H内容取反
CPL A
MOV 72H,A ;71H -71H:为判断是否发生中断服务
;---------
ACALL GETDATA ;调用预发送数据程序
ACALL DISPLAY ;调用显示程序
ACALL SENDDATA ;调用数据发送程序
LJMP MAIN ;返回MAIN
;-------------------------------------------------
;---------预发送数据程序--------------------------
GETDATA:
CLR 00H ;个位按键标志位
CLR 01H ;十位按键标志位
ACALL DIWEI ;调用低半字节修改程序
ACALL GAOWEI ;调用高半字节修改程序
ACALL FUYONG ;调用按键复用程序
RET
;--低半字节处理程序------
DIWEI:
JB P2.0,DIWEIRET ;P2.0:个位按键控制口:低电平有效
ACALL DELAY ;消抖
JB P2.0,DIWEIRET
SETB 00H ;按键有效置标志位
INC 31H
MOV R3,31H ;个位按键稳定性处理:按一次执行一次服务
CJNE R3,#01H,DIWEIRET
INC 32H ;个位控制寄存器32H
MOV R3,32H
MOV 3BH,R3 ;个位数值寄存器3BH
CJNE R3,#10H,DIWEIRET ;十六进制溢出处理
MOV 32H,#00H
MOV 3BH,#00H ;溢出清零
DIWEIRET:
RET
;---高半字节处理程序---
GAOWEI:
JB P2.1,GAOWEIRET ;P2.1:十位按键控制口:低电平有效
ACALL DELAY ;消抖
JB P2.1,GAOWEIRET
SETB 01H ;按键有效置标志位
INC 33H
MOV R3,33H ;十位按键稳定性处理:按一次执行一次服务
CJNE R3,#01H,GAOWEIRET
INC 34H ;十位控制寄存器34H
MOV R3,34H
MOV 3AH,R3 ;十位数值寄存器3AH
CJNE R3,#10H,GAOWEIRET ;十六进制溢出处理
MOV 34H,#00H
MOV 3AH,#00H ;溢出清零
GAOWEIRET:
RET
;----按键复用程序-----
FUYONG:
JNB 00H,CLR31H ;标志位判断:个位计数处理
MOV R3,31H
CJNE R3,#32H,NEXT
MOV 31H,#01H
INC 32H
MOV R3,32H
MOV 3BH,R3
CJNE R3,#10H,NEXT ;十六进制溢出处理
MOV 32H,#00H
MOV 3BH,#00H ;溢出清零
LJMP NEXT
CLR31H:
MOV 31H,#00H ;下次执行初始化
NEXT:
JNB 01H,CLR33H ;标志位判断:十位计数处理
MOV R3,33H
CJNE R3,#32H ,FUYONGRET
MOV 33H,#01H
INC 34H
MOV R3,34H
MOV 3AH,R3
CJNE R3,#10H,FUYONGRET ;十六进制溢出处理
MOV 34H,#00H
MOV 3AH,#00H ;溢出清零
LJMP FUYONGRET
CLR33H:
MOV 33H,#00H ;下次执行初始化
FUYONGRET:
RET
;------------------------------------------------
;-----------数据发送程序-------------------------
SENDDATA:
CLR 02H ;清标志位
ACALL ONSEND ;调用ONSEND函数
ACALL OFFSEND ;调用OFFSEND函数
RET ;SENDDATA函数返回
ONSEND:
JB P2.2,SENDRET ;P2.2:发送按键控制口:低电平有效
ACALL DELAY ;消抖
JB P2.2,SENDRET
SETB 02H ;按键有效置标志位
MOV R3,35H
CJNE R3,#00H,SENDRET
ANL 34H,#0FH ;屏蔽高半字节
MOV A,34H ;对应发送的高位
SWAP A ;高低字节交换
ANL 32H,#0FH ;对应发送的低位
ADD A,32H ;对应高低位数码管的内容
MOV SBUF,A
WAIT:
JNB TI ,WAIT ;发送等待
CLR TI
SENDRET:
RET
OFFSEND:
JNB 02H,CLR35H
MOV 35H,#0FFH ;初始化处理
LJMP OFFRET
CLR35H:
MOV 35H,#00H
OFFRET:
RET
;--------------------------------
;----------显示程序--------------
DISPLAY:
ACALL JIESHOU ;调用接收数据处理程序
LCALL FASONG ;调用发送数据处理程序
LCALL YIWEI ;调用位选程序
LCALL SHOW ;调用显示程序
RET
;-----------
JIESHOU:
MOV A,72H
CJNE A,71H,JIEHUAN ;判断是否中断执行
LJMP JIERET
JIEHUAN:
MOV A,72H
MOV 71H,A ;标志还原处理
MOV A,36H ;前一状态高位右移:36H---38H
MOV 38H,A
MOV A,37H ;前一状态低位右移:37H---39H
MOV 39H,A
MOV A,30H
ANL A,#0F0H ;接收数据处理:屏蔽低半字节
SWAP A
MOV 36H,A ;高位赋36H
MOV A,30H
ANL A,#0FH ;接收数据处理:屏蔽高半字节
MOV 37H,A ;低位赋37H
JIERET:
RET
FASONG:
ANL 3AH,#0FH ;屏蔽发送当前状态高半字节
ANL 3BH,#0FH ;屏蔽发送当前状态低半字节
JNB 02H,SSRET
MOV R3,3AH ;前一状态发送的数据高位保存显示:3AH--3CH
MOV 3CH,R3
MOV R3,3BH ;前一状态发送的数据低位保存显示:3BH--3DH
MOV 3DH,R3
SSRET:
RET
;------数码管动态扫描位控制口控制程序---
YIWEI:
MOV A,3EH
RR A
MOV 3EH,A
MOV P1,A ;显示起点:P1.7----控制当前状态接收值的高位
RET
SHOW:
MOV A,@R0 ;初始值为36H的内容
MOVC A,@A+DPTR ;偏移量转移
MOV P0,A
LCALL DELAY1 ;延时2MS:12MHZ
INC R0 ;位控制口移位
CJNE R0,#3EH,SHOWRET ;动态扫描范围:36H--3DH:循环扫描
MOV R0,#36H ;初始化设置
SHOWRET:
RET
;---------------------------------------------------
;-------------------延时程序------------------------
DELAY:
MOV R6,#50H ;延时40毫秒
LOOP1: MOV R7,#0FAH
LOOP2: DJNZ R7,LOOP2
DJNZ R6,LOOP1
RET
;-------------------延时程序------------------------
DELAY1:
MOV R6,#04H ;延时2毫秒
LOOP11:MOV R7,#0FAH
LOOP21:DJNZ R7,LOOP21
DJNZ R6,LOOP11
RET
;-----------------数码管段代码表---------------------
TAB: DB 0FCH,60H,0DAH,0F2H,66H
DB 0B6H,0BEH,0E0H,0FEH,0F6H
DB 0EEH,3EH,9CH,7AH,9EH,8EH,00H
END
本文档为【采用AT89S52单片机与MAX232芯片配合串口精灵软件,实现了单片机与计算机之间的双向通信简单的功能】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。