单片机串行通信实验报告Word文档格式.docx

上传人:b****1 文档编号:13518520 上传时间:2022-10-11 格式:DOCX 页数:16 大小:272.47KB
下载 相关 举报
单片机串行通信实验报告Word文档格式.docx_第1页
第1页 / 共16页
单片机串行通信实验报告Word文档格式.docx_第2页
第2页 / 共16页
单片机串行通信实验报告Word文档格式.docx_第3页
第3页 / 共16页
单片机串行通信实验报告Word文档格式.docx_第4页
第4页 / 共16页
单片机串行通信实验报告Word文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

单片机串行通信实验报告Word文档格式.docx

《单片机串行通信实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机串行通信实验报告Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

单片机串行通信实验报告Word文档格式.docx

}

}

 

/***********初始化***********/

voidinit(void)

SCON=0x40;

//串口模式1只发送不接收

TMOD=0x20;

//T1工作模式2

TH1=0xf4;

//波特率2400

TL1=0xf4;

PCON=0x00;

//不加倍SMOD=0

TI=0;

TR1=1;

//开定时中断

/*********发送函数**********/

voidsend(uchartemp)

SBUF=temp;

while(TI==0);

delay(50);

/**********延时函数**********/

voiddelay(uchari)

unsignedintj;

for(i;

i>

0;

i--)

for(j=0;

j<

100;

j++);

乙机(U2)代码:

#defineuintunsignedint

voiddelay(uchart);

voidxianshi(void);

ucharcodedistable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//共阴数码管段码

ucharcodewi[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

uchartab[9]={0,0,0,0,0,0,0,0,0};

uchari=0,temp;

uinta,b,c,d,e,f,g,h;

voidmain()

xianshi();

/////////////初始化///////////////

PCON=0x00;

//不加倍SMOD=0

SCON=0x50;

//设置串口方式1且允许串口接收REN=1

TMOD=0x20;

//设置T1为方式2

TH1=0xf4;

TL1=0xf4;

//设置波特率2400

TR1=1;

//开启定时器1

ES=1;

//允许串行口中断

EA=1;

//允许全局中断

////////////串口中断接收程序////////////

voidreceive()interrupt4

temp=SBUF;

while(RI==0);

RI=0;

if(temp=='

temp=0;

tab[i]=temp;

i++;

if(i==9)

i=0;

a=tab[1];

b=tab[2];

c=tab[3];

d=tab[4];

e=tab[5];

f=tab[6];

g=tab[7];

h=tab[8];

/////////////数码管显示/////////////

voidxianshi(void)

uchari,dm,wx;

//m1:

m000=标准;

01=推挽;

10=输入;

11=开漏输出

P1M1=0X00;

P1M0=0Xff;

P2M1=0X00;

P2M0=0Xff;

//设定P1,P2推挽输出

for(i=1;

i<

9;

i++)

{

//ram[i]=tab[i];

dm=distable[tab[i]];

//取显示段码

wx=wi[i-1];

//取位选码

P1=0x00;

//关显示

P2=dm;

//段码赋给P2口

P1=wx;

//点亮位选的那个数码管

delay

(1);

//延时

}

/*uchark,ram[8];

ram[0]=a;

ram[1]=b;

ram[2]=c;

ram[3]=d;

ram[4]=e;

ram[5]=f;

ram[6]=g;

ram[7]=h;

for(k=0;

k<

8;

k++)

P2=distable[ram[k]];

P1=wi[k];

P2=0x00;

delay

(1);

}*/

//////////////延时函数/////////////

voiddelay(uchart)

ucharx,y,z;

for(x=t;

x>

x--)

for(y=25;

y>

y--)

for(z=100;

z>

z--);

}

2、仿真结果

3、问题分析

在数码管显示这块,刚开始是这样写的

在proteus上仿真的时候是没有任何问题的,但是后来在实验板上数码管显示特别暗,几乎看不出来有显示数字,想了想可能是没有加推挽输出,然后就将推挽输出代码加入,然后重新下载,但是结果和之前没什么不同。

后来想既然这样的话,那就不是推挽的问题了,是这段显示代码有问题,于是将显示代码改为数码管的动态扫描。

这样的话,在Proteus上仿真和实验板上都能出来结果了。

二、单片机与PC机通信

单片机向PC机发送数据。

单片机向PC机重复发送本机(学生本人)学号,发送波特率为1200,采用方式1,单片机外部晶振频率为11.0592M。

Proteus仿真电路:

由于是1200的波特率,需要注意的是:

将这里要改为1200

reg51.h>

//delay(50);

send(0x31);

send(0x32);

send(0x31);

send(0x33);

send(0x20);

//串口模式1只发送不接收

TH1=0xe8;

//波特率1200

TL1=0xe8;

2、运行结果

Proteus仿真:

PC机:

这个程序其实和上一个的甲机程序大同小异,需要注意的是,发送的是ASCll码。

三、问题解答

1、在该实验中,单片机串行口工作在什么工作方式下?

说明该工作方式的特点。

答:

串行口是工作在方式1。

方式1特点:

(1)、8位UART接口。

(2)、帧结构为10位,包括起始位(为0),8位数据位,1位停止位。

(3)、波特率由指令设定,由T1的溢出率决定。

2、波特率是什么?

怎样设置单片机串口通讯的波特率?

如果实验要求通讯波特率为4800bps,怎样修改程序?

模拟线路信号的速率,以波形每秒的振荡数来衡量。

如果数据不压缩,波特率等于每秒钟传输的数据位数,如果数据进行了压缩,那么每秒钟传输的数据位数通常大于调制速率,使得交换使用波特和比特/秒偶尔会产生错误。

在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。

波特率是指数据信号对载波的调制速率,它用单位时间内载波调制状态改变的次数来表示(也就是每秒调制的符号数),其单位是波特(Baud,symbol/s)。

波特率是传输通道频宽的指标。

波特率设置:

串行口的四种工作方式对应三种波特率。

由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。

方式0的波特率=fosc/12

方式2的波特率=((2^SMOD)/64)•fosc

方式1的波特率=((2^SMOD)/32)•(T1溢出率)

方式3的波特率=((2^SMOD)/32)•(T1溢出率)

注意:

SMOD为PCON寄存器的最高位(即PCOM<

7>

)。

T1溢出率=fosc/{12×

[256-(TH1)]}--将该公式代人方式1或3

最后推出公式:

TH1=256-(fosc*2^SMOD)/(baudrate*12*32)

如果你用方式2(波特率=((2^SMOD)/64)•fosc)的话,12M的晶振就不能得到9600波特率了(除非你改变你的晶振),所以你只能选择方式1或3。

而且12M的晶振在串口传输时会有误差,就如你上面算的那样结果会有小数点,TH1又只能是整数的,所以传输时会有误差。

如果是4800的波特率,将初始化程序里的TH1、TL1的值改为0xfa即可

11.0592MHZ的晶振

标准波特率实际波特率定时器预置数

1501500X41

2002000X70

3003000XA0

6006000XD0

120012000XE8

240024000XF4

480048000XFA

720072000XFC

960096000XFD

14400144000XFE

28800288000XFF

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1