PIC单片机应用开发典型模块_第四章程序(3)

2019-03-16 22:12

TRISA0=1; //设置RA0为输入方式

}

//系统其它初始化子程序 voidinitial() {

CCP2IE=0; SSPIE=0;

//禁止CCP中断 //禁止SSP中断

//初始化CCP2CON,CCP2为特别事件触发方式 //初始化CCPR2寄存器,设置采样间隔500 μs,

CCP2CON=0X0B; CCPR2H=0X01; CCPR2L=0XF4;

//一个周期内电压采40个点 }

//中断服务程序

void interruptadint(void) {

CCP2IF=0;

ADIF=0; //清除中断标志 adresult.adre[0]=ADRESL;

adresult.adre[1]=ADRESH;//读取并存储A/D转换结果,A/D转换的结果 //通过共用体的形式放入了变量y1中 re[k]=adresult.y1; //1次A/D转换的结果存入数组 k++;//数组访问指针加1 }

//主程序 main( ) {

adinitial();

//A/D转换初始化 //系统其它初始化

//数组访问指针赋初值 //定时器1清0 //中断允许 //打开定时器1

initial(); k=0; TMR1H=0X00; TMR1L=0X00; ei(); T1CON=0X01; while(1)

{

if(k==40)break;

//A/D转换次数达到40,则终止

}

di(); //禁止中断

for(k=0;k<40;k++)re[k]=re[k]-0X199;//假设提升电压为2 V,对应十六进制数199H,则 //需在采样值的基础上减去该值 for(k=0,squad=0;k<40;k++){ uo=re[k];

squ=(double)uo; squ=squ*5/1023;

//强制把采得的数据量转换成双精度数,以便运算 //把每点的数据转换成实际数据

squ=squ*squ; //求一点电压的平方

squad=squad+squ;

}//以上求得40点电压的平方和,存于寄存器 squad中 squ=squad/40; //求得平均值 squ=sqrt(squ); //开平方,求得最后的电压值

squ=squ*154.054; //通过变压器的变比和分压电阻分配确定该系数 //以上得到了实际电网的电压值

squ=squ*10; //为了保证显示的小数点的精度,先对电压值乘以10 uo=(int)squ; //强制把U转换成有符号整型量

sprintf(s,\,uo);//通过sprintf函数把需要显示的电压数据转换成 ASII码,并存于数

//组S中 }


PIC单片机应用开发典型模块_第四章程序(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2011年12月常用会计科目表解释

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: