第6章 模拟量输入与输出.doc

第6章 模拟量输入与输出.doc

ID:28813698

大小:115.50 KB

页数:6页

时间:2018-12-14

第6章 模拟量输入与输出.doc_第1页
第6章 模拟量输入与输出.doc_第2页
第6章 模拟量输入与输出.doc_第3页
第6章 模拟量输入与输出.doc_第4页
第6章 模拟量输入与输出.doc_第5页
资源描述:

《第6章 模拟量输入与输出.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、第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程序清

2、单下面给出一个调试通过的例程,可作为读者编制程序的参考。该程序中用共用体的方式把A/D转换的10位结果组合在一起。有关共用体的详细资料请参考本书相关章节。#includeunionadres{inty1;unsignedcharadre[2];}adresult;//定义一个共用体,用于存放A/D转换的结果unsignedchari;unsignedintj;//系统各I/O口初始化子程序voidinitial(){TRISD=0X00;//D口为输出i=0x00;}//A/D转化初始化子程序voida

3、dinitial(){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

4、(){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(

5、);//调用延时子程序,使电压检测不要过于频繁}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总线工作方式的初始化子

6、程序//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总线的数据

7、线发生冲突(此操作与该//实验板的特殊结构有关,不是通用的)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

8、总线发送地址字节do{;}while(SSPIF==0);//等待地址发送完毕SSPIF=0;//SSPIF标志清0SSPBUF=0X01;//I2C总线发送命令字节do{;}while(SSPIF==0);//等待命令发送完毕SSPIF=0;//SSPIF标志清0SSPBUF=j;//I2C总线发送数据字节do{;}while(SSPIF==

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。