基于8155的8LED显示串口通信机设计

课程设计实验报告

实验题目:基于8155的8LED显示串口通信机设计学院:通信与信息工程

专业:

学号:

姓名:

指导老师:

第一部分实验目的及要求

1.实验目的

本课程设计是在理论课程的基础上,重点培养学生的动手能力,通过理论计算、实际编程、调试、测试、分析查找故障,解决在实际设计中的问题,使设计好的电路能正常工作,为下一部结合实际的硬件系统设计准备条件。

2.实验基本要求:

1设计一串口通信程序,波特率9600,通过RS232串口自环。

自动循环发送数据串(设计在程序中),接收并存储和显示该数据串。

2数据串单次发送由按键启动,接收端显示数据串和数据串数、正确接收数和错误数。

3数据串选择发送(预存10种数据串),通过按键选择发送,接收、存储并按序显示。

根据提供的参考工程,在proteus平台自己重新画出实验所需要的电气原理图,并在此基础上编写相对应的程序,实现其功能,学习proteus软件的使用,其中包括原理图器件的选取、原理图的电气连接、程序的编写编译以及运行,并能查出其错误等。

第二部分实验工具及实验器件

1.Proteus 7.5以及Keil 4软件的使用

Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。而*.HEX文件则由Keil软件编译后生成。

Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVi sion)将这些部分组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件,而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

有了proteus和keil软件我们就需要在这两个软件中建立我们所需要的工程进行实验,具体步骤如下:

第一步:在Keil4中建立一个新的工程,命名为“软件实验”,如图2-1。

第二步:选择使用的单片机芯片,我们选择ATMEL公司生产的89C51,如图2-2。

第三步:将新创建的.c文件添加到Target 1中,如图2-3。

图2-3 这样我们就可以在keil4的环境下对单片机的程序进行编译和运行了。

2.51单片机AT89C51

51单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是52系列的单片机一般不具备自编程能力。

当前常用的51系列单片机主要产品有:

*Intel的:80C31、80C51、87C51,80C32、80C52、87C52等;

*ATMEL的:89C51、89C52、89C2051等;

89C51单片机的内部结构为:

单一+5V电源供电;

CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;

RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;

ROM:用以存放程序、一些原始数据和表格;

I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;

T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;

五个中断源的中断控制系统;

一对全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或

单片机与微机之间的串行通信;

片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率为12M。

3.RS-232电平转换芯片MAX232

第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v 和-12v两个电源,提供给RS-232串口电平的需要。

第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。

其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。

8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。

TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT 输出。

第三部分是供电。15脚GND、16脚VCC(+5v)。

完成连接之后的电路图如图2-4所示。

图2-4

11和12口分别连接51单片机的RxD(P3.0)、TxD(P3.1)。

4.三态输出的8D透明锁存器74HC373

74HC373 的输出端 Q0~Q7可直接与总线相连。

当三态允许控制端 OE 为低电平时,Q0~Q7为正常逻辑状态,可用来驱动负载或总线。当OE为高电平时,Q0~Q7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。

当锁存允许端 LE 为高电平时,Q随数据D而变。当 LE为低电平时,Q被锁存在已建立的数据电平。

5.二线制I2C CMOS串行EEPROM 24C08

6.8155引脚以及功能。

8155是一个有40引脚的塑封芯片,功能较强,广泛的应用在计算机电路中。它有两个8位口A、B和一个6位口C,总共可以扩展出22条接线。它含一个可预置的计数器,计数范围从2到16383,可用于延时、计数或分频。它内部还有256字节的RAM,可以补充CPU内存的不足。为了能够设置芯片的工作方式和了解芯片的状态,内部还有命令寄存器和状态寄存器。

8155各引脚功能说明如下:

RST:复位信号输入端,高电平有效。复位后,3个I/O口均为输入方式。

AD0~AD7:三态的地址/数据总线。与单片机的低8位地址/数据总线(P0口)相连。单片机与8155之间的地址、数据、命令与状态信息都是通过这个总线口传送的。

:读选通信号,控制对8155的读操作,低电平有效。

:写选通信号,控制对8155的写操作,低电平有效。

:片选信号线,低电平有效。

IO/:8155的RAM存储器或I/O口选择线。当IO/=0时,则选择8155的片内RAM,AD0~AD7上地址为8155中RAM单元的地址(00H~FFH);当IO/=1时,选择 8155的I/O口,AD0~AD7上的地址为8155 I/O口的地址。

ALE:地址锁存信号。8155内部设有地址锁存器,在ALE的下降沿将单片机P0口输出的低8位地址信息及,IO/的状态都锁存到8155内部锁存器。因此,P0口输出的低8位地址信号不需外接锁存器。

PA0~PA7:8位通用I/O口,其输入、输出的流向可由程序控制。

PB0~PB7:8位通用I/O口,功能同A口。

PC0~PC5:有两个作用,既可作为通用的I/O口,也可作为PA口和PB口的控制信号线,这些可通过程序控制。

TIMER IN:定时/计数器脉冲输入端。

TIMER OUT:定时/计数器输出端。

V CC:+5V电源。

2、8155的地址编码及工作方式

在单片机应用系统中,8155是按外部数据存储器统一编址的,为16位地址,其高8位由片选线提供,=0,选中该片。

当=0,IO/=0时,选中8155片内RAM,这时8155只能作片外RAM使用,其RAM 的低8位编址为00H~FFH;当=0,IO/=1时,选中8155的I/O口,其端口地址的低8位由AD7~AD0确定,如表6-6所示。这时,A、B、C口的口地址低8位分别为01H、02H、03H(设地址无关位为0)。

,也可作为A口、B口在选通工作方式时的状态控制信号线。当C口作为状态控制信号时,其每位线的作用如下:

PC0:AINTR(A口中断请求线)

PC1:ABF(A口缓冲器满信号)

PC2:(A口选通信号)

PC3:BINTR(B口中断请求线)

PC4:BBF(B口缓冲器满信号)

PC5:(B口选通信号)

8155的I/O工作方式选择是通过对8155内部命令寄存器设定控制字实现的。命令寄存器只能写入,不能读出,命令寄存器的格式如图6-16所示。

在ALT1~ALT4的不同方式下,A口、B口及C口的各位工作方式如下:

ALT1:A口,B口为基本输入/输出,C口为输入方式。

ALT2:A口,B口为基本输入/输出,C口为输出方式。

ALT3:A口为选通输入/输出,B口为基本输入/输出。PC0为AINTR,PC1为ABF,PC2为,PC3~PC5为输出。

ALT4:A口、B口为选通输入/输出。PC0为AINTR,PC1为ABF,PC2为,PC3为BINTR,PC4为BBF,PC5为。

