AD课程设计通信.docx

上传人:b****8 文档编号:10982046 上传时间:2023-02-24 格式:DOCX 页数:18 大小:293KB
下载 相关 举报
AD课程设计通信.docx_第1页
第1页 / 共18页
AD课程设计通信.docx_第2页
第2页 / 共18页
AD课程设计通信.docx_第3页
第3页 / 共18页
AD课程设计通信.docx_第4页
第4页 / 共18页
AD课程设计通信.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

AD课程设计通信.docx

《AD课程设计通信.docx》由会员分享,可在线阅读,更多相关《AD课程设计通信.docx(18页珍藏版)》请在冰豆网上搜索。

AD课程设计通信.docx

AD课程设计通信

基于单片机的系统设计

 

题目AD转换

学院电子信息工程学院

学科门类单片机

班级08通信

指导教师庞姣

小组成员李俊花

王阳茜

胡兵

曹艳

2011年12月08日

 

一、实验目的

(1)学习基于单片机的系统设计;

(2)学习单片机电路设计和制版工艺;

(3)学会数据采集电路设计;

(4)学会VB编写上位机,实现和单片机通信;

(5)学习单片机的软件设计;

二、实验要求

(1)要求每位同学设计单片机最小系统;

(2)每位同学自己设计硬件电路设计和程序编写;

(3)每位同学自己完成调试;

(4)认真细心的安装焊接。

三、使用的主要器材

(1)单片机,TLC549及其他元件一套;

(2)工具一套;

(3)PC机一台;

四、TLC549简介

4.1引脚排列

⏹/CS:

片选低有效

⏹GND:

⏹VCC:

电源

⏹ANALOGIN:

模拟信号输入

⏹DATAOUT:

数据串行输出

⏹I/OCLOCK:

外接输入输出时钟

⏹REF+:

正基准电压输入端,REF+大于等于2.5V小于等于Vcc+0.1V

⏹REF-:

负基准电压输入端,REF+大于等于-0.1V小于等于2.5V,切要求REF+-REF-大于等于1V

4.2内部结构

4.3时序分析

TLC549是SPI三总线器件,其时序见上图,当/CS为高电平时候,AD正在进行内部转换,转换时间大概为17us,当/CS有高电平变为低电平时候,这时候上次的采样转换结果的最高位A7首先出现在DATAOUT端,其余7位将会在7个I/OCLOCK的下降沿时候出现在DATAOUT端,在第4个I/OCLOCK的下降沿启动采样保持电路,开始采样模拟输入量,并在第8个I/OCLOCK的下降沿开始保持,这时候,/CS由低电平变为高电平,在其上升沿开始启动AD转换,这时候/CS需保持17us,保证本次的采样转换完成,然后按上次一样步骤,输出AD转换结果和输入模拟采样。

五、上位机

5.1上位机简介

上位机软件通过串口,实现单片机和PC机的通信,以简单可视化的窗口,实现对单片机的监控。

本次课程设计采用VB编写上位机,VB拥有功能强大的可视化窗口控件和串口控件MicrosoftCommControl6.0,从而减少了编写上位机的难度。

5.2上位机思路

应为本次的课程设计要求,只是在PC机上通过串口显示电压,那么就不需要上位机通过串口发送指令,控制单片机。

所以,编写上位机时候,我没有编写发送部分的指令。

其次,本次采集的电压,电压范围为0v—5v,为充分利用数码管,我采用了一位整数和五位小数,并且在单片机内完成了二进制到BCD码的转换。

在编写上位机传送程序时候,我想发送一针就包括小数和整数,这样编写单片机发送程序和上位机接收程序,就会简单,并且发送的是十进制BCD,这样就减少了上位机的运算。

下位机思路:

因为一针是8为数据,那么最大为255,如果想一针包含两位小数,那么就需要把整数扩大100,第一位小数扩大10倍,然后相加:

一针=整数位*100+第一位小数位*10+第二位小数位,因为采集的电压范围为0v—5v,这时候就由可能超出255的范围,如果一针包含一位整数和一位小数,那么他的范围为0v—50v,这时候不会超出255的范围,所以我发送的一针就包含一位整数和一位小数,即:

一针=整数位*10+第一位小数位。

