单片机与pc机通信实验(中断方式)

上传人:wm****3 文档编号:47272052 上传时间:2018-07-01 格式:PDF 页数:5 大小:166.30KB
返回 下载 相关 举报
单片机与pc机通信实验(中断方式)_第1页
第1页 / 共5页
单片机与pc机通信实验(中断方式)_第2页
第2页 / 共5页
单片机与pc机通信实验(中断方式)_第3页
第3页 / 共5页
单片机与pc机通信实验(中断方式)_第4页
第4页 / 共5页
单片机与pc机通信实验(中断方式)_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《单片机与pc机通信实验(中断方式)》由会员分享,可在线阅读,更多相关《单片机与pc机通信实验(中断方式)(5页珍藏版)》请在金锄头文库上搜索。

1、单片机与 PC 机通信-中断方式 一、实验目的 1、理解 MCS-51 单片机串行口的原理 2、掌握 MCS-51 单片机与 PC 机通信的硬件连接 3、掌握 MCS-51 单片机与 PC 机通信的编程实现 4、熟悉 Keil 开发工具的使用 二、实验原理 1、在现代单片机测控系统中,单片机的通信功能显得愈来愈重要。单片机通信是指单片机与计算机或单片机与单片机之间的信息交换。 MCS-51 单片机具有一个可编程全双工的串行异步通信接口,由两个引脚 P3.0(RXD)和P3.1(TXD)和外部终端设备进行通信。它由两个独立的发送和接收缓冲器 SBUF,发送控制器、 接收控制器和波特率发生器等组成

2、。 从用户使用的角度, 它由三个特殊功能寄存器组成:串行口数据寄存器 SBUF、串行口控制寄存器 SCON 和电源控制寄存器 PCON。发送和接收缓冲器共用一个特殊功能寄存器,称作串行口数据寄存器 SBUF,字节地址是 99H。当 CPU向 SBUF 写数据时对应的是发送缓冲器,当 CPU 读 SBUF 时对应的接收数据寄存器。串行口控制寄存器 SCON 的功能是选择串行口工作方式,控制数据的接收、发送和标示串行口的工作状态。电源控制寄存器 PCON 的功能是控制串行口的波特率。 2、串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器 1、串行口控制和中断控制。具体步骤如下: 1)

3、 确定串行口控制(编程 SCON 寄存器) ; 2) 确定 T1 的工作方式(编程 TMOD 寄存器) ; 3) 计算 T1 的初值,装载 TH1、TL1; 4) 启动 T1(编程 TCON 中的 TR1 位) ; 5) 串行口在中断方式工作时,要进行中断设置(编程 IE、IP 寄存器) 。 初始化后,设置串口工作。 1) 发送:直接写 SBUF,查询 TI/中断; 2) 接收:REN 置 1,查询 RI/中断。 3、串行通信中,只有通信双方采用相同的接口标准,才能进行正常的通信。MCS-51单片机的串口严格遵循 TTL 标准,其中高电平为 5V,低电平为 0V。但是计算机的串口遵循的是 RS

4、-232 标准,为负逻辑电平,高电平为-3V-15V,低电平为 3V15V。因此当计算机与单片机之前通信时,必须加电平转换芯片,否则,如果它们直接连到一起不但不能实现通信,还可能将一些硬件烧毁。目前常用的集成电路转换芯片有 MAX232,MAX202,HIN232 等。 MAX232 芯片是 MAXIM 公司生产的、包含两路接收器和驱动器的 IC 芯片,它的内部有一个电源电压变换器, 可以把输入的+5V 电源电压变换成为 RS-232 输出电平所需的+10V电压。芯片采用+5V 电源供电,适应性强,价格适中,硬件接口简单,所以得到广泛应用。实验板串行口部分原理图如图 2 所示。 图 2 实验板

5、串行口部分原理图 如图 2 所示:单片机的 P3.1 引脚,即 TXD 端与 MAX232 的 10 脚 T2IN 相连,向 PC机发送数据,经过 MAX232 将 TTL 电平转换为 RS-232 电平后从 MAX232 的 7 脚 T2OUT发出,再连接到实验板上串口座的第 2 脚,再经过平行串口线后,连接至 PC 机的串口座的第 2 脚 RXD 端,至此计算机接收到数据。PC 机发送数据时,数据从 PC 机串口座的第 3 脚TXD 端发出,经过平行串口线送到实验板串口座的第 3 脚与 MAX232 的 8 脚 R2IN 相连,再经过 MAX232 转换为 TTL 电平后从 MAX232

6、的 9 脚 R2OUT 输出到单片机的 P3.0,即RXD 端接收数据。 4、编程实现在 PC 机用串口调试助手发送一个字符 X,单片机收到字符后返回给 PC 机“Yes,It is X”,串口波特率设为 9600bps,单片机的外部晶振为 11.0592Mhz。 程序如下: #include /包含定义特殊功能寄存器的头文件 #include /包含字符串操作的头文件 #define INT8U unsigned char /对 unsigned char 做宏定义 INT8U rev,flag; /定义全局变量,接收数据变量和标志位 void main() INT8U i; INT8U t

