完整的单片机AD采样程序.doc_第1页
完整的单片机AD采样程序.doc_第2页
完整的单片机AD采样程序.doc_第3页
完整的单片机AD采样程序.doc_第4页
完整的单片机AD采样程序.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include #include #include/*-*/ #define uint unsigned int#define uchar unsigned char#define ADCOM XBYTE 0x4000/*AD574启动地址*/#define ADHI XBYTE 0x4002/*AD574高8位地址*/#define ADLO XBYTE 0x4003/*AD574低4位地址*/uchar code slave_addr4=00, 01, 02, 255; /*从机地址*/*-*/void ini_ad(void); /*初始化硬件函数*/void average_send(void); /*求均值与发送函数*/void check_addr(void); /*地址核对*/*-*/uint * data_ad_ori_pt; /*数据保存指针*/uint data_ad_ori16;/*-*/uchar bdata sample_s, test_s0, test_s1;/*test_s0, test_s1可以不用,是测试位*/sbit sample_permit=sample_s0;sbit average_permit=sample_s1;sbit address_true=sample_s2;sbit empty_pin=sample_s3;sbit cmd_in_permit=sample_s4; /*允许主机命令输入标志位*/sbit test_bit1=sample_s5;/*P1.0、P1.1、P1.2在硬件上已经作AD输入线选择口*/sbit P1_3=P13;/*作串口输出信号的使能口, P1_0=0时接通串口,输出信号*/sbit P3_4=P34;/*测试位,可选*/sbit WD=P17; /*看门狗*/uchar data j,k,data_avr_no;uchar key_in, done_no;/*done_no为用到*/uint sample_no,AD_finished_no;/*其实可以用uchar格式,记录采样次数和AD完成次数*/main() P1=0xf9;/*采样通道设置为1通道*/WD=1; /*看门狗先为1,电平翻转为喂狗*/test_s0=0;test_s1=0;data_ad_ori_pt=data_ad_ori; /*指针指向数组*/sample_s=0; /*有点定义重复的意思?*/sample_permit=0; /*不允许采样标志*/average_permit=0; /*不允许求均值标志*/address_true=0;empty_pin=0;cmd_in_permit=0;test_bit1=0;P1_3=1;/*开机时需要关断,串口发送功能,需要时再接通*/P3_4=0;done_no=0;sample_no=1; /*需要采样的次数*/AD_finished_no=0; /*AD完成采样的次数*/data_avr_no=0;j=0;k=0;for(j=0;j=15;j+)data_ad_orij=0x00;data_ad_ori0=0x00; /*这一步有些重复*/j=0;ini_ad();doif(address_true=1) address_true=0;check_addr();while(sample_permit=1)if(average_permit=1)average_send();if (AD_finished_no=sample_no) AD_finished_no=0;sample_permit=0; /*完成数据传送后,才恢复为恢复为多机模式,SM2=1*/SM2=1;data_ad_ori_pt=data_ad_ori;average_permit=0;else if(average_permit!=1) /这里有问题?ADCOM=0; WD=!WD; /*MAX813喂狗*/ while(1);void interserial (void) interrupt 4 using 2 /*串口0中断服务子程序*/ key_in=0;if(RI) key_in=SBUF; RI=0;if (SM2=1) /*SM2=1,必须有RB8=1串口才中断*/ /*SM2=1,为多机模式, 接收主机地址*/ /*接收到的字节为地址*/ /*接收的地址与本机地址比较,判断是否一致*/if(key_in=slave_addr0) /*确认地址完毕,设置SM2=0,进入单机模式*/SM2=0;address_true=1;if (SM2=0)& (RB8=0)/*SM2=0,RB8=1或RB8=0串口都中断*/*SM2=0,为单机模式, 接收主机数据*/*接收到的字节为数据*/*接收主机指令完毕,必须在从机完成任务后,才恢复为多机模式,设置SM2=1*/if(key_in=0xff)SM2=1; /*接收主机命令,使从机设置为多机模式*/if (key_in=0xfe) /*接收主机命令,使从机开始采样*/cmd_in_permit=1;if (cmd_in_permit=1)&(key_in=0xde) /*接收主机命令,使从机开始采样*/cmd_in_permit=0; sample_permit=1; WD=!WD; /*MAX813喂狗*/void interint0(void) interrupt 0 using 1 /*外部中断0服务子程序*/ uint ad_hl,k0; ad_hl=(uint)(ADHI4);*data_ad_ori_pt=(ad_hl&0x0fff);data_ad_ori_pt+;for(k0=0;k0=100;k0+) _nop_(); /*定义采样时间间隔?微秒*/data_avr_no+;if(data_avr_no=11)data_avr_no=0;average_permit=1;WD=!WD; /*MAX813喂狗*/ void average_send(void) uchar j1,average_no, i;uint ad_hl,ad_h,ad_l, avg, sum;uint *pt3;average_no=10; /*需要平均的AD采样数据个数*/sum=0;for(j1=1;j18);ad_l=(uchar)(avg&0x00ff);test_s0=ad_h;test_s1=ad_l;pt3=data_ad_ori;P1_3=0;for(i=0;i=20;i+) _nop_(); SBUF=ad_h;do while(TI=0); TI=0;SBUF=ad_l;do while(TI=0); TI=0;P1_3=1;for(i=0;i=20;i+) _nop_(); AD_finished_no+;WD=!WD; /*MAX813喂狗*/void check_addr(void) uchar i=0;P1_3=0;for(i=0;i=20;i+) _nop_(); SBUF=slave_addr0;/*发送地址核对成功,发送从机地址给主机*/do while(TI=0); TI=0;P1_3=1;for(i=0;i=20;i+) _nop_(); WD=!WD; /*MAX813喂狗*/void ini_ad(void) TMOD = 0x21;/*T0设定为方式1,16位;T1设定为方式2,8位,常数自动装入*/TH1=0xfd;/*TH1 用于设置波特率, 9.6kB/s*/TL1=0xfd;/*TL1 用于设置波特率, 9.6kB/s*/PCON=0x00;/*波特率不加倍*/SCON = 0xd0; /*SCON 工作方式3, 允许发送*/SM2=1;/*多机通信, 发送第9

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论