程序如下: # include absacc.h # include reg51.h # define uchar unsigned char # define IN0 XBYTE [ 0x7ff8 ] /* 设置AD0809的通道0地址 */ sbit ad_busy =P3^3 ; /* 即EOC状态 */ void ad0809 ( uchar idata *x ) /* 采样结果放指针中的A/D采集函数 */ { uchar i ; uchar xdata *ad_adr ; ad_adr= IN0 ; for ( i=0 ; i8 ;i++ ) /* 处理8通道 */ { *ad_adr=0 ; /* 启动转换 */ i=i ; /* 延时等待EOC变低 */ i=i ; while (ad_busy = =0 ) ; /* 查询等待转换结束 */ x[i ]= * ad_adr ; /* 存转换结果 */ ad_adr ++ ; /* 下一通道 */ } } void main ( void ) { static uchar idata ad [ 10 ] ; ad0809 ( ad ) ; /* 采样AD0809通道的值 */ } 例10 AD574与8031接口的数据采集程序举例。 图7.9 AD574与8031的接口电路 源程序如下: # include absacc.h # inlucde reg51.h # define uint unsigned int # define ADCOM XBYTE[ 0xff7c ] /* 使A0=0 ,R/C=0, CS=0 */ # define ADLO XBYTE [ 0xff7f ] /* 使 R/C =1,A0=1, CS=0 */ # define ADHI XBYTE [ 0xff7d ] /* 使R/C=1,A0=0,CS =0 */ sbit r = P3 ^ 7 ; sbit w = P3 ^ 6 ; sbit adbusy = P1 ^ 0 ; uint ad574 ( void ) /* AD574转换器 */ { r = 0 ; /* 产生CE=1 */ w = 0 ; ADCOM = 0 ; /* 启动转换 */ while ( adbusy = =1 ) ; /* 等待转换 */ return ( ( uint )(ADHI4 )+( ADLO 0x0f ) ); /* 返回12位采样值 */ } main ( ) { uint idata result ; result =ad574 ( ) ; /* 启动AD574进行一次转换,得转换结果 */ } 7.10.3 MCS-51输出控制的C语言编程 例11 8031与DAC0832双缓冲接口的数据转换程序举例。 图7.10 DAC 0832的双缓冲接口电路 将data1和data2数据同时转换为模拟量的C51程序如下: # include absacc.h # include reg51.h # define INPUTR1 XBYTE[ 0x8fff ] # define INPUTR2 XBYTE[ 0xa7ff] # define DACR XBYTE [0x2fff ] # define uchar unsigned char void dac2b (data1 ,data2 ) uchar data1 , data2 ; { INPUTR1 = data1 ; /* 送数据到一片0832 */ INPUTR2 = data2 ;
您可能关注的文档
最近下载
- 档案整理及数字化投标方案(517页).doc VIP
- 第六章+第三节++黄土高原课件-2023-2024学年商务星球版地理八年级下册.pptx VIP
- 高一上期末数学试卷(含答案).doc VIP
- 2024年11月全国事业单位联考综合应用能力(A类)试题及参考答案.pdf VIP
- 《地理信息系统原理与应用》课程标准.doc VIP
- 商务星球版初中地理八年级下册第六章第三节黄土高原.pptx VIP
- 病句的修改大全修改病句大全及答案.docx VIP
- 1.《地理信息系统技术应用》课程标准.docx VIP
- 最优控制-西安交通大学课件lecture07.ppt VIP
- 最优控制-西安交通大学课件lecture5.ppt VIP
原创力文档

文档评论(0)