7.LED液晶显示器件7seg-mpx8-ca

7SEG-MPX8-CA八个共阳二极管显示器12345678是阳公共端

图三LED液晶显示器件7seg-mpx8-ca

数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。

(1)静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都有个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5*8=40跟I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个,实际应用时需要增加译码驱动进行驱动,增加了硬件电路的复杂性。

(2)动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的八个显示比划“a,b,c,d,e,f,g,h”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立I/O线控制,当单片机输出字形码时,所有数码管都接受到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通恐慌只打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动,在轮流显示过程中,每位数码管的点亮时间为1—2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就使一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

第三部分实验原理图及程序代码

1.硬件部分电路设计

电路图如图:

2.软件部分设计

这部分的程序如下:

#include

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define pa XBYTE[0x0001] //定义8155口地址

#define pb XBYTE[0x0002]

#define control8155 XBYTE[0x0000]

sbit SCK=P1^0;

sbit SDA=P1^1;

sbit E=P3^7;

sbit SEND=P3^1;

sbit REV=P3^0;

sbit K1=P3^2;

sbit K2=P3^3;

sbit K3=P2^3;

uchar

table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ;//0123456789存码表

uchar pos[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位选,选中数码管

data unsigned char str1[16]={"Starting...."};

data unsigned char str2[16]={"Recieved:"};

data unsigned char send[16]={"test number"};

uchar temp;

int i;

void delay(unsigned int t)

{

unsigned int i,j;

for(i=0;i

for(j=0;j<10;j++)

;

}

void delayXus(uchar x) //微秒延时

{

while(--x);

}

void delayXms(uchar x) //毫秒延时

{

uchar i;

while(x--)

{

for(i=250;i>0;i--)

{

;

}

}

}

void start ()

{

SDA=1;

delay(3);

delay(3);

SDA=0;

delay(3);

SCK=0;

delay(3);

}

void stop ()

{

SDA=0;

delay(3);

SCK=1;

delay(3);

SDA=1;

delay(3);

}

void U4_init()

{

SCK=1;

delay(3);

SDA=1;

delay(3);

}

void responds()

{

uchar i;

i=0;

SCK=1;

SDA=1;

delay(3);

while(SDA==1&&i<250)

i++;

SCK=0;

delay(3);

}

void write_dat (uchar dat) //写一个字节{

uchar i,temp;

temp=dat;

for(i=0;i<8;i++)

{

temp=temp<<1;

delay(3);

SCK=1;

delay(50);

SCK=0;

}

}

void write(uchar add,uchar dat) // 写一个字节dat到地址add {

start();

write_dat(0xa0);

responds();

write_dat(add);

responds();

write_dat(dat);

responds();

stop();

}

uchar read_dat () //读一个字节

{

uchar a,r,temp;

SDA=1; //接收前记得释放数据线,即拉高sda。delay(3);

for(a=0;a<8;a++) //循环八次以此接收一字节数据

{

SCK=1; //sck置高,使接收数据稳定。

delay(3);

r=r<<1; //接收数据处理,存入i2c_r变量中。

temp=SDA;

r=r|temp;

SCK=0; //sck置低,准备接受下个数据位。

delay(3);

}

return r;

}

uchar read (uchar add) //从地址add中读取一个字节

{

uchar dat;

start();

write_dat(0xa0);

responds();

write_dat(add);

responds();

start();

write_dat(0xa1);

responds();

dat=read_dat();

delayXus(2);

stop();

return dat; }

void writedata()

{uchar i;

uchar str[8]={0xf9,0xa4,0xb0,0xc0,0xf9,0xa4,0xb0,0xc0};

for(i=0;i<8;i++)

{

write(i,str[i]);

}

str[0]=0xa4;str[1]=0xb0;str[2]=0x99;str[3]=0xf9;str[4]=0xa4;str[5]=0xb0 ;str[6]=0x99;str[7]=0xf9;

for(i=8;i<16;i++)

{

write(i,str[i-8]);

}

str[0]=0x4f;str[1]=0x5b;str[2]=0x4f;str[3]=0x66;str[4]=0x66;str[5]=0x4f ;str[6]=0x5b;str[7]=0x06;

for(i=16;i<24;i++)

{

write(i,str[i-16]);

}

str[0]=0x99;str[1]=0x92;str[2]=0x82;str[3]=0xb0;str[4]=0x99;str[5]=0x92 ;str[6]=0x82;str[7]=0xb0;

for(i=24;i<32;i++)

{

write(i,str[i-24]);

}

str[0]=0x92;str[1]=0x82;str[2]=0xf8;str[3]=0x99;str[4]=0x92;str[5]=0x82 ;str[6]=0xf8;str[7]=0x99;

for(i=32;i<40;i++)

{

write(i,str[i-32]);

}

str[0]=0x82;str[1]=0xf8;str[2]=0x80;str[3]=0x92;str[4]=0x82;str[5]=0xf8 ;str[6]=0x80;str[7]=0x92;

for(i=40;i<48;i++)

{

write(i,str[i-40]);

}

str[0]=0xf8;str[1]=0x80;str[2]=0x90;str[3]=0x82;str[4]=0xf8;str[5]=0x80 ;str[6]=0x90;str[7]=0x82;

for(i=48;i<56;i++)

{

write(i,str[i-48]);

}

str[0]=0x80;str[1]=0x90;str[2]=0xc0;str[3]=0xf8;str[4]=0x80;str[5]=0x90 ;str[6]=0xc0;str[7]=0xf8;

for(i=56;i<64;i++)

{

write(i,str[i-56]);

}

str[0]=0x90;str[1]=0xc0;str[2]=0x88;str[3]=0x80;str[4]=0x90;str[5]=0xc0 ;str[6]=0x88;str[7]=0x80;

for(i=64;i<72;i++)

{

write(i,str[i-64]);

}

str[0]=0xc0;str[1]=0x88;str[2]=0x83;str[3]=0x90;str[4]=0xc0;str[5]=0x88 ;str[6]=0x83;str[7]=0x90;

for(i=72;i<80;i++)

{

write(i,str[i-72]);

}

}

void send_char(uchar temp1)

{SBUF=temp1;

while(!TI);

TI=0;

}

void MAX232_init()

{

TMOD=0x20;

TH1=252;

TL1=252;

TR1=1;

PCON=0x80;

SCON=0x50;

}

void main()

