微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机学习之十九:串行通讯程序-单片机接收

单片机学习之十九:串行通讯程序-单片机接收

时间:11-18 来源:互联网 点击:
一、实验现象:

当电脑向单片机发送一个数据后,P0口发生灯光变换。

二、实验任务分析:

这个试验我们仍然采用方式1来完成。在上一个试验的通讯理论介绍中,我们知道,当单片机接受到一帧信号后,会置位串行口接受中断标志RI,从而向单片机申请中断。如果单片机开放中断,就会进入中断服务程序,我们就把灯光变化的任务放到中断程序中来完成即可。

当然,这个试验功能的实现不只是这么一种方法。我们还可以采用在主程序中查询RI的方式来实现。这个试验我们就分别用这两种方式来现它。同样,在这个试验中,我们也利用串口调试助手来完成向单片机发送数据的过程。具体设置方法可见下图:

三、实验程序

1、 中断方式实现

org 0000h

ajmp main

org 0023h ;串行口中断入口地址

ajmp serial ;跳转至中断服务程序

main: clr p1.5

mov p0,#55h ;让8个led从右到左依次为亮、灭(注意跳线jmp0置于12)

mov scon,#50h ;单片机工作于方式1,可以接受数据

mov tmod,#20h ;T1设置为工作方式2

mov tl1,#0f3h ;按照波特率为2400计算初值

mov th1,#0f3h ;把计数初值送入常数缓冲器

mov pcon,#80h ;smod=1,波特率变成4800

setb tr1 ;启动定时器T1开始定时

setb ea ;cpu开放中断

setb es ;开放串行口中断

ajmp $ ;等待中断

serial: clr ea ;cpu关闭中断

clr ri ;清除串口接受中断标志

mov a,p0

cpl a

mov p0,a ;p0口灯光变化

setb ea ;cpu开放中断

reti ;返回主程序,等待下一次响应中断

end

2、 查询方式实现:

org 0000h

ajmp main

main: clr p1.5

mov p0,#55h ;让8个led从右到左依次为亮、灭(注意跳线jmp0置于12)

mov scon,#50h ;单片机工作于方式1,可以接受数据

mov tmod,#20h ;T1设置为工作方式2

mov tl1,#0f3h ;按照波特率为2400计算初值

mov th1,#0f3h ;把计数初值送入常数缓冲器

mov pcon,#80h ;smod=1,波特率变成4800

setb tr1 ;启动定时器T1开始定时

wait: jnb ri,wait ;如果停止位是0,表示信息没有发送完毕,等待

clr ri ;清除停止位

mov a,p0

cpl a

mov p0,a ;p0口灯光变化

ajmp wait

end

把上面的程序下载到测试板上,然后在串口调试助手中随便写入一个数据,每一次按下串口调试程序中的手动发送按键,就会发现led的灯光发生变化。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top