版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 目录1 设计任务12 设计方案13硬件设计13.1 at89c51简介13.2 max232芯片简介43.3 串行通信电路54 软件设计64.1 bios串行通信口功能64.2 单片机串行口控制寄存器及波特率的计算74.3 程序流程图104.3.1 pc机部分程序流程图104.3.2 单片机部分125 心得体会13参考文献14附录一15附录二17 计算机通信系统设计1 设计任务1. 画出简要的硬件原理图,编写通信程序。 2. 程序运行后,实现pc机和单片机之间的串行通信。2 设计方案pc机与单片机之间最简单的连接是零调制3线经济型,所谓三线就是指发送数据线txd、接收数据线rxd以及信号地线
2、gnd。连接时,双方的地线直接相连,收发数据线交叉相连。这是进行全双工通信所必需的最少数目的线路。由于单片机的输入、输出、均为ttl电平,而pc机配置的是rs-232标准串行接口,二者的电气规范不一致,因此要完成pc机与单片机之间的串行通信,必须进行电平转换。本次课程设计我们选用at89c51单片机,电平转换芯片选用maxim公司生产的max232芯片。3硬件设计3.1 at89c51简介at89c51是一种带4k字节闪烁可编程可擦除只读存储器(fperomflash programmable and erasable read only memory)的低电压,高性能cmos 8位微处理器,
3、俗称单片机。at89c2051是一种带2k字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用atmel高密度非易失存储器制造技术制造,与工业标准的mcs-51指令集和输出管脚相兼容。由于将多功能8位cpu和闪烁存储器组合在单个芯片中,atmel的at89c51是一种高效微控制器,at89c2051是它的一种精简版本。at89c单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。以下是at89c51芯片的引脚图: 图3-1 at89c51引脚图接下来对单片机个管教进行简要说明:vcc:供电电压。gnd:接地。p0口:p0口为一个8位漏级开路双向
4、i/o口,每脚可吸收8ttl门电流。当p1口的管脚第一次写1时,被定义为高阻输入。p0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在fiash编程时,p0 口作为原码输入口,当fiash进行校验时,p0输出原码,此时p0外部必须被拉高。p1口:p1口是一个内部提供上拉电阻的8位双向i/o口,p1口缓冲器能接收输出4ttl门电流。p1口管脚写入1后,被内部上拉为高,可用作输入,p1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在flash编程和校验时,p1口作为第八位地址接收。 p2口:p2口为一个内部上拉电阻的8位双向i/o口,p2口缓冲器可接收,输出4个ttl
5、门电流,当p2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,p2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。p2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,p2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,p2口输出其特殊功能寄存器的内容。p2口在flash编程和校验时接收高八位地址信号和控制信号。p3口:p3口管脚是带8个内部上拉电阻的双向i/o口,可接收输出4个ttl门电流。当p3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,p3口将输出电流(il
6、l)这是由于上拉的缘故。p3口也可作为at89c51的一些特殊功能口,如下表所示:管脚 备选功能p3.0 rxd(串行输入口)p3.1 txd(串行输出口)p3.2 int0(外部中断0)p3.3 int1(外部中断1)p3.4 t0(记时器0外部输入)p3.5 t1(记时器1外部输入)p3.6 wr(外部数据存储器写选通)p3.7 rd(外部数据存储器读选通)p3口同时为闪烁编程和编程校验接收一些控制信号。rst:复位输入。当振荡器复位器件时,要保持rst脚两个机器周期的高电平时间。ale/prog:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在flash编程期间,此引
7、脚用于输入编程脉冲。在平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ale脉冲。如想禁止ale的输出可在sfr8eh地址上置0。此时, ale只有在执行movx,movc指令是ale才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ale禁止,置位无效。/psen:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/psen有效。但在访问外部数据存储器时,这两次有效的/psen信号将不出现。/ea/vpp:当/ea保持低电平时,则在此期间外部
8、程序存储器(0000h-ffffh),不管是否有内部程序存储器。注意加密方式1时,/ea将内部锁定为reset;当/ea端保持高电平时,此间内部程序存储器。在flash编程期间,此引脚也用于施加12v编程电源(vpp)。xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。xtal2:来自反向振荡器的输出。3.2 max232芯片简介max232芯片是maxim公司生产的、包含两路接收器和驱动器的ic芯片,适用于各种eia232c和v.28/v.24的通信接口。max232芯片内部有一个电源电压变换器,可以把输入的+5v电源电压变换成rs-232c输出所需要的正负10v电压。所以,采用此芯
9、片的接口串行通信系统只需要单一的+5v电源就可以了。 以下是max232芯片的引脚图: 图3-2max232引脚max232典型工作电路图: 图3-3 max232典型工作电路图在max232工作电路中,电容c1、c2、c3、c4、以及v_、v+是电源变换电路部分。在实际应用中,期间对电源噪声很敏感。因此,vcc必须要对地加去耦电容,其他电容同样是用以提高抗干扰能力,在连接时必须尽量靠近器件。下半部分是发送和接收部分,实际应用中,和可直接接ttl/cmos点评的89c51单片机的串行发送端txd;和可直接接ttl/cmos电平的89c51单片机的串行接收端rxd;和可直接接pc机的rs-232
10、串口接收端rxd;和可直接接pc机的rs-232串口发送端txd.3.3 串行通信电路通过以上对at89c51和max232两个芯片的介绍,接下来设计串行通信电路。现从max232芯片中两路发送接收中任选一路作为接口。应注意其发送、接受的引脚要对应。以下为接口电路图: 图3-4 pc机与单片机通信电路4 软件设计编写程序,实现单片机与pc机之间的串行通信。程序实现以下功能:单片机向pc机发送数据,pc机接收后将接收到的数据反馈给单片机,由单片机检测发送的数据是否正确,正确则继续发送并由数码管显示该数字,否则重新发送,直至数据发送完毕。4.1 bios串行通信口功能pc机提供比较灵活的关于串行口
11、的bios中断调用方法,即通过”int 14”调用rom bios串行通信口例行程序。该例行程序包括将串口初始化为指定的字节结构和传输速率,检查控制器的状态、读写字符等功能。下面介绍”int 14”中断调用功能。1 初始化串行通信口(ah=0) 调用参数:al=初始化参数 dx=通信口号,0:com1, 2:com2 返回参数:ah=通信口状态 al=调制解调器状态 2 向串行通信口写字符(ah=1) 输入参数:al=所写字符 dx=通信口号,0:com1, 2:com2 输出参数:写字符成功:ah.7=0,al=已写入字符 写字符失败:ah.7=1,ah.06=通信口状态3 从串行通信口读字
12、符(ah=2) 输入参数:dx=通信口号,0:com1, 2:com2 输出参数:读字符成功:ah.7=0,al=读入字符 读字符失败:ah.7=1,ah.06=通信口状态4 取通信口状态(ah=3) 输入参数:dx=通信口号,0:com1, 2:com2 输出参数:ah=通信口状态 al=调制解调器状态 4.2 单片机串行口控制寄存器及波特率的计算89c51串行通信的方式选择、接收和发送控制以及串行口的状态标志等均由特殊功能寄存器scon控制和指示。scon 串行口控制寄存器通常在芯片或设备中为了监视或控制接口状态,都会引用到接口控制寄存器。scon 就是51 芯片的串行口控制寄存器。它的寻
13、址地址是98h,是一个可以位寻址的寄存器,作用就是监视和控制51 芯片串行口的工作状态。51 芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用scon 寄存器。它的各个位的具体定义如下:sm0 sm1 sm2 ren tb8 rb8 ti rism0、sm1 为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。串行口工作模式设置。sm0 sm1 模式 功能 波特率 0 0 0 同步移位寄存器 fosc/12 0 1 1 8位uart 由定时器设置 1 0 2 9位uart fosc/32 或fosc/64 1 1 3 9位uart 由定时器设置在这里只说明最常用的模式
14、1,其它的模式也就一一略过。表中的fosc 代表振荡器的频率,也就是晶振的频率。uart 为(universal asynchronous receiver)的英文缩写。sm2: 在模式2、模式3 中为多处理机通信使能位。在模式0 中要求该位为0。ren: 为允许接收位,ren 置1 时串口允许接收,置0 时禁止接收。ren 是由软件置位或清零。如果在一个电路中接收和发送引脚p3.0,p3.1 都和上位机相连,在软件上有串口中断处理程序,当要求在处理某个子程序时不允许串口被上位机来的控制字符产生中断,那么可以在这个子程序的开始处加入ren=0 来禁止接收,在子程序结束处加入ren=1 再次打开
15、串口接收。tb8: 发送数据位8,在模式2 和3 是要发送的第9 位。该位可以用软件根据需要置位或清除,通常这位在通信协议中做奇偶位,在多处理机通信中这一位则用于表示是地址帧还是数据帧。rb8: 接收数据位8,在模式2 和3 是已接收数据的第9 位。该位可能是奇偶位,地址/数据标识位。在模式0 中,rb8 为保留位没有被使用。在模式1 中,当sm2=0,rb8 是已接收数据的停止位。ti: 发送中断标识位。在模式0,发送完第8 位数据时,由硬件置位。其它模式中则是在发送停止位之初,由硬件置位。ti 置位后,申请中断,cpu 响应中断后,发送下一帧数据。在任何模式下,ti 都必须由软件来清除,也
16、就是说在数据写入到sbuf 后,硬件发送数据,中断响应(如中断打开),这时ti=1,表明发送已完成,ti 不会由硬件清除,所以这时必须用软件对其清零。ri: 接收中断标识位。在模式0,接收第8 位结束时,由硬件置位。其它模式中则是在接收停止位的半中间,由硬件置位。ri=1,申请中断,要求cpu 取走数据。但在模式1 中,sm2=1时,当未收到有效的停止位,则不会对ri 置位。同样ri 也必须要靠软件清除。常用的串口模式1 是传输10 个位的,1 位起始位为0,8 位数据位,低位在先,1 位停止位为1。它的波特率是可变的,其速率是取决于定时器1 或定时器2 的定时值(溢出速率)。at89c51
17、和at89c2051 等51 系列芯片只有两个定时器,定时器0 和定时器1,而定时器2是89c52 系列芯片才有的。波特率:在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。如果波特率为9600,它是指每秒可以传送9600 个二进位,而一个字节要8 个二进位,如用串口模式1 来传输那么加上起始位和停止位,每个数据字节就要占用10 个二进位,9600 波特率用模式1 传输时,每秒传输的字节数是960010960 字节。51 芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12m 的晶振来计算,那
18、么它的波特率可以达到1m。模式2 的波特率是固定在fosc/64 或fosc/32,具体用那一种就取决于pcon 寄存器中的smod位,如smod 为0,波特率为focs/64,smod 为1,波特率为focs/32。模式1 和模式3 的波特率是可变的,取决于定时器1 或2(52 芯片)的溢出速率。那么我们怎么去计算这两个模式的波特率设置时相关的寄存器的值呢?可以用以下的公式去计算。波特率(32)定时器1 溢出速率上式中如设置了pcon 寄存器中的smod 位为1 时就可以把波特率提升2 倍。通常会使用定时器1 工作在定时器工作模式2 下,这时定时值中的tl1 做为计数,th1 做为自动重装值
19、 ,这个定时模式下,定时器溢出后,th1 的值会自动装载到tl1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式2 下定时器1 溢出速率的计算公式如下:溢出速率(计数速率)/(256th1)上式中的“计数速率”与所使用的晶体振荡器频率有关,在51 芯片中定时器启动后会在每一个机器周期使定时寄存器th 的值增加一,一个机器周期等于十二个振荡周期,所以可以得知51 芯片的计数速率为晶体振荡器频率的1/12,一个12m 的晶振用在51 芯片上,那么51 的计数速率就为1m。通常用11.0592m 晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。如我们要得到96
20、00 的波特率,晶振为11.0592m 和12m,定时器1 为模式2,smod 设为1,分别看看那所要求的th1 为何值。代入公式:11.0592m9600(232)(11.0592m/12)/(256-th1)th125012m9600(232)(12m/12)/(256-th1)th1249.49上面的计算可以看出使用12m 晶体的时候计算出来的th1 不为整数,而th1 的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600 波特率。当然一定的误差是可以在使用中被接受的,就算使用11.0592m 的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的
21、影响是十分之小的,可以忽略不计。4.3 程序流程图4.3.1 pc机部分程序流程图 开始串口初始化接收字符数据是否就绪 ?接收成功?取回发送保持器是否空?发送字符是否成功nynynyny接收完毕?结束n 图3-5 pc机通信程序流程图4.3.2 单片机部分 开始 串口初始化n发送出错结束发送完毕?重新发送是否正确?发送数据 等待反馈数据nyy 图3-6 单片机通信程序流程图5 心得体会这学期学习了微机原理与接口技术,接触汇编语言,开始对其有一定的了解,以前编写程序用的都是c语言,基本上不涉及硬件方面的东西,而汇编语言则不同,它需要对硬件电路有一定的了解,这样在学习汇编语言的时候,就需注意硬件方
22、面的知识的掌握。本次课程设计我所做的题目是实现单片机与pc机之间的串行通信,对于这个题目,在微机原理与接口技术这门课程里曾学过关于pc机的串行通信的知识,而对于单片机,在以前也曾经自学过,所以最初看到这个题目的时候,并没有感到无从下手,接下来需要做的事情就是通过查找资料确定硬件电路,然后再通过硬件电路编写实现功能的程序。通过查找资料,最终确定下来硬件电路图,进而根据要求编写程序。由于对此类题目以前没有做过,所以本次课程设计,无论是硬件电路方面,还是软件方面,难免会有些不足之处,比如硬件电路可以尝试其他的实现方法,而软件方面,则可以修改程序使其实现更加复杂的功能等。虽然如此,通过此次课程设计还是
23、感觉获益匪浅,首先是对汇编语言和微机的串行通信知识有了进一步的了解和巩固,为以后更加系统的学习和应用奠定了一定的基础;其次是对单片机知识有了很好的认识,以前只是很粗浅的学习了单片机,经过这几天的学习和应用,有了很大程度的提高;最后一点就是提高了自己分析和解决问题的能力,面对我们未知的问题,我们应该知道如何下手,如何解决。总之,通过此次课程设计,让我收获了很多。参考文献1 周佩玲. 微机原理与接口技术.电子工业出版社,20052 周坚. 单片机c语言轻松入门.北京航空航天大学出版社,20063 李朝青. 单片机原理及接口技术(第三版). 北京航空航天大学出版社,20054 潘超群. 单片机控制技
24、术在通信中的应用-mcs-51系列.电子工业出版社,20085 程学先. 汇编语言程序设计.武汉理工大学出版社,2002附录一pc机通信程序: data segment rbuf db 10 dup(0) count db 10 data ends code segment assume cs:code,ds:data,start proc far push ds push axmov ax,datamov ds,axlea di ,rbuf ;置接收数据块首地址mov cl,count ;置接收数据块长度mov ah,00h ;0号功能 mov al,0e3h ;串口初始化:波特率9600,
25、无校验,1位停止位,8位数据位mov dx,00h ;指定com1端口int 14hrept1:mov ah,02h ;2号功能:接收字符mov dx,00h ;指定com1端口int 14h ;出口参数:al中为接收到的参数,ah中为线路状态mov bx,ax ;ax中的内容暂存于bx中mov al,ah ;取线路状态至altest al,80h ;接收是否成功(d7=0?) jnz rept1 ;不成功,重接test al,01h ;数据是否准备就绪jnz rept1 ;未就绪,重接mov al,bl ;就绪,取回字符mov di,al ;保存inc di ;指向下一个地址单元rept2:
26、mov ah,03h ;3号功能检查串口状态mov dx,00h ;指定com1端口int 14hmov al,ah ;取线路状态至altest al,20h ;发送保持器是否空(d5=1?)jz rept2rept3:mov al,bl ;将接收到的字符存至almov ah,01h ;1号功能:发送字符mov dx,00h ;指定com1端口int 14hmov al,ah ;取线路状态至altest al,80h ;发送是否成功(d7=0?) jnz rept3 ;不成功,重发loop rept1 ;数据是否接收完毕?未完,继续pop dspop axcode endsend start附
27、录二单片机通信程序:#include#include#define uchar unsigned char#define uint unsigned intvoid delay(void) /延迟函数uchar a,b,c;for(a=250;a0;a-)for(b=25;b0;b-)for(c=100;c0;c-);void senddata(uchar dat) /发送函数 sbuf=dat; while(1) if(ti) /检测发送中断标志 ti=0; break; void receive() / 接收函数 if(ri) ri=0; void dis (uchar i) /显示函数
28、switch(i) case 0:p1=0x00;delay(); break; case 1:p1=0x01; delay();break; case 2:p1=0x02;delay(); break; case 3:p1=0x03; delay();break; case 4:p1=0x04; delay();break; case 5:p1=0x05; delay();break; case 6:p1=0x06; delay();break; case 7:p1=0x07; delay();break; case 8:p1=0x08; delay();break; case 9:p1=0
29、x09;delay(); break; main() uchar i=0; tmod=0x20; /确定定时器工作模式 th1=0xfb; tl1=0xfb; /定时初值 pcon&=0x80; /smod=1 tr1=1; /开启定时器1 scon=0x50; /串口工作方式1,允许接收 for(i=0;i10;i+) /发送10个数据 senddata(i); while(1) /等待接收数据 if(ri) /检测接收中断标志 if(sbuf=i) /判断是否发送正确 dis (sbuf); /显示发送的数据 receive(); break; else /不正确,发送出错报告,重新发送 i-; receive(); break;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年物业市场推广合作合同
- 2024年格力空调质保与安装服务协议
- 2025幼儿园园长聘用合同
- 渠道沟通机制建设增强协作效率
- 瑜伽馆广告牌建设合同
- 福建省福州市部分学校教学联盟2023-2024学年高一上学期期末考试历史试题(解析版)
- 北京市延庆区2023-2024学年高二上学期期末考试历史试题(解析版)
- 三违行为预防与干预体系
- 河南省洛阳市2023-2024学年高二上学期期末考试数学试题(解析版)
- 河北省邢台市质检联盟2025届高三上学期11月期中考试数学试题(解析版)
- 甲醇-水精馏填料塔的设计
- 吹风机成品过程质量控制检查指引
- 中介人合作协议(模版)
- 财务管理制度-家电行业
- 班主任工作满意度测评表
- 德国WMF压力锅使用手册
- 沥青路面施工监理工作细则
- 《寻找消失的爸爸》(图形)
- 《孤独症儿童-行为管理策略及行为治疗课程》读后总结
- 人教版八年级上册英语单词表默写版(直接打印)
- PDCA循环在传染病管理工作中的应用
评论
0/150
提交评论