基于pic16f876a单片机 ad电压测量程序 3路模拟3路数字...

上传人:wt****50 文档编号:37551500 上传时间:2018-04-18 格式:DOC 页数:5 大小:54KB
返回 下载 相关 举报
基于pic16f876a单片机 ad电压测量程序 3路模拟3路数字..._第1页
第1页 / 共5页
基于pic16f876a单片机 ad电压测量程序 3路模拟3路数字..._第2页
第2页 / 共5页
基于pic16f876a单片机 ad电压测量程序 3路模拟3路数字..._第3页
第3页 / 共5页
基于pic16f876a单片机 ad电压测量程序 3路模拟3路数字..._第4页
第4页 / 共5页
基于pic16f876a单片机 ad电压测量程序 3路模拟3路数字..._第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《基于pic16f876a单片机 ad电压测量程序 3路模拟3路数字...》由会员分享,可在线阅读,更多相关《基于pic16f876a单片机 ad电压测量程序 3路模拟3路数字...(5页珍藏版)》请在金锄头文库上搜索。

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=0x

2、41; 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(RCIEdelay(2);return 0;/清除接受缓存区void clrRxBuf(void)while(pRx) RxBufpRx-=0;RxBuf0=0;pR

3、x=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=0

4、x49; /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 0000

5、0011adval2=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 geta

6、d5()/数字通道 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 个字节,如果超时则不处理,清除缓冲区i

7、f(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);if(pRx)/如果有接收字节if(RxBuf0=0xab)if(!delay4bytes(2)/等待接收到 5 个字节,如果超时则不处理,清除缓冲区if(RxBuf1=0x43)/asm(“goto 0“);asm(“ljmp 0“); /clrRxBuf();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号