湖南理工学院单片机串口通信课程综合练习_第1页
湖南理工学院单片机串口通信课程综合练习_第2页
湖南理工学院单片机串口通信课程综合练习_第3页
湖南理工学院单片机串口通信课程综合练习_第4页
湖南理工学院单片机串口通信课程综合练习_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、湖南理工学院信息与通信工程学院电子信息教研室制作甲、乙双方晶振均采用11.0592MHz,电路如图所示:(1). 甲、乙双机串行通信,波特率9600,采用偶校验;(2). 甲机读入P1口的8个开关的状态,通过串行口发送到乙机;(3). 乙机接收数据且校验正确后,根据接收数据控制8个LED。课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作K0键按下全亮后全灭,交替闪烁;K1键按下8只LED由上向下流动点亮;K2键按下8只LED由下向上流动点亮;K3键按下8只LED全灭;其余为无效键。间隔时间为0.5秒,由T0方式1定时确定。课程练习课程练习湖南理工学院信息与通信工程学院电子信息教

2、研室制作硬件电路分析硬件电路分析发送方硬件电路键值分析按下键 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 键值 K0 1 1 1 1 1 1 1 0 FEH K1 1 1 1 1 1 1 0 1 FDH K2 1 1 1 1 1 0 1 1 FBH K3 1 1 1 1 0 1 1 1 F7H其它键值为无效键值程序中MOVA,P1 改为MOVA,P3SWAP AORLA,#0F0H课程练习课程练习P3.4P3.5P3.6P3.7开发装置的电路湖南理工学院信息与通信工程学院电子信息教研室制作硬件电路分析硬件电路分析接收方硬件电路程序中,在初始化中加SETB P

3、2.5;可以不要;可以不要注意:注意:实际P1.0对应的LED在下方。课程练习课程练习开发装置的电路P2.5P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7湖南理工学院信息与通信工程学院电子信息教研室制作编程准备编程准备:波特率为9600b/s, SMOD=0, 查表初值为FDH。发送方:发送方: 0 0 1 0 0 0 0 0 D7 D6 D5 D4 D3 D2 D1 D0PCON SMOD GF1 GF0 PD IDLT1作波特率发生器,定时模式,方式2;仅接收方T0定时,方式1 0 0 0 0 0 0 0 000H20H课程练习课程练习接收方:接收方: 0 0 1 0 0

4、 0 0 121H湖南理工学院信息与通信工程学院电子信息教研室制作串行口方式3发送方:发送方:1 1 0 0 0 0 0 0C0H课程练习课程练习中断设置:允许串行口、仅接收方允许定时器T0中断发送方:发送方: 1 0 0 1 0 0 0 090H接收方:接收方: 1 0 0 1 0 0 1 092HD0H接收方:接收方:1 1 0 1 0 0 0 0湖南理工学院信息与通信工程学院电子信息教研室制作课程练习课程练习计算计算T0定时定时50ms的初值的初值x194564608065536121105920010502x316=4C00H因此:TH0=4CH,TL0=00H 0.5S定时定时 采用

5、B计数 ,10次就是0.5S。湖南理工学院信息与通信工程学院电子信息教研室制作程序设计思想程序设计思想发送方发送方1.主程序主程序(1).设置相关SFR,9600波特率,串行口方式3,允许串行口中断;(2).读出P1口开关状态,不管何种键值都作为发送数据,确定第9位TB8,将发送数据放入SBUF;2中断服务程序中断服务程序(1). TI清0,(2). 作主程序(2)相同的事。可以看出,发送方每隔1.15ms读一次开关状态,并将开关状态通过串行口发出。课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作甲机发送程序甲机发送程序ORG 0000H LJMP MAIN ORG 0023H

6、;串行口中断地址 LJMP COM_INT课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作MAIN:MOV SP,#60H;设置堆栈指针MOV TMOD,#20H ;设置定时器工作方式 MOV TH1,#0FDH;设置计数器初值 MOV TL1,#0FDH MOV PCON,#00H;波特率不加倍 SETB TR1;启动T1计数器计数 MOV SCON,#0C0H ;设置串行口工作方式3MOV IE,#90H;开中断, 仅允许串行口中断MOVP1,#0FFH;要输入,先输出“1”MOVA,P1;读出P1口MOV C,P ; A中“1” 和P中“1” 一定是偶数偶数 MOV TB

