微机原理与接口课程设计远程数据采集系统.docx

上传人:b****0 文档编号:18412199 上传时间:2023-08-16 格式:DOCX 页数:18 大小:113.42KB
下载 相关 举报
微机原理与接口课程设计远程数据采集系统.docx_第1页
第1页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第2页
第2页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第3页
第3页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第4页
第4页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第5页
第5页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第6页
第6页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第7页
第7页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第8页
第8页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第9页
第9页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第10页
第10页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第11页
第11页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第12页
第12页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第13页
第13页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第14页
第14页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第15页
第15页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第16页
第16页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第17页
第17页 / 共18页
微机原理与接口课程设计远程数据采集系统.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

微机原理与接口课程设计远程数据采集系统.docx

《微机原理与接口课程设计远程数据采集系统.docx》由会员分享,可在线阅读,更多相关《微机原理与接口课程设计远程数据采集系统.docx(18页珍藏版)》请在冰点文库上搜索。

微机原理与接口课程设计远程数据采集系统.docx

微机原理与接口课程设计远程数据采集系统

HUNANCITYUNIVERSITY

微机原理与接口

课程设计

报告

设计题目:

远程数据采集系统

专业:

计算机科学与技术(嵌入式)

学生姓名:

班级学号:

分组成员:

指导教师:

2012年6月15日

Xxxxx班微机原理与接口课程设计

一、设计时间

2012年6月11日至2012年6月15日

二、设计地点

一实验楼321室

三、设计目的

1、掌握微机原理以及接口硬件开发平台的使用方法,利用现有的MFID实验平台和X86PC机,组成一个微机应用系统。

2、掌握基本接口电路的综合应用。

3、掌握接口电路的驱动程序设计与应用程序编制,学会调试与测试接口程序的一般方法。

4、通过数据采集系统设计与制作,深入了解与掌握利用RS-232或RS-485串行通信标准进行远距离传送的原理和方法。

四、设计小组成员

五、指导老师

六、设计课题

远程数据采集系统

要求:

甲机通过RS-232接口接受乙机一侧采集的数据(A/D转换结果),以文件方式传送。

实验资源配置:

1.PC兼容机

2.MFID多功能微机实验平台

3.MF2KI集成开发环境

4.面包板或外设功能模块板

5.安装工具

七、基本思路及关键问题的解决方法

基本思路:

1.进行数据远距离传送控制系统电路硬件设计,画出电路原理图、PCB图或元器件布线图。

2.安装元器件。

3.进行数据远距离传送控制程序设计。

4.利用计算机和微机原理与接口实验箱自行调试程序。

关键问题的解决方法:

由于三人都学得不好,因此遇到了挺多问题,比如不懂8255,8253和8251的原理是怎样的,再就是接线和程序的方面,对于我们三个也都存在困难,为了解决这些困难,我们有多查资料,问同学和老师,花费着尽量多地时间在这个课程设计上面...

八、算法及流程图(硬件框图)

发送端

接收端

采集信息流程图

发送数据流程图

发送端流程图

接收端流程图

10、课程设计心得体会

编写的程序不但要拿来使用,还要给别人查看,以便代码的维护。

所以代码编写的风格尽量规范,清晰。

变量要尽量少定义,结构夜采用简单的。

代码较为冗余,可读性较差,可以多添加一些提示语句以及注释。

在这次课程设计中懂得了一个程序地好坏关键在于算法是否优秀,一个好的优秀的算法可以使我们的程序更加完善,安全性更高以及有更高的效率。

这次设计中我发现了自己的许多不足,如。

十一、源程序及参考文献

源程序

文件发送端:

#include

#include

#include

#include

#definedata510x308//8251A数据口

#definectrl510x309//8251A命令/状态口

#definectrl550x303//8255命令口

#definedata550x300//8255A数据口

#definetimer20x306//8253的2号计数器端口

#definetimctl0x307//8253命令口

#definefactor16//波特率因子16

intchoose_channel();//选择通道函数

intcollect();//数据采集函数

voidint51();//初始化8251a

voidset_bps(intbps);//8253记数初值计算与装入

voidtransmit(intdata);//数据发送函数

unsignedlongintclk=1919828;//MFID-5型平台板上时钟为1.919828MHZ

inttable[8]={110,150,300,600,1200,2400,4800,9600};//定时常数数组

voidmain(void)