{

int i,j,set;

char b,t;

uchar word[16],recv[8]; U4_init();

writedata();

delay(50);

set=0;

while(1)

{

control8155=0x03;

for(i=0;i<8;i++)

{

pa=pos[i];

pb=0x88;

//pb=send[i];

delay(5);

}

}

while(1)

{

while(K2)

{

while(!K1)

{

if(!K2)

break;

}

while(K1)

{

if(!K2)

break;

}

if(!K2)

break;

delay(30);

set++;

if(set>10)

{

set=0;

}

}

MAX232_init();

while(!K2);

control8155=0x03;

delay(30);

switch(set)

{

case 1:

for(i=0;i<8;i++)

{

send[i]=read(i);

}

for(i=0;i<8;i++)

{

send_char(send[i]);

delay(50);

if(RI==1)

{ RI=0;

temp=SBUF;

recv[i]=temp;

}

delay(100);

}

while(K3) //show {

for(i=0;i<8;i++)

{

pa=pos[i];

pb=send[i];

delay(5);

}

delay(5);

}

delay(5);

while(!K3);

pa=0x00;

pb=0xff;

break;

break;

case 2:

for(i=8;i<16;i++)

{

send[i-8]=read(i);

}

for(i=0;i<8;i++)

{

send_char(send[i]);

delay(50);

if(RI==1)

{ RI=0;

temp=SBUF;

recv[i]=temp;

}

delay(100);

}

break;

case 3:

for(i=16;i<24;i++) {

send[i-16]=read(i);

}

for(i=0;i<8;i++)

{

send_char(send[i]);

delay(50);

if(RI==1)

{ RI=0;

temp=SBUF;

recv[i]=temp;

}

delay(100);

}

break;

case 4:

for(i=24;i<32;i++)

{

send[i-24]=read(i); }

for(i=0;i<8;i++)

{

send_char(send[i]);

delay(50);

if(RI==1)

{ RI=0;

temp=SBUF;

recv[i]=temp;

}

delay(100);

}

break;

case 5:

for(i=32;i<40;i++)

{

send[i-32]=read(i); }

for(i=0;i<8;i++)

{

send_char(send[i]);

delay(50);

if(RI==1)

{ RI=0;

temp=SBUF;

recv[i]=temp;

}

delay(100);

}

break;

case 6:

for(i=40;i<48;i++)

{

send[i-40]=read(i); }

for(i=0;i<8;i++)

{

send_char(send[i]);

delay(50);

if(RI==1)

{ RI=0;

temp=SBUF;

recv[i]=temp;

}

delay(100);

}

break;

case 7:

for(i=48;i<56;i++)

{

send[i-48]=read(i); }

for(i=0;i<8;i++)

{

send_char(send[i]);

delay(50);

if(RI==1)

{ RI=0;

temp=SBUF;

recv[i]=temp;

}

delay(100);

}

break;

串口通信实验报告全版.doc

实验三双机通信实验 一、实验目的 UART 串行通信接口技术应用 二、实验实现的功能 用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。 三、系统硬件设计 (1)单片机的最小系统部分 (2)电源部分 (3)人机界面部分

数码管部分按键部分 (4)串口通信部分 四、系统软件设计 #include #define uchar unsigned char #define uint unsigned int void send(); uchar code0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9的数码管显示 sbit H1=P3^6; sbit H2=P3^7;

sbit L1=P0^5; sbit L2=P0^6; sbit L3=P0^7; uint m=0,i=0,j; uchar temp,prt; /***y延时函数***/ void delay(uint k) { uint i,j; //定义局部变量ij for(i=0;i

{ m=1; //KEY1键按下 return(m); } if(H2==0) { m=4; //KEY4键按下 return(m); } } } if(L2==0) { delay(5); if (L2==0) { L2=0;H1=1;H2=1; if(H1==0) { m=2; //KEY2键按下 return(m); } if(H2==0) { m=5; //KEY5键按下 return(m); } } } if(L3==0) { delay(5); if (L3==0) { L3=0;H1=1;H2=1; if(H1==0) { m=3; //KEY3键按下

RS232串口通信实验报告

RS232串口通信实验报告 学院:电子信息学院 班级:08031102 姓名:张泽宇康启萌余建军 学号:2011301966 2011301950 2011301961 时间:2014年11月13日 学校:西北工业大学

一.实验题目: 设计一个简单的基于串口通信的信息发送和接受界面 二.实验目的: 1.熟悉并掌握RS232串口标准及原理。 2.实现PC机通过RS232串口进行数据的收发。 3.熟悉VC语言编写程序的环境,掌握基本的VC语言编程技巧。 三.实验内容 程序代码: P// PC1PC2Dlg.cpp : implementation file // #include "stdafx.h" #include "PC1PC2.h" #include "PC1PC2Dlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL

常见串口接口电路设计集锦

常见串口接口电路设计集锦 六种常用串口接口电路1、并口接口(分立元件) 适用于Windows 95/98/Me 操作系统。这个电路与FMS 随软件提供的电路比多了一个200K 的电阻,这个主要是为了与JR 的摇控器连接,因为JR 的摇控器教练口好象是集电极开路设计的,需要加一只上拉电阻才能正常工作。 不过电路还是满简单的,用的元件也很少,很适合无线电水平不太高的朋友们 制作,只是不能用于Win2000/XP 上有点让人遗憾。 2、串口接口(分立元件)字串5 适用于Windows 95/98/Me 操作系统,电路也不是很复杂,当然元件比并口电路多了一些,而且串口的外壳比并口小很多,如何把这些元件都放到小 小的外壳里免不了要大家好好考虑一下了。当做体积小也是它的最大的优点, 而且不用占用电脑并口,因为现在还有一些打印机还是要用并口的。缺点同样 是不支持Win2000/XP。 3、串行PIC 接口(使用PIC12C508 单片机)字串9 适用于Windows 95/98/Me/2000/XP 操作系统。电路简单,只是用到MicroChip 公司的PIC12C508 型单片机,免不了要用到编程器向芯片里写程序了,这个东西一般朋友可能没有,不过大多卖单片机的地方都有编程器,你只 要拿张软盘把需要用的HEX 文件拷去让老板帮你写就可以了。这个接口最大 的优点就是支Win2000/XP 操作系统,还可以用PPJOY 这个软件来用摇控器虚拟游戏控制器玩电脑游戏。 4、25 针串行PIC 接口(使用PIC12C508 单片机) 适用于Windows 95/98/Me/2000/XP 操作系统。电路同9 针的接口基本一样,只不过是接25 针串口的,现在用的不是很多了。

UART串口通信实验报告

实验四 UART 串口通信 学院:研究生院 学号:1400030034 姓名:张秋明 一、 实验目的及要求 设计一个UART 串口通信协议,实现“串 <-->并”转换功能的电路,也就是 “通用异步收发器”。 二、 实验原理 UART 是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实 现全双工传输和接收。在嵌入式设计中,UART 用来主机与辅助设备通信,如汽 车音响与外接AP 之间的通信,与PC 机通信包括与监控调试器和其它器件,如 EEPROM 通信。 UART 作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一 位接一位地传输。 其中各位的意义如下: 起始位:先发出一个逻辑” 0的信号,表示传输字符的开始。 资料位:紧接着起始位之后。资料位的个数可以是 4、5、6、7、8等,构成 一个字符。通常采用ASCII 码。从最低位开始传送,靠时钟定位。 奇偶校验位:资料位加上这一位后,使得“ 1的位数应为偶数(偶校验)或奇数 (奇校验),以此来校验资料传送的正确性。 停止位:它是一个字符数据的结束标志。可以是 1位、1.5位、2位的高电 平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能 在通信中两台设备间出现了小小的不同步。 因此停止位不仅仅是表示传输的结束, 并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步 的容忍程度越大,但是数据传输率同时也越慢。 空闲位:处于逻辑“ 1状态,表示当前线路上没有资料传送。 波特率:是衡量资料传送速率的指标。表示每秒钟传送的符号数(symbol )。 一个符号代表的信息量(比特数)与符号的阶数有关。例如资料传送速率为 120 字符/秒,传输使用256阶符号,每个符号代表8bit ,则波特率就是120baud,比 特率是120*8=960bit/s 。这两者的概念很容易搞错。 三、 实现程序 library ieee; use ieee.std 」o gic_1164.all; end uart; architecture behav of uart is en tity uart is port(clk : in std_logic; rst_n: in std 」o gic --系统时钟 --复位信号 rs232_rx: in std 」o gic rs232_tx: out std 」o gic --RS232接收数据信号; --RS232发送数据信号;); use ieee.std_logic_ un sig ned.all;

揭秘DSP电机控制串行通信系统电路设计

揭秘DSP电机控制串行通信系统电路设计 在电机控制系统中,客户端要通过上位机来设置电机的运行参数,而 被控电机也要将各种运行状态信息实时地传给远程控制端客户,串行通信由于 连线少,成本低,简单可靠,被广泛应用。本文利用SCI 串行通讯接口实现DSP 控制器与PC 机的通信连接;电机控制系统中还必须有数码显示驱动电路,以便于现场控制人员及时了解电机当前的转速等信息,因此利用SPI 同步串行口来实现DSP 与外围设备之间的通信就很有必要。分析了数字信号处理芯片TMS320LF2407ADSP 的串行外设接口SPI,及串行通信接口SCI 模块。在电机控制实验系统中,给出了由这2 个模块构成的串行通信应用实例。重点讲述了 相关的串行通信接口电路硬件设计高。 串行通信接口模块的硬件电路设计 电机的运行参数,如转向、转速及位置信号等由主机制定,通过RS232 串行通信传输到DSP,DSP 再将运行结果返回给主机的电机控制系统中,以实现远程客户端和被控电机之间的通讯。由于上位机(PC)一般都带有RS232 接口,所以我们利用上位机的串行口与下位机DSP 的异步串行口SCI 来进行RS232C 通信和数据交换,实现计算机对工业现场被控对象的检测和控制。TMS32OLF24O7A 的串行通信接口电路如该实验系统利用DSP 的SCI 串行通信接口电路实现了DSP 控制器与上位机的通讯连接,整个接口电路简单,可靠性高。DSP 控制器通过SCI 串行通信接口电路,将控制系统的实时运行状态上传给上位机供存储和分析,而上位机则通过SCI 串行通信接口电路将控制指令(例如起、停、正转、反转、运行速度等)发送给DSP 控制器,以实现对电机控制系统的实时控制。本试验系统的串行通信速率可变,波特率默认值为l 9200,从l200,2400,4800,9 600,到l9 200 可调。

实验四 有限状态机设计(2学时)

实验四有限状态机设计(2学时) 实验内容一: 状态机是指用输入信号和电路状态(状态变量)的逻辑函数去描述时序逻辑电路功能的方法,也叫时序机。有限状态机是指在设计电路中加入一定的限制条件,一般用来实现数字系统设计中的控制部分。 根据时序电路输出信号的特点可将时序电路划为Mealy 型和Moore 型两种。Moore型电路中,输出信号仅仅取决于存储电路的状态。Mealy型电路中,输出信号不仅取决于存储电路的状态,而且还取决于输入变量。图1是某Mealy型电路的状态转换图,图中圆圈内的S0、S1等代表电路的状态,状态转换箭头旁斜杠“/”上边的数字代表输入信号,斜杠“/”下边的数字代表输出信号。假设电路的当前状态为S0,当输入信号为0时,电路的下一个状态仍为S0,输出信号为0;当输入信号为1时,电路的下一个状态为S1,输出为1。 图1 Mealy状态机 下面的程序中使用两个进程来描述该状态机。第一个进程负责状态转化,在CP上升沿到达时,当前状态(PresetState)向下一个状态(NextState)的转换;第二个进程负责检测输入信号(DIN)和当前状态(PresetState)的值,并由CASE-WHEN 语句决定输出信号(OP)和下一个状态值(NextState)的值。请补充下图中虚线“…”部分省略掉的程序,然后对完整程序进行编译,并用Tools->Netlist Views->State Machine Viewer和RTL Viewer工具查看该状态机的状态图和RTL顶层图。

… … 实验内容二: 论文《基于VHDL的一个简单Mealy状态机》中设计了一个Mealy状态机用来检测数据流“1101010”,用以验证状态机在数据检测上的应用。请在读懂文中程序的基础上,在Quartus Ⅱ软件中通过编译仿真得到状态图和波形图,仿真中输入波形的设置应能体现该状态机的用途。 实验报告: 本次实验占用两个学时,请于12周周四(5月12日)上课时交实验报告。对于实验内容一,报告的内容应重在程序的完善上,对于实验内容二,报告的内容应重在对论文中源程序的分析和理解,以及仿真的波形图上。

串行通信实验报告材料

串行通信实验报告 班级姓名学号日期 一、实验目的: 1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。 2、了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。 3、学习串口通讯的程序编写方法。 二、实验要求 1.单机自发自收实验:实现自发自收。编写相应程序,通过发光二极管观察收发状态。 2.利用单片机串行口,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,另一侧为接收方。 三、实验说明 通讯双方的RXD、TXD信号本应经过电平转换后再行交叉连接,本实验中为减少连线可将电平转换电路略去,而将双方的RXD、TXD直接交叉连接。也可以将本机的TXD接到RXD上。 连线方法:在第一个实验中将一台实验箱的RXD和TXD相连,用P1.0连接发光二极管。波特率定为600,SMOD=0。 在第二个实验中,将两台实验箱的RXD和TXD交叉相连。编写收发程序,一台实验箱作为发送方,另一台作为接收方,编写程序,从内部数据存储器20H~3FH单元中共32个数据,采用方式1串行发送出去,波特率设为600。通过运行程序观察存储单元内数值的变化。 四、程序 甲方发送程序如下: ORG 0000H LJMP MAIN ORG 0023H LJMP COM_INT ORG 1000H MAIN: MOV SP,#53H MOV 78H,#20H

MOV 77H,00H MOV 76H,20H MOV 75H,40H ACALL TRANS HERE: SJMP HERE TRANS: MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H MOV PCON,#80H SETB TR1 MOV SCON,#40H MOV IE,#00H CLR F0 MOV SBUF,78H WAIT1: JNB TI,WAIT1 CLR TI MOV SBUF,77H WAIT2: JNB TI,WAIT2 CLR TI MOV SBUF,76H WAIT3: JNB TI,WAIT3 CLR TI

单片机串口通讯实验报告

实验十单片机串行口与PC机通讯实验报告 ㈠实验目的 1.掌握串行口工作方式的程序设计,掌握单片机通讯的编制; 2.了解实现串行通讯的硬环境,数据格式的协议,数据交换的协议; 3.了解PC机通讯的基本要求。 ㈡实验器材 1.G6W仿真器一台 2.MCS—51实验板一台 3.PC机一台 ㈢实验内容及要求 利用8051单片机串行口,实现与PC机通讯。 本实验实现以下功能,将从实验板键盘上键入的字符或数字显示到PC 机显示器上,再将PC机所接收的字符发送回单片机,并在实验板的LED上显示出来。 ㈣实验步骤 1.编写单片机发送和接收程序,并进行汇编调试。 2.运行PC机通讯软件“commtest.exe”,将单片机和PC机的波特率均设定 为1200。 3.运行单片机发送程序,按下不同按键(每个按键都定义成不同的字符), 检查PC机所接收的字符是否与发送的字符相同。 4.将PC机所接收的字符发送给单片机,与此同时运行单片机接受程序,检 查实验板LED数码管所显示的字符是否与PC机发送的字符相同。

㈤ 实验框图

源程序代码: ORG 0000H AJMP START ORG 0023H AJMP SERVE ORG 0050H START: MOV 41H,#0H ;对几个存放地址进行初始化 MOV 42H,#0H MOV 43H,#0H MOV 44H,#0H MOV SCON,#00H ;初始化串行口控制寄存器,设置其为方式0 LCALL DISPLAY ;初始化显示 MOV TMOD,#20H ;设置为定时器0,模式选用2 MOV TL1, #0E6H ;设置1200的波特率 MOV TH1, #0E6H SETB TR1 ;开定时器 MOV SCON,#50H ;选用方式1,允许接收控制 SETB ES SETB EA ;开中断 LOOP: ACALL SOUT ;键盘扫描并发送,等待中断 SJMP LOOP SERVE JNB RI,SEND ;判断是发送中断还是接收中断,若为发送中 断则调用 ACALL S IN ;发送子程序,否则调用接收子程序 RETI SEND: CLR TI ;发送子程序 RETI SIN: CLR RI ;接受子程序 MOV SCON, #00H MOV A, SBUF ;接收数据 LCALL XS ;调用显示子程序 RETI 子程序: SOUT: CLR TI ;清发送中断标志位 LCALL KEY ;调用判断按键是否按下子程序 MOV A,R0 ;将按键对应的数字存入A MOV SBUF,A ;输出按键数字给锁存 RET KEY: MOV P1,#0FFH ;将P1设置为输入口 MOV A, P1 CPL A ;将A内值取反

状态机及其VHDL设计

第7章状态机及其VHDL设计 内容提要:有限状态机(Finite State Machine,简称FSM)是一类很重要的时序电路,是许多数字系统的核心部件,也是实时系统设计中的一种数学模型,是一种重要的、易于建立的、应用比较广泛的、以描述控制特性为主的建模方法,它可以应用于从系统分析到设计的所有阶段。有限状态机的优点在于简单易用,状态间的关系清晰直观。建立有限状态机主要有两种方法:“状态转移图”和“状态转移表”。标准状态机通常可分为Moore和Mealy两种类型。本章主要介绍了基于VHDL的常见有限状态机的类型、结构、功能及表达方法,重点是如何有效地设计与实现。 学习要求:了解状态机的基本结构、功能和分类,掌握有限状态机的一般设计思路与方法、状态机编码方案的恰当选取、Moore和Mealy状态机的本质区别及设计实现。 关键词:状态机(State Machine),Moore,Mealy,VHDL设计(VHDL Design) 状态机的基本结构和功能 一般状态机的VHDL设计 状态机的一般组成 状态机的编码方案 摩尔状态机的VHDL设计 米立状态机的VHDL设计 状态机的基本结构和功能 状态机的基本结构如图所示。除了输人信号、输出信号外,状态机还包含一组寄存器记忆状态机的内部状态。状态机寄存器的下一个状态及输出,不仅同输入信号有关,而且还与寄存器的当前状态有关,状态机可以认为是组合逻辑和寄存器逻辑的特殊组合。它包括两个主要部分:即组合逻辑部分和寄存器。组合逻辑部分又可分为状态译码器和输出译码器,状态译码器确定状态机的下一个状态,即确定状态机的激励方程,输出译码器确定状态机的输出,即确定状态机的输出方程。寄存器用于存储状态机的内部状态。 状态机的基本操作有两种: 1.状态机的内部状态转换。 状态机经历一系列状态,下一状态由状态译码器根据当前状态和输入条件决定。2.产生输出信号序列。

实验四 UART串口通信实验报告

实验四UART串口通信 一、实验目的及要求 设计一个UART串口通信协议,实现“串<-->并”转换功能的电路,也就是“通用异步收发器”。 二、实验原理 UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。 UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。 其中各位的意义如下: 起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。 资料位:紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。 奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。 停止位:它是一个字符数据的结束标志。可以是1位、1.5

位、2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。 波特率:是衡量资料传送速率的指标。表示每秒钟传送的符号数(symbol)。一个符号代表的信息量(比特数)与符号的阶数有关。例如资料传送速率为120字符/秒,传输使用256阶符号,每个符号代表8bit,则波特率就是120baud,比特率是120*8=960bit/s。这两者的概念很容易搞错。 三、实现程序 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity uart is port(clk : in std_logic; --系统时钟rst_n: in std_logic; --复位信号 rs232_rx: in std_logic; --RS232接收

基于单片机的串行通信接口的设计开题报告

专科毕业设计/论文 开题报告课题名称基于单片机的串行通信接口的设计 系别机电与自动化学院 专业班机电一体化技术1002班 姓名柯辉 评分 导师(签名) 华中科技大学武昌分校 20年月日

毕业设计(论文)开题报告撰写要求: 1.开题报告的主要内容 1)所选课题国内、外研究及发展状况 2)课题研究的目的和意义; 3)课题研究的主要内容、难点及关键技术; 4)研究方法及技术途径; 5)实施计划。 2.主要参考文献:不少于3篇。 3.开题报告的字数不少于1500字,格式按《华中科技大学武昌分校专科毕业设计(论文)撰写规范》的要求撰写。 4.开题报告单独装订,本附件为封