7、ab = “Yes,It is “; /定义字符数组“Yes,It is “ /串行口初始化,设置串行口工作在方式 1,允许接收数据 /波特率为 9600bps,打开串行口中断 TMOD = 0x20; TH1 = 0xfd; TL1 = 0xfd; TR1 = 1; SM0 = 0; SM1 = 1; 123456789J7DB9C1+1V+2C1-3C2+4C2-5V-6T2OUT7R2IN8R2OUT9T2IN10T1IN11R1OUT12R1IN13T1OUT14GND15VCC16U2MAX232C4105C5105C6105C7105C8104VCCP3.1 P3.0REN = 1

8、; EA = 1; ES = 1; while(1) if(flag) /如果标志位置 1,说明已接收到数据,准备发送数据 flag = 0; /标志位清零,以便下次接收 for(i=0;istrlen(tab);i+) /发送“Yes,It is “ SBUF = tabi; while(!TI); TI = 0; SBUF = rev; /发送接收到的数据 while(!TI); TI = 0; ES = 1; /开串行口中断 void Ser()interrupt 4 /串行口中断服务子函数 if(RI) /如果是接收中断,则处理 ES = 0; /关串行口中断 RI = 0; /接收中

9、断标志位清零 rev = SBUF; /转存接收数据 flag = 1; /对接收标志位置位 程序分析如下: main()函数开始部分设置了串行口工作在方式 1 接收数据, 并且通过定义定时器 T1, 设置了串行口的波特率为 9600bps。随后,打开串口中断,使单片机接收到数据后立刻响应发送数据。 “void Ser()interrupt 4”为串口中断服务程序。在本实验中,因为单片机接收的数据是由PC 机发送的,所以接收数据是不可预知的,即单片机不知道 PC 机何时发送数据,也不知道发送的是什么数据,所以单片机接收数据可以采用中断方式;而单片机接收到数据后,立即给 PC 机发送字符串,发送

10、字符串的过程是可以预知的,所以发送字符串的过程可以采用查询方式。 但如果打开串口中断, 无论是串口接收到一帧数据还是发送一帧数据均可引起串口中断,所以进入中断服务程序后先判断是不是由接收数据引起的,即判断 RI 是否置位,如果是接收数据引起则处理,否则不处理。在收到数据后应首先关闭串行口中断,原因还是刚才讲过的,因为接下来要发送数据,如果不关闭串行口中断,那么每发送完一帧数据后同样会引起串行口中断,又会进入中断服务程序。再接下来要使 RI 软件清零,这样才能产生下一次中断;将 SBUF 中的数据读走给 rev;将标志位 flag 置 1,以便在主程序中查询判断是否已经接收到数据。 主程序在进入

11、大循环 while(1)后,一直在检测标志位 flag 是否为 1,当检测到为 1 时,说明程序已经执行过串口中断服务程序,即收到数据,可以进行发送数据了。在发送数据之前,先将 flag 清零,这是为了标志下次接收数据。在发送数据时,发送前面固定字符,使用了一个 for 循环语句,将前面字符依次发送出去,后面再接着发送从中断服务程序中读回来的 rev 数据。发送每个字符的时候,当向 SBUF 中写入一个数据后就会开始发送,使用查询方式“while(!TI);”等待是否发送完毕,因为当发送完毕后 TI 会由硬件置 1,接下来再手动将 TI 清零。随后,打开串口中断,等待下次单片机再接收到数据。

12、三、实验仪器材料 PC 机、单片机实验板、USB 电源线、串口下载线 四、实验步骤 1、理解单片机串行口的原理,单片机串行口和 PC 机通信的硬件连接。 2、分析题目要求,考虑串行口初始化应如何设置,接收和发送的逻辑关系。 3、在 PC 机上使用 Keil 开发工具编写源程序,采用“Serial Channel”窗口和“UART #1”窗口联合查看仿真结果。 4、调试无误后,下载程序到单片机,用串口线将单片机和 PC 机串口连接,通过“串口调试助手”向单片机发送数据,查看接收是否正确,如不正确继续调试程序。 五、实验报告要求 1、对单片机和 PC 机通信的程序进行分析。 2、对编程和调试过程中

13、遇到的问题,进行分析,并写出最后解决的方法。 3、写出设定方式 1 波特率的方法和公式。 六、实验注意事项 1、在使用 Keil 集成开发工具时,一定要建立工程项目,然后在项目下建立 C 源文件。这样才能编程程序,生成 hex 文件。 2、仿真时要将仿真的外部晶振改为 11.0592MHz,才能看到真实的结果。 3、在发送和接收一帧数据后,不管是采用查询方式还是中断方式,都要手动将 TI 和RI 清零。 4、开始发送数据时要将串行口中断关闭,在发送数据结束后在将串行口中断打开。因为串行口不管是接收还是发送一帧数据都可引起中断, 如果没有关闭串行口中断的话, 那么每发送一个字符就会引起中断。 七、思考题 1、中断服务程序中“if(RI)”的作用是什么?为什么要判断 RI? 2、程序中为什么不用打开定时器 T1 的中断? 3、考虑将题目改成当接收字符串 S,然后再发送“Yes,It is (S)”,程序应该如何修改?

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号