用AT89S5与PC机实现串口通讯.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用AT89S5与PC机实现串口通讯

桂 林 电 子 科 技 大 学 单片机最小应用系统 设 计 报 告 指导老师:吴 兆 华 学 生: 林承德 学 号:092011221 机电工程学院 2010年6月 一、设计题目 用AT89S51与PC机实现串口通讯,单片机接收上位机发送的数字,并在最小系统板上的数码管上将其显示。 二、系统硬件电路图 系统硬件图包括单片机最小系统(复位电路、晶振电路和相关的控制信号)、串口通讯电路以及数字显示部分。 设计硬件电路图时,其基本思想:先在proteus中搭建仿真电路,将编好的程序下载到仿真环境的51中,等可以达到预期要求后,最后在PROTEL中设计原理图与PCB,做出电路板。 图2.0 系统硬件全局图 2.1 单片机最小系统电路图 2.2 串口通讯原理及其电路图 一、发送和接收的过程如下: 串行口的发送过程由指令MOV SBUF,A启动,即CPU由一条写发送缓冲器的指令把数据(字符)写入串行口的发送缓冲器SBUF(发)中,再由硬件电路自动在字符的始、末加上起始位(低电平)、停止位(高电平)及其它控制位(如奇偶位等),然后在移位脉冲SHIFT的控制下,低位在前,高位在后,从TXD端(方式0除外)一位位地向外发送。 串行口的接收与否受制于允许接收位REN的状态,当REN被软件置“1”后,允许接收器接收。接收端RXD一位位地接收数据,直到收到一个完整的字符数据后,控制电路进行最后一次移位,自动去掉启始位,使接收中断标志RI置“1”,并向CPU申请中断。CPU响应中断,用一条指令(MOV A,SBUF)把接收缓冲器SBUF(收)的内容读入累加器。 TI和RI是由硬件置位的,但需要用软件复位。 二、相关的寄存器 1、SBUF是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据。两个缓冲器只用一个字节地址99H,可通过指令对SBUF的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。串行口对外有两条独立的收发信号线RXD(P3.0)、TXD(P3.1),因此可以同时发送、接收数据,实现全双工。 2、SCON寄存器用来控制串行口的工作方式和状态,可按位寻址,其字节地址为98H。 3、PCON中的SMOD用来控制波特率加倍。 4、TMOD设置定时器1的工作方式,用来产生波特率 5、如果用到中断,则还需要用到中断相关的寄存器IE,IP等 2.3 数码管显示电路 三、单片机和PC程序 3.1单片机程序 #include reg51.h #include string.h unsigned char inbuf[4]; bit read_flag=0; unsigned int cnt=3; unsigned char ch=0; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x00}; void display(); void delay(int z) ; void init_serialcomm(void) { SCON = 0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr TMOD |= 0x20; //TMOD: timer 1, mode 2, 8-bit reload PCON |= 0x80; //SMOD=1; TH1 = 0xF4; //Baud:4800 fosc=11.0592MHz TL1 = 0xF4; IE |= 0x90; //Enable Serial Interrupt TR1 = 1; // timer 1 run } //向串口发送一个字符 void send_char_com(unsigned char ch) { SBUF=ch; while(TI==0); TI=0; } //向串口发送一个字符串,strlen为该字符串长度 void send_string_com(unsigned char *str) { unsigned int k=0; for(k=4;k0;k--) { send_char_com(*(str + k-1)); } } //串口接收

文档评论(0)

vdi938 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档