华中科技大学武昌分校专科学生毕业设计开题报告学生姓名柯辉学号20102821076专业班级机电一体化1002系别机电与自动化指导教师吴蕾职称工程师课题名称基于单片机的串行通信接口的设计 1课题国内、外研究及发展状况 1.1课题在国内研究发展状况 随着城市的不段发展和工业科技的不断进步,电子工业产品也越来越自动化和小型化,人们对信息流量的需求也在不断增长,传统并行通信接口技术成为进一步提高数据传输速率的瓶颈。过去主要用于光纤通信的串行通信接口技术与并行接口技术相比其设计简单、控制方便不仅简化了系统的连线,缩小了电路板的面积,节省了系统资源而且还具有扩展性好、编程方便,易于实现用户系统软硬件的模块化以及标准化,串行接口少,便于远距离传输等优点所以串行通信接口技术正在取代传统并行通信接口技术而成为高速接口技术的主流。而在串行通信接口技术中又以RS232和RS485两种串口应用的最为广泛。在国内一些高端知名的电子产品公司如联想、华为、海信等连年不断的对电脑、手机进行升级处理这些都离不开接口技术的快速发展,而人们对这类高端产品的依赖也促进了电子科技的进一步发展而串行通信接口技术正是电子科技的重中之重。有需求就有市场科技永远是人们生活中的一大主流,这就为串行通信接口的发展铺上了一条光明大道。 1.2课题在国外的研究发展状况 串行通信接口技术的发展越来越迅速蓬勃不仅仅表现在国内在国外发展同样迅猛由于国外政府对于IT行业的重视和照顾纷纷采取了一系列相关政策来促进串行通信技术发展使的串口技术成为了进入宽带化、网格化而且还具有了移动性、泛在性的可信网。例如美国的EIA、微软等协会、公司对串口技术的重视不断对串口技术进行升级改良。iphone、三星等国外智能手机的不断升级改良也离不开串行通信接口技术的进一步发展,所以人们想要生活的更好电子技术的研究是必不可少的而其中的串行通信技术也是重中之重。

