目录
1.选题 2
1.1选题背景 2
1.2选题要求 2
2.课程目的 3
3.方案设计 3
3.1系统的基本方案 4
3.2各模块方案选择 5
3.3单片机工作原理 5
4.软件设计 6
4.1源程序 7
4.2调试过程及结果 7
5.设计小结 8
6.附录 8
一,选题本次,我组所选项目名称为:单片机同pc机间的串行通信 1.1选题背景
在各种单片机应用系统的设计中,如智能仪器仪表、各类手持设备、GPS接收器等,常常遇到计算机与外界的信息交换,即通讯。通信的基本方式可分为并行通信与串行通信两种。 目前,在许多单片机应用系统中,上、下位机分工明确,作为下位机核心器件的单片机往往只负责数据的采集和通信,而上位机通常以基于图形界面的Windows系统为操作平台。 现阶段这种应用的核心便是数据通信,它包括单片机和上位机之间、客户端和服务器之间以及客户端和客户端之间的通信,而在单片机和上位机之间的数据通信则是整个系统的基础。单片机和PC的通信是通过单片机的串口和PC机之间的硬件连接实现。鉴于PC机具有强大的监控和管理功能,单片机则具有快速以及容易控制的特点,在数据量不大、传输要求不高的情况下,一般都采用给PC机配置的RS-232标准串行接口COM1、COM2等相连接来实现应用系统与PC机之间的数据交换。 现今我国工业迅速发展的情况下,对工业中的计算机控制提出了较高的要求。比如在常见的现场数据采集中,对各个采集点需要采集不同的数据,比如温度、湿度、压力、照度,这就需要单片机对计算机发出的不同的指令做出不同的反应,并且返回相应的采集到的数据。这就需要单片机和PC机进行双向数据通信。这也是本设计的目标效果。【以上为参考内容,详见附录】
1.2选题要求
利用开发板编程实现单片机同PC机间的串行通信,要求: 1.单片机能够通过键盘输入数据并在数码管上显示; 2.根据PC机发送的指令,单片机向PC机发送相应的数据;
二, 课程目的通过书本的学习,掌握电子电路的工艺设计过程,了解单片机技术的基本组成与结构,通过对单片机技术电路的装配过程,掌握单片机技术以及MCU的设计开发流程,掌握单片机技术硬件和软件的设计能力,学习的单片机技术电路装配工艺和正确的焊接方法,程序调试、下载及提高动手能力。掌握印刷电路板的设计、制作及检验。掌握单片机技术的综合编程与开发、设计制造、调试仿真的能力。了解设计过程中的各个基本环节,也为今后的实际应用奠定基础。
三,方案设计3.1系统的基本方案 本次设计通过使用一块AT89C51单片机芯片实现与PC机之间的串行通信,首先利用可视化程序设计编制串口调试软件,然后向串口发送“1”、“2”......“8”、“9”、“0”等字符,板子收到数据后通过数码管显示出来,同时会向PC机反馈显示成功的信号。 3.2各模块方案选择
3.2.1单片机的选择
统一选择STC89C51单片机,他是一种低功耗,高性能的CMOS8位微控制器,具有8K在系统可编程Flash存储器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C51位众多嵌入式控制应用系统提供高灵活,超有效的解决方案。 3.2.2显示模块的选择
采用八段数码管显示,同PC端地址符合时,相应发光二极管点亮。
3.2.3串行方式,串行口工作方式,波特率,数据传送方式的选择本次课程设计中采用的是串行异步通信方式。 串行口工作方式选择方式1。 波特率设置为9600b/s。 数据传送方式选择全双工方式。 3.3单片机工作原理
3.3.1 串行通信的概念及分类通信的基本方式可分为并行通信与串行通信两种。 并行通信:是将组成数据的各位同时传送,并通过并行门(如P1口等)来实现。在并行通信中,数据传送线的根数与传送的数据位数相等,传送数据速度快,但所占用的传输线位数多。因此,并行通信适合短距离通信。如图2-1所示。 串行通信:是指数据一位一位地按顺序传送。串行通信通过串行口来实现。在全双工的串行通信中,仅需要一根发送线和一根接收线,串行通信可大大节省传送线路的成本,但数据传送速度慢。由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用。如图3-2所示。
图3-1 并行通信 图3-2 串行通信 串行通信有同步通信和异步通信两种基本方式。 (1)异步通信方式:数据通常是以字符(或字节)为单位组成字符帧传送的。发送方发送各个字符的间隔时间是不定的,收发双方各用自己的时钟源来控制发送和接收,这两个时钟源彼此独立,互不同步。接收端是依靠字符帧格式来判断发送端是何时开始发送及何时结束发送。平时,发送线为高电平(逻辑“1”),每当接收端检测到传输线上发送过来的低电平逻辑“0”(字符帧中起始位)时,就知道发送端已开始发送,每当接收端接收到字符帧中的停止位时,就知道一帧字符信息己发送完毕。 (2)同步通信方式:是一种连续串行传送数据的通信方式,一次通信只传送一帧信息。这里的信息帧和异步通信中的字符帧不同,通常有若干个数据字符。同步字符帧由同步字符、数据字符和校验字符三部分组成。同步字符位于帧结构开头,用于确认数据字符的开始(接收端不断对传输线采样,并把采到的字符和双方约定的同步字符比较,只有比较成功后才会把后面接收到的字符加以存储);数据字符在同步字符之后,个数不受限制,由所需传输的数据块长度决定;校验字符有1~2个,位于帧结构末尾,用于接收端对接收到的数据字符的正确性的校验。 【以上为参考内容,出处详见附录】
3.3.2 串行口的工作方式51单片机串行口有4种工作方式——方式0,方式1,方式2,方式3。 (1)方式0:设定SM0,SM1为00时,串行接口工作于方式0,在方式0下,RXD(P3.0)为数据输入/输出端,TXD(P3.1)为同步脉冲输出端,发送或接收的数据为8位低位在前,高位在后,方式0的波特率固定为fosc/12,也就是每一机器周期传送1位数据,方式0可外接移位寄存器,将串行接口扩展为并行接口,也可外接同步输入输出设备。 (2)方式1:当设定SM0,SM1为01时,串行接口工作于方式1,方式1为波特率可变的8位异步通信方式,由TXD发送,RXD接收。一帧数据为10位,1位起始位(低电平)8位数据位(低位在前)和1位停止位(高电平)。 方式1: 波特率=2SMOD*(定时器T1溢出率)/32 (1) (3)方式2和方式3:当设定SM0,SM1为10或11时,串行口工作于方式2或方式3,这两种方式都是9位异步通信,仅波特率不同,适用于多机通信。在方式2或方式3下,数据由TXD发送,RXD接收,1帧数据为11位,1位起始位(低电平)8位数据位(低位在前)1位可编程位(第9位数据)用作奇偶校验或地址/数据选择,1位停止位,与方式1相比多了一位可编程位,发送时,第9位数据为TB8,接收时,第9位数据送入RB8。方式2和方式3的区别只在于波特率不同。 方式2: 波特率=2SMOD*fosc/64 (2) 方式3: 波特率=2SMOD*(定时器T1溢出率)/32 (3) 【以上为参考内容,出处详见附录】
3.3.3串行通信的数据传送方式在串行通信中,数据是在两个站之间传送的。按照数据传送方向,串行通信可分为单工、半双工和全双工三种传送方式。如图2-4。 单工方式:通信线的一端接发送器,另一端接接收器,它们形成单向连接,只允许数据按照一个固定的方向传送。数据只能单方向传送。 半双工方式:数据能够实现双方向传送,但任何时刻只能由其中的一方发送数据,另一方接收数据。 全双工方式:系统的每端都含有发送器和接收器,数据可以同时在两个方向上传送 【以上为参考内容,出处详见附录】
4.2调试过程及结果 刚开始调试并不顺利,虽然程序参照了书本上的内容,但由于设计要求的不同和自己的疏忽,导致了多次单片机毫无反应的结果,不过好在通过小组间的通力合作,对程序进行了从头到尾的认真排查,终于发现了在写程序过程中犯的低级错误。并且由于上次试验后忘记把跳线帽从P3.3和P3.4上拔下,也导致了排查时间的延长。好在最终终于让单片机显示了从PC端传来的数据。 *调试过程相关图片
五,设计小结通过本次单片机间串行通信实验设计,使我对单片机有更加深刻的了解,明白了软件与硬件的配合使用,懂得怎样去调试程序以及电路,虽然在设计过程中遇到很多困难,但是经过进一步查阅相关资料,进行反复排错,问题才得以解决,总体上来说实现了单片机与PC机间串行通信,基本上完成了设计要求,通过本次设计也使得自己明白软件与硬件相结合的重要性,二者缺一不可,所以在实现硬件连接的同时也要读懂软件所实现的功能。本设计介绍了一种单片机与PC机之间串行通信的设计方法,主要是对单片机与单片机之间串行通信的方式和重要的数据位说明,接着提出了可行的设计方案,详细介绍了整个设计的工作原理及设计过程,同时验证了方案的可行性。平时上课时老师教授的内容也很重要,想要得到更多知识和能力,还需要自己在以后的学习中付出更多认真和努力。
附录本次主要参考文献为《MCS-51单片机技术项目驱动教程》。
单片机源程序如下:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar i=0,k,kk=100,n;
- uchar arry[4];
- uchar LED[16]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--);
- for(y = 100;y>0;y--);
- }
- void delay20ms()
- {
- unsigned char i,j;
- for(i=0;i<100;i++)
- for(j=0;j<20;j++);
- }
-
- void display(unsigned char a)
- {
- unsigned char shi,ge;
- shi=a/10;
- ge=a%10;
- P0=LED[shi];
- P1=0x01;
- delay(1000);
- P0=0xff;
- P0=LED[ge];
- P1=0x02;
- delay(1000);
- P0=0xff;
- }
-
- unsigned char keyscan()
- {
- unsigned char row,col=0,m=0xff;
- P2=0Xf0;
- if((P2&0xf0)==0xf0)
- return m;
- delay20ms();
- if((P2&0xf0==0xf0))
- return m;
- for(row=0;row<4;row++)
- {
- P2=~(1<<row);
- m=P2&0xf0;
- if(m!=0xf0)
- {
- while(m&(1<<(col+4)))
- col++;
- m=row*4+col+1;
- P2=0xf0;
- while((P2&0xf0)!=0xf0);
- break;
- }
- }
- return m;
- }
-
- void main()
- {
- TMOD = 0x20;
- TH1 = 0xfd;
- TL1 = 0xfd;
- TR1 = 1;
- SCON = 0x50;
- ES = 1;
- EA = 1;
- P0 = 0;
- while(1)
- {
- k=keyscan();
- if(k!=0xff)
- {
- if(k!=kk)
- kk=k;
- n=k;
- }
- display(n);
- }
-
- }
- void server() interrupt 4
- {
- uchar n;
- uint j,temp;
- if(TI)
- A:TI=0;
- else
- {
- RI = 0;
- n = SBUF;
- arry[0]=n/1000;
- arry[1]=n%1000/100;
- arry[2]=n%100/10;
- arry[3]=n%10;
- while(1)
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
单片机同pc机间的串行通信.docx
(342.44 KB, 下载次数: 17)
|