




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 / 26 单片机串口通信实验总结 实验十 单片机串行口与 PC机通讯实验报告 实验目的 1. 掌握串行口工作方式的程序设计,掌握单片机通讯的编制; 2. 了解实现串行通讯的硬环境,数据格式的协议,数据交换的协议; 3. 了解 PC机通讯的基本要求。 实验器材 1. G6W 仿真器 2. MCS 51实验板 3. PC机 一台 一台 一台 实验内容及要求 利用 8051单片机串行口,实现与 PC机通讯。 2 / 26 本实验实现以下功能,将从实验板键盘上键入的字符或数字显示到 PC机显示器上,再将 PC机所接收的字符发送回单片机,并在实验板的 LED上显示出来。 实验步骤 1. 编写单片机发送和接收程序,并进行汇编调试。 2. 运行 PC机通讯软件 “” ,将单片机和 PC机的波特率均设定 为 1200。 3. 运行单片机发送程序,按下不同按键, 检查 PC 机所接收的字符是否与发送的字符相同。 4. 将 PC机所接收的字符发送给单片机,与此同时运行单片机接受程序,检 查实验板 LED 数码管所显示的字符是否与 PC 机发送的字符相同。 实验框图 3 / 26 源程序代码: ORG 0000H AJMP START ORG 0023H AJMP SERVE ORG 0050H START: MOV 41H,#0H ;对几个存放地址进行初始化 MOV 42H,#0H MOV 43H,#0H MOV 44H,#0H MOV SCON,#00H ;初始化串行口控制寄存器,设置其为方式 0 LCALL DISPLAY ;初始化显示 MOV TMOD,#20H ;设置 为定时器 0,模式选用 2 MOV TL1, #0E6H ;设置 1200 的波特率 MOV TH1, #0E6H SETB TR1 ;开定时器 MOV SCON,#50H ;选用方式 1,允许接收控制 SETB ES SETB EA ;开中断 4 / 26 LOOP: ACALL SOUT ;键盘扫描并发送,等待中断 SJMP LOOP SERVE JNB RI,SEND ;判断是发送中断还是接收中断,若为发送中 断则调用 ACALL SIN ;发送子程序,否则调用接收子程序 RETI SEND: CLR TI ;发送子程序 RETI SIN: CLR RI ;接受子程序 MOV SCON, #00H MOV A, SBUF ;接收数据 5 / 26 LCALL XS ;调用显示子程序 RETI 子程序: SOUT: CLR TI ;清发送中断标志位 LCALL KEY ;调用判断按键是否按下子程序 MOV A,R0 ;将按键对应的数字存入 A MOV SBUF,A ;输出按键数字给锁存 RET KEY: MOV P1,#0FFH ;将 P1设置为输入口 MOV A, P1 CPL A ;将 A 内值取反 ANL A, #0FFH JZ KEY ;将 A 与 FFH与后判断是否 为 0,若为 0则表示无 6 / 26 按键按下跳回 KEY LCALL D ;调用延时子程序消抖 MOV A, P1 CPL A ANL A, #0FFH JZ KEY MOV B,A ;判断有按键按下,将值赋给 B KEY1: MOV A, P1 CPL A ANL A,#0FFH JNZ KEY1 LCALL D MOV A,B JB ,PKEY1 ;依次判断 A 内数据每个位是否为 1,并跳 JB ,PKEY2 ;转到相对应位的子程序 JB ,PKEY3 JB ,PKEY4 JB ,PKEY5 JB ,PKEY6 JB ,PKEY7 JB ,PKEY8 EKEY: RET PKEY1: AJMP K1 PKEY2: AJMP K2 PKEY3: AJMP K3 PKEY4: AJMP K4 PKEY5: AJMP K5 PKEY6: AJMP K6 PKEY7: AJMP K7 PKEY8: AJMP K8 K1: MOV R0,#01H ;将相应的数据赋给 R0 后跳转到 EKEY SJMP EKEY K2: MOV R0,#02H SJMP EKEY K3: MOV R0,#03H SJMP EKEY K4: MOV R0,#04H SJMP EKEY K5: MOV R0,#05H SJMP EKEY K6: MOV R0,#06H SJMP EKEY K7: MOV R0, #07H SJMP EKEY K8: MOV R0, #08H SJMP EKEY 7 / 26 XS:MOV SCON,#00H ;显示子程序,采用同步移位寄存器 CLR TI MOV DPTR, #TAB MOVC A,A+DPTR ;将相应数值的数码管显示数值送入 SBUF MOV R5,#04H ;共四位需要显示 MOV 41H, A MOV R0, #41H DISPLAY1: MOV A,R0 MOV SBUF, A JNB TI,$ ;是否传完了 CLR TI ;清除中断标志位 INC R0 DJNZ R5, DISPLAY1 MOV SCON, #50H RET D: ;延时子程序 MOV R7, #10H DELAY1: MOV R6, #0FFH DELAY2: DJNZ R6, DELAY2 DJNZ R7, DELAY1 RET 8 / 26 TAB: DB 0BBH, 09H, 0EAH, 6BH DB 59H, 73H, 0F3H, 0BH DB 0FBH 本次实验中解决了如何判断数据是发送还是接收的问题和如何判断数据是否发送或接受完毕的问题,通过实验中的讨论和研究书上关于串行口的内容,我们通过中断标志位和循环很好的解决了这个问题。这个实验让我认识到单片机中中断的巨大作用,它不仅可以省去很多繁琐的设计步骤,还可以帮助我们解决许多设计上的问题。 另外,我觉得这是一次较为综合性的实验,按键,消抖,数码管显示,定时,串行口中断,串行口数据的收发这些内容都 在本次实验中体现出来了,也算是让我们进行了一个小复习,让我们站在一个更高的平台上去编写程序。 主要操作上的问题有两个: 问题: PC机可以根据按键的按下显示相应的符号,但是不是预期的数字 原因: PC 机没有设置十六进制显示和十六进制接收 51单片机串口总结 9 / 26 有句话说 “ 尽信书不如无书 ” ,要学好单片机就要不断的、大胆的实验,要多怀疑,即使我们的怀疑最终被证明是错误的那么这也是进步,当怀疑出现时就要去实践。有很多东西如果不通过实践是不可能掌握其中隐藏的奥秘,就拿 51 单片机串口通讯这一块,我认为掌握很好了,可以很轻松的实现数据的接收 、发送,但这段时间当我重新学习串口时,我才发现里面还有很多小细节从没注意,更别说研究了。对于接收发送程序永远是按照别人的模式来编写程序, 并没有真真正正的挖掘深层次的内容。我身边太多的人在临摹别人的程序,当然我不反对,但是希望自己多问几个问什么,单纯的会编程是学不好单片机的,毕竟单片机有自己独特的硬件结构。 开讲之前先简要说一下同步、异步通信: 同步通信:发送方时钟对接收方时钟控制,使双方达到完全同步。 异步通信:发送与接受设备使用各自的时钟控制数据的发送和接受过程。 51单片机串行口结构 10 / 26 从上图中我们看到, 51单片机有两个物理上独立的接收、发送缓冲器 SBUF,它们共用同一个地址 99H,但是请注意:接收缓冲器只能读而不能写,发送缓冲器只写不读。单片机可以同时实现数据的发送与接收功能。 特别注意:接收器是双缓冲结构:当前一个字节从接收缓冲区取走之前,就已经开始接收第 二个字节,此时如果在第二个字节接收完毕而前一个字节还未被读走,那么就会丢失前一个字节。 51单片机串口控制寄存器 关于 51 单片机的控制寄存器各个位表示的含义在这里我只谈 SM2。 SM2 为多机控制位,主要用于工作方式 2 和 3,当接收机的SM2=1时,可以利用接收到的 RB8 来控制是否激活 RI(RB8=0不激活 RI,收到的数据丢失; RB8=1 时收到的数据进入 SBUF,并激活 RI ,进而在中断服务程序中将数据从 SBUF中读走 )。当 SM2=0 时,不论收到的 RB8为何值都将使接收到的数据进11 / 26 入 SBUF,并激活 RI,通过控制 SM2实现多机通信。 51单片机串口通讯方式 51串口通讯方式有 3 种,方式 0、方式 1、方式 2 与方式 3,他们的工作模式不尽相同。 首先他们的波特率很容易忽视。方式 0与方式 2的波特率固定,而方式 1 和 3的波特率由 T1的溢出率决定。 方式 0的波特率 =f/12 系统晶振的 12分频,换句话说 12M晶振的情况下,其波特率可达 1M,速度是很高的。 方式 2 =f/64 或 f/32。 曾经我用方式 2 进行 MODBUS 通信时,总是通讯失败,我仔细检查程序,没有发现逻辑错误,特别是当我参考别人的程序时,发现很少有人用方式 2 进行 MODBUS 通讯,所以当时自己妄下结论 51 单片机的串行方式 2 不可用,直到有一天夜里我突然想起方式 2 的波特率是固定的,试想晶振 /32 或/64怎么也不可能是 9600啊,怎么可能通信成功。这才恍然大悟,看来还是自己 太武断了,没有认真看书啊。有时我们认为我们犯这样的错误很低级,其实我们很多次都是因为这12 / 26 样的小细节导致我们整个系统不正常,正所谓 “ 千里之堤毁于蚁穴 ” ,这些细节真的伤不起啊。 方式 1、 3 波特率 =(2smod/32)*T1 的溢出率,其中 TI 的溢出率 =f/12*256-(TH1). 关于 3种通讯方式其中有几点特别容易出错: 1、无论采用哪种通讯方式,数据发送和接受都是低位在先,高位在后。 2 、 3 种方式作为输出,由于输出是 CPU 主动发送,不会产生重叠错误,当数据写入 SBUF 后,发送便启动,当该字节发送结束, 置 TI。不要理解为当数据一写入 SBUF就置位 TI,如果中断允许则在中断中发送数据,这就大错特错了。 3 同样作为输入,可能会产生重叠错误,当一个字节的数据接收完毕置位 RI,表示缓冲区有数据提示 CPU读取。 接下来通过一些实验具体说明串口通信中需要注意的地方 13 / 26 1 方式 0 输出 方式 0 主要功能是作为移位寄存器,将数据从 SBUF 中逐位移出,最常见的用法就是外接串入并出的移位寄存器,如74LS164。之前在做这一部分实验时总是利用单片机 I/O 端口模拟实现,现在想想在串口未被占用的情况下,方式 0 是最好的实现方式。 利用串口方式 0,向 74LS164输出字符 “0” 的编码,程序如下: 该程序采用了中断方式实现,结果是通过 74LS164 使数码管显示 “0” 。 实验结果如下: 这里我说明几点: 1 如果采用查询方式,并且只发送一遍,那么程序最后的while(1);不可以省略,否则会出现数码管闪烁的现象 14 / 26 这是查询方式下不加 while(1);的现实效 果 2 如果采用中断方式发送,请记得中断中清除 TI,仅仅是为了解除中断标志,而不是等待发送结 束,因为此时数据早已离开了 SBUF 跑到外边去了。 3 74LS164最高 25MHZ,采用方式 0,没有问题。 方式 0作为输入模式 以 74ls165为例 ,可以满足要求。 对应结果如下: 。 本程序只接收一次,也许有人会问,中断程序中 REN=0,表示什么意思?可不可以改成 ES=0? 15 / 26 实验六 串行通信 实验报告 班级: 学号: 姓名: 教师: 一、双机通信 由两套单片机试验装置共同完成该实验。我们 U1 为甲机,U2为乙机。甲机发送本机学号后 8 位给乙机,乙机接收该 8位数据,并显示在 8 位数码管上。 电路如图 1所示。 要求串行通信方式为方式 1,波特率为 2400bit/s,不加倍,单片机外部晶振频率为。 实验电路图: 1、 C源程序清单 甲机代码: 16 / 26 #include #define uchar unsigned char void delay(uchar i); void send(uchar temp); void init(void); void main(void) send(1); /*(来自 : 海 达范文网 :单片机串口通信实验总结 )*初始化 */ void init(void) SCON=0x40; /串口模式 1 只发送不接收 TMOD=0x20; /T1 工作模式 2 TH1=0xf4; /波特率 2400 TL1=0xf4; PCON=0x00; /不加倍 SMOD=0 TI=0; TR1=1; /开定时中断 /*发送函数 */ void send(uchar temp) 17 / 26 SBUF=temp; while(TI=0); TI=0; delay(50); /*延时函数 */ void delay(uchar i) unsigned int j; for(i;i0;i-) for(j=0;j 乙机代码: #include #define uchar unsigned char #define uint unsigned int void init(void); void delay(uchar t); void xianshi(void); uchar code distable = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /共阴数码管段码 uchar code wi = 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80; uchar 18 / 26 tab9 = 0,0,0,0,0,0,0,0,0; uchar i=0,temp; uint a,b,c,d,e,f,g,h; void main() init(); while(1) xianshi(); /初始化 / void init(void) PCON = 0x00; /不加倍 SMOD=0 SCON = 0x50; /设置串口方式 1 且允许串口接收 REN=1 TMOD = 0x20; /设置 T1 为方式 2 TH1 = 0xf4; TL1 = 0xf4; /设置波特率 2400 TR1 = 1; /开启定时器 1 ES = 1; /允许串行口中断 EA 19 / 26 = 1; /允许全局中断 0; tabi=temp; i+; if(i =9) i=0; a=tab1; b=tab2; c=tab3; d=tab4; e=tab5; f=tab6; g=tab7; h=tab8; / 数 码 管 显 示 / void xianshi(void) uchar i,dm,wx; /m1:m0 00=标准; 01=推挽; 10=输入; 11=开漏输出 P1M1 = 0X00; P1M0 = 0Xff; P2M1 = 0X00; 20 / 26 P2M0 = 0Xff; /设定 P1,P2推挽输出 while(1) for(i=1;i /rami=tabi; dm=distabletabi; /取显示段码 wx=wii-1; /取位选码 单片机与 PC机串口通讯 学生: 何绍金 学号:专业班级:自动化1202 指导老师: 杨东勇 2016年 12月 一、 实验目的 学习 PC机的串口通讯原理。 21 / 26 二、实验设备 统 一电子开发平台。 三、实验要求 单片机与电脑串口通讯,将单片机与电脑相连,借助串口调试助手,单片机发送 “which led is light?” ,串口调试助手中输入 1-8个数字中一个,相应的 led点亮,单片机再发送 “which led is light?” 消息提示输入下一个需要点亮的 灯。通讯波特率: 9600bps,信息格式:无校验位 8个数据位 1 个停止位,传送方式,单片机采用中断方式接收信息。 四、实验原理 鉴于 8051单片机输入、输出电平均为 TTL/CMOS电平,而计算机配置的是 RS232 标准串行接口,使用的是 RS232 标准电平,二者的电气规范不一致,因此要完成 PC 机与单片机的数据通讯,必须进行电平转换。这里,我们介绍 Sipex公司的 SP3232电平转换专用芯片 7。 22 / 26 1 SP3232的工作原理 SP3232 的引脚如图 1 所示。 图 1 SP3232 引脚图 SP3232 管脚定义如表 1所示: SP3232 的内部包括 3 个部分 :充电泵电压变换器,发送 (传输器 ),以及接收装 如图 2” 。 2 实验原理图 实验原理图如图 3 所示。 图 3 单片机与 PC机串口通讯实验 硬件原理图 图 4-2 六、实验思考题 如果 PC机连续发送数字字符,如何避免错漏接收字符? 23 / 26 答:利用中断判断是否接受完一个数字字符,接受完后再接收下一个数字字符。 附:实验源代码 ;*ASM 汇编实验* ; 工程: ; 晶振 : ;* /#include REG_ /* 如果用到 MPC82G516的特殊寄存器请包含这个头文件 */ ORG 0000H AJMP MAIN ORG 0023H AJMP INT_COM1 MAIN: MOV SCON,#50H ; 24 / 26 MO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 蜂产品加工工综合考核试卷及答案
- 人工合成晶体工成本控制考核试卷及答案
- 按摩咨询接待服务方案
- 韩束网店营销策划方案
- 建筑方案设计师考核
- 2025版司法局《刑事自诉案件反诉状》(空白模板)
- 玉米须茶营销方案策划
- 屋顶建筑垃圾转运方案设计
- 宿舍建筑方案设计图纸
- 城乡规划建筑方案设计
- 中心静脉导管维护的安全护理
- 2026高考物理一轮复习-第十章-第54课时-专题强化:测电阻的其他几种方法-专项训练【含答案】
- 多囊卵巢综合征的超声诊断
- 售后索赔流程管理办法
- 2025 高中地理核心素养之综合思维培养(气候与建筑)课件
- 幼儿园中国茶文化课件
- DB3205∕T 1105-2023 房屋安全鉴定服务规范
- 食堂燃气操作人员培训
- 2025年中国医院创新转化报告-中国医学创新联盟
- 2025年6月黑吉辽蒙高考地理真题完全解读
- 2023年宪法学习宪法知识竞赛试题及答案
评论
0/150
提交评论