单片机串口通信实验报告

信息工程学院实验报告 课程名称:单片机原理及接口 实验项目名称:串口通信实验实验时间:2017、5 一、实验目得: 1.了解什么就是串口,串口得作用等。 2、了解串口通信得相关概念 3、利用keil软件,熟悉并掌握中串口通信得使用 4、通过实验,熟悉串口通信程序得格式,串口通信得应用等 二、实验原理 1、串口通信概念: 单片机应用与数据采集或工业控制时,往往作为前端机安装在工业现场,远离主机,现场数据采用串行通信方式发往主机进行处理,以降低通信成本,提高通信可靠性。如下图所示。 2、串口数据通信方式及特点 ★数据通信方式有两种:并行通信与串行通信 ★并行通信: 所传送数据得各位同时发送或接收, ?数据有多少位就需要多少根数据线。 特点: 速度快,成本高,适合近距离传输 如计算机并口,打印机,8255 。 ★串行通信:所传送数据得各位按顺序一位一位 地发送或接收。 只需一根数据,一根地线,共2 根 特点:成本低,硬件方便,适合远距离通信, 传输速度低。 串行通信与并行通信示意图如下: 成绩: 指导老师(签名):

3、串行通信基本格式 ①单工通信:数据只能单向传送。 ②半双工通信:通信就是双向得,但每一时刻,数据流通得方向就是单向得。 ③全双工通信:允许数据同时在两个方向流动,即通信双方得数据发送与接收就是同时进行得。 4、异步串行通信/同步串行通信 ①异步串行通信: 异步串行通信采用如下得帧结构: 起始位+ 8位数据位+ 停止位或起始位+ 9位数据位+停止位 其中:起始位为低电平,停止位为高电平。 优点:硬件结构简单 缺点:传输速度慢 ②同步串行通信: 在同步通信中,发送方在数据或字符开始处就用同步字符(常约定1~2个字节)指示一帧得开始,由时钟来实现发送端与接收端同步,接收方一旦检测到与规定得同步字符符合,下面就连续按顺序传送若干个数据,最后发校验字节。见下图: 5、串行通信过程与UART 基本得计算机异步串行通信系统中,两台计算机之间通过三根信号线TxD、RxD与GND连接起来,TxD与GND构成发送线路,RxD与GND构成接收线路。一台计算机得TxD、RxD线分别与另一台计算机得RxD、TxD线相连。 由于在串行通信过程中得并串转换、串并转换、线路检测、采样判决、组帧、 拆帧、发送与接收等操作需消耗CPU大量时间,以至CPU无法处理其它工 作,因而开发出专用于处理异步串行通信发送与接收工作得芯片UART(通用 异步串行通信接收发送器)。 CPU只需将要发送得一个字节数据交给UART,其它发送工作由UART自动完成,当UART将一帧数据发送完毕,会通知CPU 已发送完,可提交下一个字节。 UART自动监测线路状态并完成数据接收工作,当接收到一个字节数据后,UART会通知CPU来读取。采用UART 后,CPU得负担大大减轻了。

