AD课程设计通信.docx
《AD课程设计通信.docx》由会员分享,可在线阅读,更多相关《AD课程设计通信.docx(18页珍藏版)》请在冰豆网上搜索。
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++);
}
}
七、实验总结
通过这次实验熟练了单片机最小系统,掌握了硬件电路设计和程序编写。
认真细心的完成了安装焊接。
实验过程中自己完成调试,当时出了点小问题,找了好长时间也没找到,后来在同学的帮助下顺利发现问题,完成了调试。
让我了解了设计电路的程序,要设计一个电路总要先用仿真仿真成功之后才实际接线的。
但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。
而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。
所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。
通过这次学习,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。