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

📄 serial_a.asm

📁 电子开发网培训用的51单片机内部培训代码
💻 ASM
字号:
;//*********************************************************************
;//实现功能:用查询法实现单片机接收到电脑发送过来的数据之后把收到的数据
;//	     发回给电脑
;//目标板  :至强51开发板
;//开发商  :电子开发网www.dzkf.com (专业提供开发方案,
;//          电子元器件网上订购,单片机培训服务)
;//对开发板有什么疑问,请上我们的论坛bbs.dzkf.com探讨
;//*********************************************************************
	org 00h
	    ajmp main

;//******************************主函数*********************************
;//描    述:单片机接收到电脑发送过来的数据之后把收到的数据发回给电脑
;//入口参数:无
;//返回参数:无
;//设    计:ycj
;//最后修改:时间(2006.5.2)  修改人(ycj)
;//*********************************************************************
	org 030h
main:
	mov sp,#50h
	;串行口选择方式1,接受允许,波特率不加倍
	mov R7,#050h
	mov R6,#000h
	call serial_init
	;选择定时器T1,方式2
	mov R7,#001h
	mov R6,#002h
	call timer_init
	;设定波特率为9600b,Fosc=11.0592MHz ,TH1=0xfd,TL1=0xfd
	mov TH1,#0fdh
	mov TL1,#0fdh
	setb TR1;启动T1
	clr RI;清除接收完成位
	;发送"O"
	mov R7,#'o'
	call serial_send
	;发送"k"
	mov R7,#'k'
	call serial_send
main_0: 
	call serial_receive;调用串行接收子程序,
	mov a,R7;R7是串行接收子程序的返回值
	;发送数据
	mov R7,a
	call serial_send
	ajmp main_0;循环


;//************************串口初始化函数***************************
;//描    述:初始化串行口
;//入口参数:R7 : SCON的设定值
;//         R6 : SMOD的设定值((0x00表示SMOD为0)或(0x80表示SMOD为1))
;//返回参数:无
;//设    计:ycj
;//最后修改:时间(2006.5.2)  修改人(ycj)
;//*****************************************************************
serial_init:
	push acc;
	push psw
	mov SCON,R7
	mov a,PCON
	anl a,#7fh
	orl a,R6
	mov PCON,a
	pop psw
	pop acc
	ret
;//************************串口接收函数***************************
;//描    述:用查询法接收串行口数据
;//入口参数:无
;//返回参数:R7 : 接收到的8位数据
;//设    计:ycj
;//最后修改:时间(2006.5.2)  修改人(ycj)
;//***************************************************************
serial_receive:
	push psw
	jnb RI,$;等待串行口接收完毕
	mov R7,SBUF;保存接收值
	clr RI;清除接收完成位
	pop psw
	ret;返回

;//************************串口发送函数***************************
;//描    述:用查询法发送串行口数据
;//入口参数:R7 : 要发送的8位数据
;//返回参数:无
;//设    计:ycj
;//最后修改:时间(2006.5.2)  修改人(ycj)
;//***************************************************************
serial_send:
	push psw
	jb TI,$;查询发送是否就绪
	mov SBUF,R7;发送就绪,把要发送的数据发送出去
	jnb TI,$;查询发送是否完毕
	clr TI;发送完毕,清除发送完成标志
	pop psw
	ret;返回
;//************************定时器初始化函数*******************************
;//描    述:对定时/计数器初始化
;//入口参数:R7 : 定时/计数器的编号(0或者1)
;//         R6 : 定时/计数器的状态(GATE,C/T,M1,M0对应这R6.3,R6.2,R6.1,R6.0)
;//返回参数:无
;//设    计:ycj
;//最后修改:时间(2006.5.2)  修改人(ycj)
;//************************************************************************	
timer_init:
	push acc;
	push psw
	cjne R7,#0,timer1;判断是否是T0
	;是T0
	mov a,#0f0h;清T0的TMOD状态
	anl a,TMOD;
	orl  a,R6;把需要设定的状态写进TMOD
	mov TMOD,a
	pop psw;
	pop acc
	ret
timer1:
	cjne R7,#1,timer_init_err;判断是否是T0
	;是
	mov a,#00fh;清T1的TMOD状态
	;把需要设定的状态写进TMOD
	anl a,TMOD
	xch  a,R6
	swap a
	orl a,R6
	mov TMOD,a
timer_init_err:
	pop psw;
	pop acc
	ret
 end

⌨️ 快捷键说明

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