基于51单片机的双机串行通信课程设计 1000110061

基于AT89C51单片机的双机串行通信设计 姓名:杨应伟 学号:100110061 专业:机械设计制造及其制动化 班级:机电二班

前言 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域随着计算机技术的发展及工业自动化水平的提高, 在许多场合采用单机控制已不能满足现场要求,因而必须采用多机控制的形式,而多机控制主要通过多个单片机之间的串行通信实现。串行通信作为单片机之间常用的通信方法之一, 由于其通信编程灵活、硬件简洁并遵循统一的标准, 因此其在工业控制领域得到了广泛的应用。 在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。 在通信过程中,使用通信协议进行通信。在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。 串行通信是单片机的一个重要应用,本次课程设计就是要利用单片机来完成一个系统,实现爽片单片机床航通信,通信的结果使用数码管进行显示,数码管采用查表方式显示,两个单片机之间采用RS-232进行双击通信。在通信过程中,使用通信协议进行通信。

利用有限状态机进行时序逻辑的设计

利用有限状态机进行时序逻辑的设计 1. 实验目的: (1)掌握利用有限状态机实现一般时序逻辑分析的方法; (2)掌握用Verilog编写可综合的有限状态机的标准模板; (3)掌握用Verilog编写状态机模块的测试文件的一般方法。 (4)在数字电路中已经学习过通过建立有限状态机来进行数字逻辑的设计,而在VerilogHDL硬件描述语言中,这种设计方法得到进一步的发展。通过Verilog HDL提供的语句,可以直观的设计出更为复杂的时序逻辑的电路。关于有限状态机的设计方法在教材中已经作了较为详细的阐述。 2.实验环境 PC机一台,安装有quartusII13.0软件以及modulsim软件 3.实验内容 设计一个简单的状态机,功能是检测一个5位二进制序列“10010”。考虑到序列重叠的可能。有限状态机共提供8个状态(包括初始状态IDLE). 4.实验步骤 1) 源程序: module seqdet(x,z,clk,rst,state); input x,clk ,rst ;

