📄 serial_a.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 + -