7、8,C; 校验位送TB8,采用偶校验 MOV SBUF,A ; 发送一次HERE:SJMP HERE波特率设置课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作COM_INT:CLR TI;发送中断标志位TI清0 MOVA,P1MOV C,P ; A中1的个数为奇数,P=1 MOV TB8,C; 校验位送TB8,采用偶校验 MOV SBUF,A ;启动发送RETI;中断返回课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作C语言语言甲机发送程序甲机发送程序#include void main() TMOD=0 x20;/ 设置定时器T1为方式2 TH1=0 xfd;

8、/ 波特率9600 TL1=0 xfd; PCON=0 x00; / 波特率不加倍 TR1=1;/ 启动T1 SCON=0 xc0; / 方式3只发送,不接收 IE=0 x90;/ 开中断, 仅允许串行口中断 P1=0 xff;/ P1口为输入,要输入,先输出“1”波特率设置课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作 ACC=P1;/ 读出P1口 TB8=P;/ A中“1” 和P中“1” 一定是偶数偶数 SBUF=ACC;/ 数据送串行口发送 while(1); void comint_isr(void) interrupt 4 / 串行口串行口的中断服务函数 TI=0;

9、/发送中断标志位TI清0 ACC=P1; / 读出P1口 TB8=P; / A中“1” 和P中“1” 一定是偶数偶数 SBUF=ACC;/ 数据送串行口发送课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作程序设计思想程序设计思想接收方接收方1.主程序主程序(1). 初始化,a.SFG:T1波特率设置,T0定时500mS,串行口方式3,允许串行口和T0中断;b.控制值单元清0。(2). 根据控制值;控制LED,采用子程序。按下键 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 键值 功能 K0 1 1 1 1 1 1 1 0 FEH 全亮后全灭,交

10、替闪烁 K1 1 1 1 1 1 1 0 1 FDH 由上向下流动点亮 K2 1 1 1 1 1 0 1 1 FBH 由下向上流动点亮 K3 1 1 1 1 0 1 1 1 F7H 全灭课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作程序设计思想程序设计思想接收方接收方2.各子程序各子程序(1). 闪烁闪烁进入条件:控制值=FEH. 置初值FFH。. 变反,输出,等待0.5S标志TIME=1。. 清0TIME,控制值=FEH?是,转;否,返回。(2). 上上下(下下(下上)流动点亮上)流动点亮进入条件:控制值=FDH(FBH). 置初值FEH(7FH);. 输出,等待0.5S标

11、志TIME=1;. 清0TIME,左(右)移1位;. 控制值=FDH(FBH)?是,转,否,返回。课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作程序设计思想程序设计思想接收方接收方3.串行口中断服务程序串行口中断服务程序(1). RI清0;(2). 读出SBUF中的接收数据,并进行偶检验:RB8P,接收出错;(3). 若接收数据正确,且是有效键值,用接收数据更新控制值。4.T0中断服务程序中断服务程序(1). 重新置初值;(2). 计数值减1;(3). 计数值=0?0返回;=0,计数值=10,设置0.5秒到标志TIME。课程练习课程练习湖南理工学院信息与通信工程学院电子信息教

12、研室制作乙机接收程序乙机接收程序CTROLDATA 50H;控制值单元TIMEBIT7FH;0.5S到标志ORG 0000H LJMP MAIN;转主程序ORG 000BH ;T0中断地址 LJMP IT0P;转T0中断处理程序 ORG 0023H;串行口中断地址 LJMP COM_INT ;转串行口中断处理程序;主程序ORG 0030HMAIN:MOV SP,#60H;设置堆栈指针MOVCTROL,#00H ;控制值单元清0课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作MOV TMOD,#21H ;设置定时器工作方式MOV TL0,#00H ;给T0设初值 MOV TH0,

13、#4CHMOV TH1,#0FDH;设置计数器初值 MOV TL1,#0FDH MOV PCON,#00H;波特率不加倍 SETB TR1;启动T1计数器计数 MOV SCON,#0D0H ;设置串行口工作方式,开启接收MOV IE,#92H;开中断, 仅允许T0与串行口中断SETB TR0;启动T0定时MOVB,#10;定时计数器置10次CLRTIME; 0.5s定时时间到标志清0T0定时设置课程练习课程练习波特率设置湖南理工学院信息与通信工程学院电子信息教研室制作LOOP:MOV A,#0FEHCJNE A,CTROL,NEXT1LCALL DIS0;K0键按下显示子程序NEXT1:MOV