output z; output [2:0] state ; reg[2:0] state ; wire z; parameter IDLE='d0, A='d1, B='d2, C='d3, D='d4, E='d5, F='d6, G='d7; assign z=(state == E && x==0)?1:0; always @(posedge clk) if(!rst) begin state <= IDLE; end else casex(state) IDLE:if(x==1)

串口通讯实验报告

网络编程与实践实验报告 实验内容:串口通信编程 学号:S201502189 姓名:职荣豪 日期:2015-9-28

一、实验要求 使用VS2010编写基于对话框的MFC应用程序,两个窗口分别使用两个串口,使得这两个窗口可以进行通信,包括数据的发送与接收。 二、实验原理 本实验使用Microsoft Communications Control控件,利用这个ActiveX控件,只需要编写少量代码即可轻松进行通信。 该控件相关的函数如下: put__CommPort:设置串口号 put_Settings:以字符串的形式设置波特率、奇偶校验位(n-无校验,e-偶校验,o-奇校验)、数据位数、停止位数 put_InputMode:设置接收数据的类型(0-文本类型,1-二进制类型) put_InputLen:设置从接收缓冲区读取的字节数,0表示全部读取 put_InBufferSize:设置接收缓冲区大小 put_OutBufferSize:设置发送缓冲区大小 put_RThreshold:设定当接收几个字符时触发OnComm事件,0表示不产生事件,1表示每接收一个字符就产生一个事件 put_SThreshold:设定在触发OnComm事件前,发送缓冲区内所允许的最少的字符数,0表示发送数据时不产生事件,1表示当发送缓冲区空时产生OnComm事件put_PortOpen:打开或关闭串口,传入参数为true时打开串口,传入参数为false时关闭串口 get_CommEvent:获得串口上刚发生的事件,事件值为2表示接收到数据 get_InBufferCount:获得缓冲区中的数据位数 get_Input:获取缓冲区数据,返回类型为VARIANT put_Output:发送数据 三、设计思路 需要添加一个Microsoft Communications Control控件,用于进行串口通信。 由于要求同一程序可运行两个窗口进行相互通信,需要两个窗口开启两个不同串口,故需要添加一个Edit Control控件用于输入串口号,并添加打开串口按钮,在点击该按钮时对串口控件的参数进行设置并开启串口。同时添加关闭串口按钮,点击后关闭串口并可以对串口号进行修改。 需要添加两个Edit Control 分别用于显示接收到的数据以及输入要发送的数据。 需要添加一个发送按钮,点击后发送输入的数据。 四、实验步骤 1.建立基于对话框的MFC应用程序 2.添加界面控件并设置ID与Caption

异步串行接口电路及通信系统设计设计报告

异步串行接口电路及通信系统设计 设计报告 2009级可编程逻辑课程名称: 实验题目:学生姓名: YC 开课学院: Bio开课时间: 2011课程设计可编程逻辑设计异步串行接口电路及通信系统设计、SXL、ZY、YLJ、WJ 学院至2012学年第二学期重庆大学本科学生课程设计指导教师评定成绩表学院年级学生姓名课程设计题目be学院2009级指导教师专业Zxm. Wxp. BME YC、SXL、ZY、YLJ、WJ 异步串行接口电路及通信系统设计指导教师评语课程设计成绩指导教师签名:年月日重庆大学本科学生课程设计任务书课程设计题目学院BE学院异步串行接口电路及通信系统设计专业BME 年级、班09 BME 01、02班

设计要求:设计一个能进行异步全双工串行通信的模块,该模块以固定的串行数据传送格式收发数据。1)每帧数据供10 位,其中1位启动位,8位数据位,1位停止位。2)波特率为:9600。3)收发误码率摘要摘要通用串口是远程通信接口,在数字系统使用很普遍,是一个很重要的部件。本论文使用VHDL语言描述硬件功能,并适当借助Verilog HDL 语言,利用在FPGA 芯片上的综合描述,采用模块化设计方法设计UART的各个模块。其中包括波特率发生器,程序控制器,UART数据接收器和UART数据发送器,采用的外部时钟为50MHZ,波特率为9600。在QuartusII 环境下进行设计、编译和仿真。最后的程序编译仿真结果及硬件测试结果表明系统设计完全正确。关键字:VHDL; Verilog HDL;UART; 帧格式; FPGA;异步通信I 摘要Abstract In this paper, the use of

如何设计最优化的状态机

如何设计最优化的状态机 前言:数字电路通常分为组合逻辑电路和时序电路, 组合逻辑电路outputs = F(current inputs) 时序电路outputs = F(current inputs,past inputs) 有限状态机就是时序电路的数学抽象,一个有限状态机系统包括inputs ,outputs, states .状态机分为同步状态机(synchronous)和异步状态机(asynchronous),异步状态机由于输出信号不稳定,所以不详细讨论,对绝大多数设计来说,用的最广泛的是同步状态机。下面主要讨论了同步状态机的设计。 一.状态机的基础知识 1.1. moore状态机和mealy状态机的区别: 2.1.1moore状态机输出只依赖于及其的当前状态,与输入信号无关。这是moore状态机的优点。下面是moore状态机的模型: moore状态机比较容易用数学的方式来分析,因此被更广泛的用在代数状态机理论中(algebraic FSM theory)。 Mealy状态机输出依赖于机器现在的状态和输入的值,如果输入改变,输出可以在一个时钟周期中将发生了改变。其模型如下: 图的说明:state memory :保存现在的状态(current state s(t) ) state transistion function :根据现态和输入x(t),s(t+1)来决定下一个状态。 Output function :根据s(t)和x(t)来决定最后的输出。 Mealy 状态机通常可以有更少的状态变量,因此在工程领域有更为广阔的应用,状态变量越少,则所需的存储单元就越少。

