基于PIC16F876A单片机 AD电压测量程序 3路模拟3路数字....doc_第1页
基于PIC16F876A单片机 AD电压测量程序 3路模拟3路数字....doc_第2页
基于PIC16F876A单片机 AD电压测量程序 3路模拟3路数字....doc_第3页
基于PIC16F876A单片机 AD电压测量程序 3路模拟3路数字....doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

#include /包含单片机内部资源预定义#include_CONFIG(0x3b31);#define uchar unsigned char#define uint unsigned int uint led_ct=0;/led状态存储#define RXMAX 64 /长度64位unsigned char pRx,RxBufRXMAX;/就收缓存函数 /延时函数void delay(uint x)uint a,b;for(a=x;a0;a-)for(b=110;b0;b-); /初始化函数 void init()TRISA=0XFF; ADCON1=0x80;/ADCON0=0x41; TRISC=0XCF; /设置C口方向全为输出 1100 0111 RC7 RC6串口模式必须设置为输出 SPBRG=25; /设置波特率TXSTA=0X24; /使能串口发送,选择高速波特率RCSTA=0X90; /使能串口工作,连续接收RCIE=1; /使能接收中断GIE=1; /开放全局中断PEIE=1; /使能外部中断 delay(10); /接受中断函数void interrupt com(void)if(RCIE&RCIF)/判断是否为串口接收中断if(pRxRXMAX) RxBufpRx+=RCREG;RCIF=0;/*=命令代码处理函数=*/*等待pRx(接收字节数)到某个数目,最多等待200ms.return:0=ok,1=error*/unsigned char delay4bytes(unsigned char n)unsigned char nms=0;while(pRx100) return 1;delay(2);return 0;/清除接受缓存区void clrRxBuf(void)while(pRx) RxBufpRx-=0;RxBuf0=0;pRx=0;uint getad0() /模拟通道1 uint i=0,a,adval0;for(a=0;a30;a+) ADCON0=0x41; /0100 0001 GO=1;delay(1);while(GO);adval0=ADRESH;/00000000 00000011adval0=adval08|ADRESL;/00000011 11111111 adval0=adval0/4; i=i+adval0;adval0=i/30; return (adval0);uint getad1()/模拟通道2uint i=0,a,adval1;for(a=0;a30;a+) ADCON0=0x49; /0100 1001 GO=1;delay(1);while(GO);adval1=ADRESH;/00000000 00000011adval1=adval18|ADRESL;/00000011 11111111 adval1=adval1/4; i=i+adval1;adval1=i/30; return (adval1);uint getad2()/模拟通道3uint i=0,a,adval2;for(a=0;a30;a+) ADCON0=0x51; /0100 0001 GO=1;delay(1);while(GO);adval2=ADRESH;/00000000 00000011adval2=adval28|ADRESL;/00000011 11111111 adval2=adval2/4; i=i+adval2;adval2=i/30; return (adval2);uint getad3()/数字通道1 uint adval3; if(RC1=1)adval3=0xAA; if(RC1=0) adval3=0x00;return (adval3);uint getad4()/数字通道2 uint adval4; if(RC2=1)adval4=0xAA; if(RC2=0) adval4=0x00;return (adval4); uint getad5()/数字通道3 uint adval5; if(RC3=1)adval5=0xAA; if(RC3=0) adval5=0x00;return (adval5); void main() int temp6; init(); while(1) /等待中断 led_ct+; if(led_ct50) RC4=0; else if(led_ct100) RC4=1; else led_ct=0;/依据led变量的状态,改变led控制脚if(pRx)/如果有接收字节if(RxBuf0=0xab)if(!delay4bytes(2)/等待接收到5个字节,如果超时则不处理,清除缓冲区if(RxBuf1=0x42) while(1)while(GO)ADCON0=0x41;delay(1); temp0=getad0(); delay(10); while(GO)ADCON0=0x49;delay(1); temp1=getad1();delay(1); while(GO)ADCON0=0x51;delay(1); temp2=getad2();delay(1);temp3=getad3();delay(1);temp4=getad4();delay(1);temp5=getad5();delay(1);TXREG=79;delay(1);TXREG=75;delay(1); TXREG=temp0;delay(1); TXREG=temp1;delay(1); TXREG=temp2;delay(1); TXREG=temp3;delay(1); TXREG=temp4;delay(1); TXREG=temp5;delay(1); clrRxBuf(); delay(500

温馨提示

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

评论

0/150

提交评论