14、 A,#0FDHCJNE A,CTROL,NEXT2LCALL DIS1;K1键按下显示子程序NEXT2:MOV A,#0FBHCJNE A,CTROL,NEXT3LCALL DIS2;K2键按下显示子程序NEXT3:MOV A,#0F7HCJNE A,CTROL,LOOPMOV P1,#0FFHLJMP NEXT3课程练习课程练习K0键按下判断处理K1键按下判断处理K2键按下判断处理K3键按下判断处理湖南理工学院信息与通信工程学院电子信息教研室制作; K0键按下显示子程序,功能:全亮后全灭,交替闪烁DIS0:MOVA,#0FFHDIS0A:CPLA;变反MOVP1,A;输出DIS0B:JNB

15、TIME,DIS0B;等待0.5S到CLRTIME;清0.5S到标志MOVR6, CTROLCJNER6, #0FEH,DIS0C;控制值变化返回SJMPDIS0A;控制值没变继续DIS0C:RET课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作; K1键按下显示子程序,功能: 8只LED由上向下流动点亮DIS1:MOVA,#0FEH;点亮P1.0开始DIS1A:MOVP1,ADIS1B:JNBTIME,DIS1B ;等待0.5S到CLRTIME ;清0.5S到标志RLA;左移一位MOVR6,CTROLCJNER6,#0FDH,DIS1C;控制值变化返回SJMPDIS1A ;控

16、制值没变继续DIS1C:RET课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作; K2键按下显示子程序,功能: 8只LED由下向上流动点亮DIS2:MOVA,#7FH ;点亮P1.7开始DIS2A:MOVP1,ADIS2B:JNBTIME,DIS2B ;等待0.5S到CLRTIME ;清0.5S到标志RRA ;右移一位MOVR6,CTROLCJNER6,#0FBH,DIS2C ;控制值变化返回SJMPDIS2A ;控制值没变继续DIS2C:RET课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作; T0中断服务子程序IT0P :MOV TL0,#000H ;给T0

17、置初值 MOV TH0,#4CHDJNZB,IT0P1;10次到否?没到返回SETBTIME;到了,设置0.5S到标志MOVB,#10;重新置计数值10IT0P1:RETI课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作课程练习课程练习; 串行口中断服务子程序COM_INT:PUSH ACCPUSH PSWCLR RI; 接收中断标志位TI清0MOV A,SBUF ; 接收的数据送AJNB P,COM1; P=0,转L1JNB RB8,CEND ; P=1,RB80,出错SJMP KEY; P=1,RB81,正确COM1: JB RB8,CEND; P=0,RB81,出错KEY

18、:CJNEA,#0FEH,KEY1SJMPCOM2 ;键值=FEH,作控制值湖南理工学院信息与通信工程学院电子信息教研室制作课程练习课程练习KEY1:CJNEA,#0FDH,KEY2SJMPCOM2 ;键值=FDH,作控制值KEY2:CJNEA,#0FBH,KEY3SJMPCOM2 ;键值=FBH,作控制值KEY3:CJNEA,#0F7H,CEND ;键值=F7H,作控制值COM2:MOVCTROL,ACEND:POPPSWPOPACCRETI 湖南理工学院信息与通信工程学院电子信息教研室制作C语言语言乙机接收程序乙机接收程序#include #define uchar unsigned ch

19、ardata uchar ctrol _at_ 0 x50;/ 定义控制值变量ctroldata uchar count;/ 定义计数变量countbit time=0;/ 定义0.5S到标志位变量time并清0课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作void dis0( ) /K0键按下显示函数:全亮后全灭,交替闪烁 data uchar a=0 xff; while(ctrol=0 xfe) / 控制值没变继续循环 a=a; / 变反 P1=a;/ 从P1输出 while(time=0); / 等待0.5S到 time=0; / 清0.5S到标志 课程练习课程练习湖

20、南理工学院信息与通信工程学院电子信息教研室制作void dis1( ) /K1键按下显示函数: LED由上向下流动点亮 data uchar a=1;/ 保证只有一个点亮 while(ctrol=0 xfd) / 控制值没变继续 P1=a;/ 低电平点亮 while(time=0);/ 等待0.5S到 time=0;/ 清0.5S到标志 a=a1;/ 左移一位 if(a=0)a=0 x80;/ 全0,则置80H 课程练习课程练习湖南理工学院信息与通信工程学院电子信息教研室制作void main() TMOD=0 x21;/ 设置定时器T1为方式2 TL0=0 x00;/给T0设初值 TH0=0 x4c; TR0=1;/ 启动T0定时 TH1=0 xfd;/ 波特率9600 TL1=0 xfd; PCON=0 x00; / 波特率不加倍 TR1=1;/ 启动T1作波特率发生器 SCON=0 xd0; / 方式3,启动接收 IE=0 x92;/ 开中断, 允许T0与串行口中断课程练习课程练习T0定时设置波特率设置湖南理工学院信息与

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论