单片机串行通信实验报告Word文档格式.docx
- 文档编号:13518520
- 上传时间:2022-10-11
- 格式:DOCX
- 页数:16
- 大小:272.47KB
单片机串行通信实验报告Word文档格式.docx
《单片机串行通信实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机串行通信实验报告Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
}
}
/***********初始化***********/
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 串行 通信 实验 报告