RS485串行通信电路设计

RS485串行通信接口电路的总体设计 在电参数仪的设计中,数据采集由单片机AT89C52负责,上位PC机主要负责通信(包括与单片机之间的串行通信和数据的远程通信),以及数据处理等工作。在工作中,单片机需要定时向上位PC机传送大批量的采样数据。通常,主控PC机和由单片机构成的现场数据采集系统相距较远,近则几十米,远则上百米,并且数据传输通道环境比较恶劣,经常有大容量的电器(如电动机,电焊机等)启动或切断。为了保证下位机的数据能高速及时、安全地传送至上位PC机,单片机和PC机之间采用RS485协议的串行通信方式较为合理。 实际应用中,由于大多数普通PC机只有常用的RS232串行通信口,而不具备RS485通信接口。因此,为了实现RS485协议的串行通信,必须在PC机侧配置RS485/RS232转换器,或者购买适合PC机的RS485卡。这些附加设备的价格一般较贵,尤其是一些RS485卡具有自己独特的驱动程序,上位PC机的通信一般不能直接采用WINDOW95/98环境下有关串口的WIN32通信API函数,程序员还必须熟悉RS485卡的应用函数。为了避开采用RS485通信协议的上述问题,我们决定自制RS485/RS232转换器来实现单片机和PC机之间的通信。 单片机和PC机之间的RS485通信硬件接口电路的框图,如下图1所示。 从图1可看出,单片机的通信信号首先通过光隔,然后经过RS485接口芯片,将电平信号转换成电流环信号。经过长距离传输后,再通过另一个RS485接口芯片,将电流环信号转换成电平信号。 图1单片机与PC机之间的RS485通信硬件接口电路的框图(略) 该电平信号再经过光电隔离,最后由SR232接口芯片,将该电平信号转换成与PC机RS232端口相兼容的RS232电平。由于整个传输通道的两端均有光电隔离,故无论是PC机还是单片机都不会因数据传输线上可能遭受到的高压静电等的干扰而出现“死机”现象。 2接口电路的具体设计 2-1单片机侧RS485接口电路的设计 单片机侧RS485接口电路如图2所示。 AT89C52单片机的串行通信口P3 0(RXD)和P3 1(TXD)的电平符合TTL/CMOS标准(逻辑“0”的电平范围为0V~0.8V,逻辑“1”的电平为2 4V~VCC),它们首先通过光电隔离器件6N137隔离,以保护单片机不受传输通道的干扰影响,其中T01和?T02是为了增加光隔输入端的驱动能力。光隔6N137的左侧电源与单片机相同,右侧必须采用另一组独立的+5V电源,且两组电源不能供电。 图2单片机侧RS485接口电路

单片机实验报告串行口

单片机实验报告 实验名称:串行通信实验 姓名:魏冶 学号:090402105 班级:光电一班 实验时间:2011-11-29 南京理工大学紫金学院电光系

一、实验目的 1、理解单片机串行口的工作原理; 2、学习使用单片机的TXD、RXD口; 3、了解MAX232芯片的使用。 二、实验原理 MCS-51单片机内部集成有一个UART,用于全双工方式的串行通信,可以发送、接收数据。它有两个相互独立的接收、发送缓冲器,这两个缓冲器同名(SBUF),共用一个地址号(99H),发送缓冲器只能写入,不能读出,接收缓冲器只能读出,不能写入。 要发送的字节数据直接写入发送缓冲器,SBUF=a;当UART接收到数据后,CPU从接收缓冲器中读取数据,a=SBUF;串行接口内部有两个移位寄存器,一个用于串行发送,一个用于串行接收。定时器T1作为波特率发生器,波特率发生器的溢出信号做接收或发送移位寄存器的移位时钟。TI和RI分别发送完数据和接收完数据的中断标志,用来向CPU发中断请求。 三、实验内容 1、学会DPFlash软件的操作与使用,以及内部内嵌的一个串口调试软件的使用。 2、用串口连接PC机和DP-51PROC单片机综合仿真实验仪。 3、编写一个程序,利用单片机的串行口发送0x55,波特率为9600。 程序设计流程图

4、程序下载运行后,可在PC机上的串口调试软件上(内嵌在DPFlash软件的串口调 试器,设置通信口为COM1口,波特率为9600,数据位8,停止位1)看到接收到“UUUUUU……”,出现这样的结果就基本达到要求。 (1)代码: #include void main() { long int i; SCON=0x40; PCON=0; TMOD=0x20; TH1=0xfd; TL1=0xfd; TI=1; TR1=1; star:for(i=0;i<5000;i++); SBUF=0x55; goto star; } (2)电路图; 5、在单片机接收到0x55时返回一个0x41,在PC机一端,以接收到0x41完成,波特率2400。

有限状态机设计

有限状态机设计 实验报告 一.实验题目 有机状态机设计 二.实验目的 掌握有机状态机设计的基本方法。 三.实验远离 状态机是指用输入信号和电路状态(状态变量)的逻辑函数去描述时序逻辑电路功能的方法,也叫时序机。有限状态机是指在设计电路中加入一定的限制条件,一般用来实现数字系统设计中的控制部分。 四.实验内容

实验内容一: 状态机是指用输入信号和电路状态(状态变量)的逻辑函数去描述时序逻辑电路功能的方法,也叫时序机。有限状态机是指在设计电路中加入一定的限制条件,一般用来实现数字系统设计中的控制部分。 根据时序电路输出信号的特点可将时序电路划为Mealy 型和Moore 型两种。Moore型电路中,输出信号仅仅取决于存储电路的状态。Mealy型电路中,输出信号不仅取决于存储电路的状态,而且还取决于输入变量。图1是某Mealy型电路的状态转换图,图中圆圈内的S0、S1等代表电路的状态,状态转换箭头旁斜杠“/”上边的数字代表输入信号,斜杠“/”下边的数字代表输出信号。假设电路的当前状态为S0,当输入信号为0时,电路的下一个状态仍为S0,输出信号为0;当输入信号为1时,电路的下一个状态为S1,输出为1。 图1 Mealy状态机 下面的程序中使用两个进程来描述该状态机。第一个进程负责状态转化,在CP上升沿到达时,当前状态(PresetState)向下一个状态(NextState)的转换;第二个进程负责检测输入信号(DIN)和当前状态(PresetState)的值,并由CASE-WHEN 语句决定输出信号(OP)和下一个状态值(NextState)的值。请补充下图中虚线“…”部分省略掉的程序,然后对完整程序进行编译,并用Tools->Netlist Views->State Machine Viewer和RTL Viewer工具查看该状态机的状态转移图和RTL原理图。

相关文档
最新文档