用AT89S51与PC机实现串口通讯.doc
文本预览下载声明
桂 林 电 子 科 技 大 学
单片机最小应用系统
设
计
报
告
指导老师:吴 兆 华
学 生: 林承德
学 号: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));
}
}
//串口接收中断函数
void serial () interrupt 4 u
显示全部