采用9600波特率,1位开始为,1位结束位,8位数据位,没有校验位。

上位机思路:

就收一针存于A,然后和10整除,结果存于B,然后C=A-10*B,那么B就是整数部分,C就是小数部分,显示即可

5.3上位机设计界面

5.4上位机程序

Publicstyle1AsInteger

PublicstyleAsInteger

PrivateSubForm_Load()

IfMSComm1.PortOpen=TrueThen

MSComm1.PortOpen=False

Else

EndIf

Combo1.AddItem"COM1"

Combo1.AddItem"COM2"

Combo1.AddItem"COM3"

Combo1.AddItem"COM4"

Combo1.AddItem"COM5"

Combo1.AddItem"COM6"

Combo1.AddItem"COM7"

Combo1.AddItem"COM8"

Combo1.AddItem"COM9"

Combo1.AddItem"COM10"

Combo1.AddItem"COM11"

Combo1.AddItem"COM12"

Combo1.ListIndex=0

MSComm1.CommPort=3

MSComm1.Settings="9600,n,8,1"

Command2.Caption="打开串口"

Shape1.FillColor=&HFFFFC0

Option2.Value=True

Combo2.AddItem"256000"

Combo2.AddItem"128000"

Combo2.AddItem"115200"

Combo2.AddItem"57600"

Combo2.AddItem"38400"

Combo2.AddItem"28800"

Combo2.AddItem"19200"

Combo2.AddItem"9600"

Combo2.AddItem"4800"

Combo2.AddItem"2400"

Combo2.AddItem"1200"

Combo2.AddItem"600"

Combo2.AddItem"300"

Combo3.AddItem"无None"

Combo3.AddItem"奇Odd"

Combo3.AddItem"偶Even"

Combo4.AddItem"4"

Combo4.AddItem"5"

Combo4.AddItem"6"

Combo4.AddItem"7"

Combo4.AddItem"8"

Combo5.AddItem"1"

Combo5.AddItem"2"

MSComm1.InBufferSize=24

MSComm1.OutBufferSize=10

style=0

style1=0

EndSub

PrivateSubCombo1_Click()

IfMSComm1.PortOpen=TrueThen

MSComm1.PortOpen=False

EndIf

MSComm1.CommPort=Combo1.ListIndex+1

EndSub

PrivateSubCommand1_Click()

Text1.Text=""

EndSub

PrivateSubCommand2_Click()

OnErrorGoTouerror

IfCommand2.Caption="关闭串口"Then

MSComm1.PortOpen=False

Command2.Caption="打开串口"

Shape1.FillColor=&HFFFFC0

Else

MSComm1.PortOpen=True

Command2.Caption="关闭串口"

Shape1.FillColor=&HFF

EndIf

ExitSub

uerror:

msg$="无效端口号"

Title$="串口调试助手"

X=MsgBox(msg$,48,Title$)

EndSub

PrivateSubMSComm1_OnComm()

DimBytReceived()AsByte

StaticstrBuffAsString

StaticstrBuff1AsString

StaticslyAsSingle

DimiAsInteger

SelectCaseMSComm1.CommEvent

CasecomEventRcOver

Text1.Text=""

ExitSub

CasecomEvReceive

MSComm1.InputLen=1

strBuff=MSComm1.Input

Text1.Text=""

IfMSComm1.InputMode=comInputModeBinaryThen

BytReceived()=strBuff

Fori=0ToUBound(BytReceived)

IfLen(Hex(BytReceived(i)))=1Then

strData=staData&"0"&Hex(BytReceived(i))&""

Else

strData=strData&Hex(BytReceived(i))&""

EndIf

Next

strBuff1=strData

sly=CLng("&H"&strData)

Ifstyle=1Then

Ifstyle1=0Then

Text1.Text=Str(Format(sly,"0.0"))&"D"

Else

Text1.Text=Str(Format(sly/10,"0.0"))&"V"

EndIf

Else

Text1=Text1&strData&"H"

strData=""

EndIf

Else

Text1=Text1&strBuff&"$"

EndIf

EndSelect

EndSub

PrivateSubOption1_Click()

MSComm1.InputMode=comInputModeBinary

Text1.MaxLength=6

style1=1

