- 1、本文档共47页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据采集与实践 基于串口通信的数据采集系统 综合 应用电子技术 物理与电子技术学院 2010年6月28日
电工电子中心2009年5月绘制
基于串口通信的数据采集系统
一.任务解析(老师统一给出)
1、串口通信接口,单片机232接口与PC机232接口通信相关内容
2、单片机控制的ADC,电路,控制程序
3、上位机软件编写,VB基础,MSCOMM控件,代码分析
4、通信协议,为什么要通信协议,如何设计通信协议
5、温度(电压)数据采集系统设计实现
二.总要求(老师统一给出)
对【一】中5点任务,结合授课内容,查阅相关资料,进行实验验证,撰写书面报告(电子版)。考虑到同学们的实际水平,要求你们立足老师提供的现成资料,完成实验验证,同时自己再查阅一些资料后,对所掌握的资料进行合理的整理,完成报告,对创新不作要求。
三.实验内容
3.1串口通信(核心内容)
=====================================================
//发送程序
=====================================================
void send_answer(unsigned char n, unsigned char *str)
{
unsigned char i,temp;
temp=n;
for(i=0;in;i++) temp += *(str+i);
temp=~temp+1;
uart_putc(:);
uart_putc(hex_to_asc(n,1));
uart_putc(hex_to_asc(n,0));
for(i=0;in;i++)
{
uart_putc(hex_to_asc(*(str+i),1));
uart_putc(hex_to_asc(*(str+i),0));
}
uart_putc(hex_to_asc(temp,1));
uart_putc(hex_to_asc(temp,0));
}
=====================================================
//串口接收中断程序
=====================================================
void serial_int(void) interrupt 4
{
static unsigned char i=0;
static unsigned char num=0;
static unsigned char rx_hlf=0;
unsigned char rx_dat;
if (RI) {
rx_dat=SBUF;
RI=0;
switch (num)
{
case 0: if(rx_dat==:) num=1; break;
case 1: if(rx_hlf){
rx_counter += asc_to_hex(rx_dat);
rx_hlf = 0;
num=2;
}
else {
rx_counter = asc_to_hex(rx_dat)4;
rx_hlf = 1;
}
break;
case 2: if(rx_hlf){
rx_buff[i] += asc_to_hex(rx_dat);
rx_hlf = 0;
if(++irx_counter) {
num=0;
i=0;
rx_finish_flag=1;
}
}
else {
rx_buff[i] = asc_to_hex(rx_dat)4;
rx_hlf = 1;
}
break;
default: num=0; break;
}
}
}
=====================================================
//接收完毕后指令译码、执行。通过SWITCH及其套用,可以定义很多
//想做的事
=====================================================
void tast()
{
unsigned char i,temp;
unsigned int j=100,k=100;
if(rx_finish_flag)
文档评论(0)