首页 模拟量输入与输出

模拟量输入与输出

举报
开通vip

模拟量输入与输出第6章模拟量输入与输出6.1A/D转换的应用例6.1A/D转换初始化程序//A/D转换初始化子程序voidadinitial(){ADCON0=0x51;//选择A/D通道为RA2,打开A/D转换器//在工作状态,且使AD转换时钟为8toscADCON1=0X80;//转换结果右移,及ADRESH寄存器的高6位为"0"//且把RA2口设置为模拟量输入方式PIE1=0X00;PIE2=0X00;ADIE=1;//A/D转换中断允许PEIE=1;//外围中断允许TRISA2=1;//设置RA2为输入...

模拟量输入与输出
第6章模拟量输入与输出6.1A/D转换的应用例6.1A/D转换初始化程序//A/D转换初始化子程序voidadinitial(){ADCON0=0x51;//选择A/D通道为RA2,打开A/D转换器//在工作状态,且使AD转换时钟为8toscADCON1=0X80;//转换结果右移,及ADRESH寄存器的高6位为"0"//且把RA2口设置为模拟量输入方式PIE1=0X00;PIE2=0X00;ADIE=1;//A/D转换中断允许PEIE=1;//外围中断允许TRISA2=1;//设置RA2为输入方式}6.1.2程序清单下面给出一个调试通过的例程,可作为读者编制程序的参考。该程序中用共用体的方式把A/D转换的10位结果组合在一起。有关共用体的详细资料请参考本 关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf 相关章节。#include<pic.h>unionadres{inty1;unsignedcharadre[2];}adresult;//定义一个共用体,用于存放A/D转换的结果unsignedchari;unsignedintj;//系统各I/O口初始化子程序voidinitial(){TRISD=0X00;//D口为输出i=0x00;}//A/D转化初始化子程序voidadinitial(){ADCON0=0x51;//选择A/D通道为RA2,打开A/D转换器//在工作状态,且使A/D转换时钟为8toscADCON1=0X80;//转换结果右移,及ADRESH寄存器的高6位为"0"//且把RA2口设置为模拟量输入方式PIE1=0X00;PIE2=0X00;ADIE=1;//A/D转换中断允许PEIE=1;//外围中断允许TRISA2=1;//设置RA2为输入方式}//延时子程序voiddelay(){for(j=5535;--j;)continue;}//报警子程序voidalarm(){i=i^0xFF;//通过异或方式每次把i的各位值取反PORTD=i;//D口输出i的值}//中断服务程序voidinterruptadint(void){ADIF=0;//清除中断标志adresult.adre[0]=ADRESL;adresult.adre[1]=ADRESH;//读取并存储A/D转换结果,A/D转换的结果通过共//用体的形式放入了变量y1中if(adresult.y1>0x200){alarm();//如果输入的模拟量大于2.5V(对应数字量//0X200h),则调用报警子程序delay();//调用延时子程序,使电压检测不要过于频繁}elsePORTD=0XF0;//如果输入的模拟量小于2.5V,则与D口相连的//8个发光二极管的低4个发亮,表示系统正常ADGO=1;//启动下一次A/D转换}//主程序main(){adinitial();//A/D转换初始化initial();//系统各I/O口初始化ei();//总中断允许ADGO=1;//启动A/D转换while(1){;}//等待中断,在中断中循环检测外部电压}6.2.2I2C总线工作方式相关子程序1.C语言编写的I2C总线工作方式的初始化子程序//I2C初始化子程序voidi2cint(){SSPCON=0X08;//初始化SSPCON寄存器TRISC3=1;//设置SCL为输入口TRISC4=1;//设置SDA为输入口TRISA4=0;SSPSTAT=0X80;//初始化SSPSTAT寄存器SSPADD=0X02;//设定I2C时钟频率SSPCON2=0X00;//初始化SSPCON2寄存器di();//关闭总中断SSPIF=0;//清SSP中断标志RA4=0;//关掉74HC165的移位时钟使能,以免74HC165移位//数据输出与I2C总线的数据线发生冲突(此操作与该//实验板的特殊结构有关,不是通用的)SSPEN=1;//SSP模块使能}2.C语言编写的I2C总线工作方式传输数据子程序需要发送的数据在寄存器j中。//I2C总线输出数据子程序i2cout(){SEN=1;//产生I2C启动信号for(n=0x02;--n;)continue;//给予一定的延时,保证启动do{RSEN=1;//产生I2C重启动信号}while(SSPIF==0);//如果没能启动,则反复启动,直到启动为止SSPIF=0;//SSPIF标志清0SSPBUF=0X58;//I2C总线发送地址字节do{;}while(SSPIF==0);//等待地址发送完毕SSPIF=0;//SSPIF标志清0SSPBUF=0X01;//I2C总线发送命令字节do{;}while(SSPIF==0);//等待命令发送完毕SSPIF=0;//SSPIF标志清0SSPBUF=j;//I2C总线发送数据字节do{;}while(SSPIF==0);//等待数据发送完毕SSPIF=0;//SSPIF标志清0PEN=1;//产生停止条件do{;}while(SSPIF==0);//等待停止条件产生SSPIF=0;//SSPIF标志清0}6.2.4程序清单下面给一个例程。该程序利用MAX518进行D/A转换,且从D/A0引脚输出一个正弦波形。可作为读者编制程序的参考。特别注意,在调试该程序时,把模板上的钮子开关S8拔向高电平,以免发生资源冲突。#include<pic.h>//本程序将通过PIC16F877的I2C方式驱动D/A转换器MAX518,使其D/A0通道输出//一个连续的正弦波形(注:本程序并没对正弦波的频率进行控制)constchartable[]={0X80,0X86,0X8D,0X93,0X99,0X9F,0XA5,0XAB,0XB1,0XB7,0XBC,0XC2,0XC7,0XCC,0XD1,0XD6,0XDA,0XDF,0XE3,0XE7,0XEA,0XEE,0XF1,0XF4,0XF6,0XF8,0XFA,0XFC,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFD,0XFB,0XF9,0XF7,0XF5,0XF2,0XEF,0XEC,0XE9,0XE5,0XE1,0XDD,0XD8,0XD4,0XCF,0XCA,0XC5,0XBF,0XBA,0XB4,0XAE,0XA8,0XA2,0X9C,0X96,0X90,0X89,0X83,0X80,0X79,0X72,0X6C,0X66,0X60,0X5A,0X55,0X4E,0X48,0X43,0X3D,0X38,0X33,0X2E,0X29,0X25,0X20,0X1C,0X18,0X15,0X11,0X0E,0X0B,0X09,0X07,0X05,0X03,0X02,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X02,0X04,0X06,0X08,0X0A,0X0D,0X10,0X13,0X16,0X1A,0X1E,0X22,0X27,0X2B,0X30,0X35,0X3A,0X40,0X45,0X4C,0X51,0X57,0X5D,0X63,0X69,0X6F,0X76,0X7C};//以上的数组用于存放正弦表,在定义数组时,前面应该加上const,//以使数组存放于ROM中,而不至于占用太多的RAMunsignedchari;unsignedcharj;unsignedcharn;//I2C初始化子程序voidi2cint(){SSPCON=0X08;//初始化SSPCON寄存器TRISC3=1;//设置SCL为输入口TRISC4=1;//设置SDA为输入口TRISA4=0;SSPSTAT=0X80;//初始化SSPSTAT寄存器SSPADD=0X02;//设定I2C时钟频率SSPCON2=0X00;//初始化SSPCON2寄存器di();//关闭总中断SSPIF=0;//清SSP中断标志RA4=0;//关掉74HC165的移位时钟使能,以免74HC165//移位数据输出与I2C总线的数据线发生冲突SSPEN=1;//SSP模块使能}//I2C总线输出数据子程序voidi2cout(){SEN=1;//产生I2C启动信号for(n=0x02;--n;)continue;//给予一定的延时,保证启动do{RSEN=1;//产生I2C启动信号}while(SSPIF==0);//如果没能启动,则反复启动,直到启动为止SSPIF=0;//SSPIF标志清0SSPBUF=0X58;//I2C总线发送地址字节do{;}while(SSPIF==0);//等待地址发送完毕SSPIF=0;//SSPIF标志清0SSPBUF=0X01;//I2C总线发送命令字节do{;}while(SSPIF==0);//等待命令发送完毕SSPIF=0;//SSPIF标志清0SSPBUF=j;//I2C总线发送数据字节do{;}while(SSPIF==0);//等待数据发送完毕SSPIF=0;//SSPIF标志清0PEN=1;//产生停止条件do{;}while(SSPIF==0);//等待停止条件产生SSPIF=0;//SSPIF标志清0}//主程序main(){i2cint();//I2C初始化while(1){for(i=0x00;i<=127;++i){j=table[i];//从数组中得到需要传输的数据量i2cout();//利用I2C总线方式送出数据}}}1117
本文档为【模拟量输入与输出】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
Sky
暂无简介~
格式:doc
大小:124KB
软件:Word
页数:0
分类:
上传时间:2018-09-22
浏览量:20