{

intch,data,status;

charn,end;

FILE*fp;

charfilename[10];

inti;

end='';

printf("Inputfilename:

");

scanf("%s",filename);

if((fp=fopen(filename,"w"))==NULL)

{

printf("Openfileerror!

\n");

exit(0);

}

printf("InputA/Dnumberof\n");

ch=choose_channel();

for(i=0;i<100;i++)

{

data=collect(ch);

fputc(data,fp);

printf("%d",data);

}

fclose(fp);

printf("intputbts:

\n");

printf("\n0---110\n1---150\n2---300\n3---600\n4---1200\n5---2400\n6---4800\n7---9600\n");

n=getchar();

while(n<'0'||n>'7')

{

printf("failagaint!

\n");

n=getchar();

}

n=n-48;

set_bps(table[n]);

int51();

outportb(ctrl55,0x80);

outportb(ctrl55,0x0d);//置PC6=1,打开8253的GATE2

printf("beginconvert,endwithanykey!

\n");

if((fp=fopen(filename,"r"))==NULL)

{

printf("openfilefail!

\n");

exit(0);

}

while

(1)

{

status=inportb(ctrl51);//获取8253TXRDY状态

if(kbhit())//若无键按下,则转接收

{

outport(ctrl55,0x0c);//关闭8253

return;

}

els

{

if(((status&0x01)!

=0))//已准备好,则将键入的字符发送出去

data=fgetc(fp);

outportb(data51,data);

}

}

 

}

intchoose_channel()

{

intc;

do

{

c=getchar();//输入通道号

c=c-48;/*将读入的ASCII码转换成对应的数字*/

if(c<0||c>7)

printf("\nTheA/DchannelNOiswrong!

\nBesureitisbetween0and7!

\nPleaseinputtheNOagain!

:

");//有误!

else

break;//通道号正确时,跳出循环

}while

(1);

return(c);//返回正确的通道号

}

intcollect(intch)

{

intpa,pc4;

outportb(ctrl55,0x88);//初始化8255,A口输出

outportb(data55,ch);//送通道号至A口

outportb(ctrl55,0x03);//pc1置1ALE=1进行地址锁存

outportb(ctrl55,0x98);//重写8255方式字,A口输入,C口低四位输出,C口高四位输入

outportb(ctrl55,0x01);

outportb(ctrl55,0x02);//使PC0START置高发启动信号

outportb(ctrl55,0x00);//使PC0置低START下降沿开始转换

do

{

pc4=inportb(0x302)&0x10;

}while(pc4==0);//查询PC4EOC的状态,直至为高电位,即,转换完成

outportb(ctrl55,0x05);//pc2=1/OE=1允许读转换结果

pa=inportb(data55);//读转换结果

returnpa;

}

 

voidint51()

{

outportb(ctrl51,0x00);

delay(100);

outportb(ctrl51,0x40);//8251复位

delay(100);

outportb(ctrl51,0x4e);//8251A方式命令

delay(100);

outportb(ctrl51,0x27);//8251A工作命令

}

voidset_bps(intbps)

{

inti,sendhigh,sendlow;

i=clk/bps;

i=i/factor;//计算计数初值

sendhigh=(i>>8)&0x00ff;

sendlow=i&0x00ff;

outportb(timctl,0xb6);//8253计数器2方式3

outportb(timer2,sendlow);//装计数初值低字节

outportb(timer2,sendhigh);//装计数初值高字节

}

文件接收端:

#include//kbhit();

#include//printf();

#include//delay();

#include

#definedata510x308//8251A数据口

#definectrl510x309//8251A命令/状态口

#definectrl550x303//8255命令口

#definetimer20x306//8253的2号计数器端口

#definetimctl0x307//8253命令口

#definefactor16//波特率因子16

//unsignedlongintclk=1193182;//8251输入时钟频率(十六进制表示)MFID-4型平台板上时钟为1.193182MHZ

unsignedlongintclk=1919828;//MFID-5型平台板上时钟为1.919828MHZ

inttc_table[8]={110,150,300,600,1200,2400,4800,9600};//定时常数数组

voidint51();//初始化8251a

voidset_bps(intbps);//8253-5记数初值计算与装入

voidmain()

{

intgetvalue=0;

inttemp=-1;

intsletter,rletter,status;

charfilename[10];

FILE*fp;

for(;;)

{

clrscr();

printf("inputfilename:

");

scanf("%s",filename);

printf("\n0---110\n1---150\n2---300\n3---600\n4---1200\n5---2400\n6---4800\n7---9600\n");

getvalue=getch();

if((getvalue<'0')||(getvalue>'7'))

{

printf("\nInputerror!

tryagainplease!

\n");//errormessage

getch();

continue;

}

else

{

break;

}

}

temp=getvalue-'0';

set_bps(tc_table[temp]);

int51();

printf("\nnowentertheserialcommunication");

printf("\nendwith'Esc'\n");

outportb(0x303,0x80);//置PC6=1,打开8253-5的GATE2

outportb(0x303,0x0d);

while

(1)

{

if((fp=fopen(filename,"w"))==NULL)

{

printf("openfilefail!

\n");

exit(0);

}

 

if(kbhit())

{

if((sletter=getche())==0x1b)//是ESC?

是,则退出

{

outport(ctrl55,0x0c);//关闭8253

return;

}

}

else

{

status=inportb(ctrl51);//已准备好,即有数据传送过来,则接收1个字符

if((status&0x02)!

=0)

{

rletter=inportb(data51);

fputc(rletter,fp);

printf("\n%c",rletter);

}

}

}

fclose(fp);

}

voidint51()

{

outportb(ctrl51,0x00);

delay(100);

outportb(ctrl51,0x40);//8251复位

delay(100);

outportb(ctrl51,0x4e);//8251A方式命令

delay(100);

outportb(ctrl51,0x27);//8251A工作命令

}

voidset_bps(intbps)

{

inti,sendhigh,sendlow;

i=clk/bps;

i=i/factor;//计算计数初值

sendhigh=(i>>8)&0x00ff;

sendlow=i&0x00ff;

outportb(timctl,0xb6);

outportb(timer2,sendlow);//装计数初值低字节

outportb(timer2,sendhigh);//装计数初值高字节

}

参考文献

[1]夏士兵,钱江.构建基于COM+的分布式Web应用.微型机与应用,2001.20(6):

8-9

[2][美]RichardAnderson,ChrisBlexrud著.ASP3高级编程[M].张立民等译.北京:

机械工业出版社,2000:

408-458.

[3]刘乐善主编,《微机接口技术与应用》.华中科技大学出版社.

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

当前位置:首页 > 外语学习 > 韩语学习

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2