style=1

EndSub

 

PrivateSubOption2_Click()

MSComm1.InputMode=comInputModeBinary

Text1.MaxLength=3

style=0

EndSub

PrivateSubOption3_Click()

MSComm1.InputMode=comInputModeText

Text1.MaxLength=0

EndSub

PrivateSubOption4_Click()

MSComm1.InputMode=comInputModeBinary

Text1.MaxLength=6

style=1

style1=0

EndSub

六、实验步骤

6.1设计硬件电路

6.1.1数据采集电路设计

6.1.2单片机外围电路设计

6.1.3LED驱动电路设计

6.1.4串行通讯电路

6.1.5电源电路

 

6.2根据设计电路清点全套零件,并负责保管;

6.3对元器件引线或引脚进行镀锡处理,注意镀锡层未氧化(可焊性好)时可以不再处理;

6.4检查印制板的铜箔线条是否完好,有无断线及短路,特别注意边缘;

6.5安装元器件,元器件安装质量及顺序直接影响整机质量及成功率,合理的安装需要思考及经验;

6.6软件设计

#include"reg52.h"

#include"intrins.h"

#include"math.h"

#defineucharunsignedchar

#defineuintunsignedint

#defineulintunsignedlongint

sbitIO=P1^0;

sbitDATA=P1^1;

sbitCS=P1^2;

ucharSMG[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数码管显示译码

uchardata_in=0;//接受DATA数值

uchardata_pc=0;//串口通信数据存储区

uchardata_out[]={0,0,0,0,0,0};

voiddelay()//数码管动态扫描延时,3ms

{uintj,i;

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

for(j=110;j>0;j--);

}

voidSM()//动态扫描数码管

{ucharm;

P2=0;

for(m=0;m<6;m++)

{

if(m==0)

P0=SMG[data_out[m]]|0x80;//小数点

else

P0=SMG[data_out[m]];

delay();

P0=0;//数码管消隐

P2+=1;

}

}

voidTLC549()//接受TLC549的采集电压

{ucharn,k;

CS=1;

IO=0;

data_in=0;

CS=0;

_nop_();

data_in=data_in|DATA;

_nop_();

_nop_();

for(n=0;n<7;n++)

{

IO=1;

for(k=5;k>0;k--);

IO=0;

data_in=data_in<<1;

if(DATA==1)

data_in=data_in|0x01;

for(k=5;k>0;k--);

}

IO=1;

for(k=5;k>0;k--);

IO=0;

CS=1;

}

voidBCD()//转换成对应的BCD码

{floaty;

ulintx;

y=0.01961*data_in;

x=(ulint)(100000*y);

data_out[0]=(uchar)(x/100000);

data_out[1]=(uchar)((x-data_out[0]*100000)/10000);

data_out[2]=(uchar)(x/1000-data_out[0]*100-data_out[1]*10);

data_out[3]=(uchar)(x/100-data_out[0]*1000-data_out[1]*100-data_out[2]*10);

data_out[4]=(uchar)(x/10-data_out[0]*10000-data_out[1]*1000-data_out[2]*100-data_out[3]*10);

data_out[5]=(uchar)(x-data_out[0]*100000-data_out[1]*10000-data_out[2]*1000-data_out[3]*100-data_out[4]*10);

data_pc=data_out[0]*10+data_out[1];

}

voidcom(void)interrupt4

{

RI=0;

EA=0;

}

voidmain()

{

SCON=0x40;

PCON=0x00;

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

EA=1;

ES=1;

ET1=1;

while

(1)

{uchart,h;

TR1=1;

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

{

SM();

TLC549();

BCD();

}

EA=1;

SBUF=data_pc;

for(t=0;t<180;t++);

}

}

七、实验总结

通过这次实验熟练了单片机最小系统,掌握了硬件电路设计和程序编写。

认真细心的完成了安装焊接。

实验过程中自己完成调试,当时出了点小问题,找了好长时间也没找到,后来在同学的帮助下顺利发现问题,完成了调试。

让我了解了设计电路的程序,要设计一个电路总要先用仿真仿真成功之后才实际接线的。

但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。

而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。

所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。

通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。

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

当前位置:首页 > 人文社科 > 法律资料

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

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