单片机串行通信实验报告.docx
- 文档编号:9720064
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:19
- 大小:233.76KB
单片机串行通信实验报告.docx
《单片机串行通信实验报告.docx》由会员分享,可在线阅读,更多相关《单片机串行通信实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
单片机串行通信实验报告
实验六串行通信
实验报告
班级:
学号:
姓名:
教师:
一、双机通信
我们U1为甲机,U2为乙机。
8位数据,并显示在8位数码管上。
由两套单片机试验装置(两个实验小组)共同完成该实验。
甲机发送本机(学生本人)学号后8位给乙机,乙机接收该电路如图1所示。
不加倍,单片机外部晶振频率为
要求串行通信方式为方式1,波特率为2400bit/s,
11.0592M。
实验电路图:
1、C源程序清单
甲机(U1)代码:
#include
#defineucharunsignedcharvoiddelay(uchari);
voidsend(uchartemp);
voidinit(void);
voidmain(void)
{
init();
delay(200);while
(1){
send('A');
send
(1);
send
(2);send
(1);
send(3);send
(2);
send
(2);
send(3);
send
(1);
/***********初始化***********/voidinit(void)
{
SCON=0x40;
TMOD=0x20;
TH1=0xf4;//
TL1=0xf4;
PCON=0x00;//
TI=0;
TR1=1;
}
//
//T1
不加倍
串口模式1只发送不接收
工作模式2
波特率2400
SMOD=0
//开定时中断
/*********发送函数**********/voidsend(uchartemp){
SBUF=temp;while(TI==0);
TI=0;delay(50);
}
/**********延时函数**********/voiddelay(uchari)
{
unsignedintj;for(i;i>0;i--)for(j=0;j<100;j++);
}
乙机(U2)代码:
#include
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()
{
init();
while
(1)
{
xianshi();
}
初始化///////////////
/////////////voidinit(void){
////////////串口中断接收程序////////////
voidreceive()interrupt4{
temp=SBUF;while(RI==0);RI=0;
if(temp=='A')
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=OXff;//设定P1,P2推挽输出
while
(1)
{
for(i=1;i<9;i++)
{
//取显示段码
//取位选码
//ram[i]=tab[i];dm=distable[tab[i]];wx=wi[i-1];
P2=distable[ram[k]];
P1=wi[k];
P2=0x00;
delay
(1);
}*/
延时函数/////////////
//////////////
voiddelay(uchart)
{ucharx,y,z;for(x=t;x>0;x--)for(y=25;y>0;y--)for(z=100;z>0;z--);
2、仿真结果
JI
p:
*vd
n:
mips^an-SMT:
ram*r2L>«
UC-
4br>MJ
ndPH'-f,
F日Efl
■fxiri-rr-
ravin
■aarTTi
pJm-IhliilTWIPTTT
逼一;.住器迹■…对詩丘■■■
■■
—'■・■5
.;■jj-g
*"Ht~~I~1—ui
re
■HN-BrzarII
22Q
ri-Z7u--ri
nA
qva时W.AT-—
4
—也
JiU/u
E-
■iq
»1.1
■IZ
扒*3
*Hj*
"IJ-
"UK-a
•Mr
■3IiWTn
MHTT
P3E
PUTl
"沁*
■aj-^
•LrtB--•
■■Il
5t._..
FB
A
.f£._、_IH■"
3、问题分析
在数码管显示这块,刚开始是这样写的
rajklO'
工丄r>=a
raniC1'
=b
UaJTL
[2[
=c
rain..
[31
二d
Lam..
⑷
=e
ram.
【51
二f
ram.
【6]
二S
rant.
[7]
二h
ajR⑻;
fora=0:
k k++) P2=dista.bleLramEk]]: Pl=wiEk]; P£=OhOO: ilelayCl); }* 在Proteus上仿真的时候是没有任何问题的,但是后来在实验板上数码管显示特别暗, 几乎看不出来有显示数字,想了想可能是没有加推挽输出,然后就将推挽输出代码加入,然后重新下载,但是结果和之前没什么不同。 //mltiaO0口二标: 隹*01二览担! 10=输入;11二开掃辅出 P1M1=OKOO; piwa=OKff; P2M1=OHOO; P2Ma=OSf£: //iS^PbP24e^输出 后来想既然这样的话,那就不是推挽的问题了,是这段显示代码有问题,于是将显示代码改为数码管的动态扫描。 I"""/"""数码管显示"A////// ■uchaui,远収; U i /Al: TiiOou=标准for推挽;IB输几: 11二开捅输出 Fimi=0X00; flW=QX理; P2mi=OXDO: 理IW=OXff;〃设定Fl,F2推换输出 ■whileCl) 这样的话,在Proteus上仿真和实验板上都能出来结果了。 二、单片机与PC机通信 单片机向PC机发送数据。 单片机向PC机重复发送本机(学生本人)学号,发送波特率为1200,采用方式1,单片机外部晶振频率为11.0592M。 Proteus仿真电路: razLOdra.PAhlrana E.wr Ti- P7HM■』I'i*rirua P2Ti1P程5*1a PJWAI-b pzrxiE -g- 运 TT rZJHKhHJFfl-aarraraamrpj*inrjrrn n.-TT HIP ■-rtrr I1H II H-b.汁 W TTh TXiT PXhl 4I Wfr c 0 g A* -Tz^r- Cl■ -fl- 'tA-- 并ft标i1 兀rr塑号 ►™aal 二1|Nid=Al J -e^isrftatB- OnAGrs: 二1[HideAl T Fai敢 NONE 〒||TilL削 J EkipRih- 1 d[彳心炖 I SerwJXJWMl■卜 No 讨1Titter J PC0■科0 [NJt5pe? riecl J AdminoedRcp«rti*j; Pcldii'v T1NHindi d OtherH-Dp? rties: 肛消 flI* 71H Pioir- T2H ■TTII"" Ch : IJ2 Ticir Rill TObT 当前云件不亜弓仿胃-当版ft不用于PCEUJife一債服$方盘融所有国准 14 13 一'…计 ■■f■gijg-gE|rI1: ■I・II £d匸H 1、C源程序清单 #include #defineucharunsignedcharvoiddelay(uchari); voidsend(uchartemp); voidinit(void); voidmain(void){init(); //delay(50);while (1){ send(0x31); send(0x32);send(0x31); send(0x33);send(0x32); send(0x32); send(0x33); send(0x31); send(0x20); /*********发送函数**********/voidsend(uchartemp){ SBUF=temp; while(TI==0); TI=0;delay(50); } /**********延时函数**********/voiddelay(uchari) { unsignedintj; for(i;i>0;i--) for(j=0;j<100;j++); } 2、运行结果 Proteus仿真: Pld^ll PIwl Pli-H■l*h->l«niiA-a 卵丄■ rrKt p-iBTni巧ElniMK 论黑扇亘. 宀亠: "專噩-罠—— --U- 萨二. PC机: I程序文件EEFEDM交件I畧口助手嗅订仿畀设盍: |范例程序迭型/怕格/样品I,II, 接收響冲区 文玮: 複武「砸頤式〕;^空接收区I[保存核收埶据] 1213^23112132231 1£132231 121: 3££31 1£1^££31 1213空31 1213££3112悟22311£13223112132231TEldESdl121322 12132231 12132231 12132231 12132231 12132231 1? 13££31 12132231 1Z13E231 12132231 1Z13££^1 绘送送冲点I文不複武"应工樟式 [青空芨送区]I傑存境送数 多学串发送 发送HEJT E=4 叵二E GZ H二 叵二 武二 0二=Eh 〕发送文件]|[S送敎据11自动能J周期血)100 「«空全部埶据I]自动猫开岌送]间偏□ms ASCII码。 串口1良特姿1校验位[无检验T …侄口I□嗝程完成 天团串」□将ir/U7-5般畫対标准USB捋串口 3、问题分析 这个程序其实和上一个的甲机程序大同小异,需要注意的是,发送的是 三、问题解答 1、在该实验中,单片机串行口工作在什么工作方式下? 说明该工作方式的特点。 答: 串行口是工作在方式1。 方式1特点: (1)、8位UART接口。 (2)、帧结构为10位,包括起始位(为0),8位数据位,1位停止位。 (3)、波特率由指令设定,由T1的溢出率决定。 2、波特率是什么? 怎样设置单片机串口通讯的波特率? 如果实验要求通讯波特率为 4800bps,怎样修改程序? 答: 模拟线路信号的速率,以波形每秒的振荡数来衡量。 如果数据不压缩,波特率等 于每秒钟传输的数据位数,如果数据进行了压缩,那么每秒钟传输的数据位数通常大于调制速率,使得交换使用波特和比特/秒偶尔会产生错误。 在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数 称为码元传输速率,简称波特率。 波特率是指数据信号对载波的调制速率,它用单位时间内 载波调制状态改变的次数来表示(也就是每秒调制的符号数),其单位是波特 (Baud,symbol/s)。 波特率是传输通道频宽的指标。 波特率设置: 串行口的四种工作方式对应三种波特率。 由于输入的移位时钟的来源不 如果是4800的波特率,将初始化程序里的TH1、TL1的值改为0xfa即可 水********初贻化**#**: <*****/ Voidinit(void) 3COIT=0=c4O.BDD二血20: THl=0ixf4;TLl=0Kf4;PCOIT=OhOO: Tr=o: TR1=1; "串口模式1//Tl工作槿弍2Z/*tl$24OO //不加倍SFOD=0 11.0592MHZ的晶振 标准波特率实际波特率 150 150 0X41 200 200 0X70 300 300 0XA0 600 600 0XD0 1200 1200 0XE8 2400 2400 0XF4 4800 4800 0XFA 7200 7200 0XFC 9600 9600 0XFD 14400 14400 0XFE 28800 28800 0XFF 定时器预置数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 串行 通信 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)