5491|6

69

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

想问一下:这个while(1)在程序中什么作用? [复制链接]

#include

/*
* main.c
*/

volatile unsigned int Num_of_result[4];//定义数组,编译器不优化,用于存放转换数据    :4代表数据位数0—3
        //        修饰词  用于读取寄存器值volatile
int main(void) {
    WDTCTL = WDTPW | WDTHOLD;        // Stop watchdog timer
        P6SEL|=0X0F;//P6口 低四位
        ADC12CTL0 = ADC12SHT02 + ADC12MSC + ADC12ON;//采样保持周期16CLK,多通道采样允许,ADC12转换允许
        ADC12CTL1 = ADC12SHP+ADC12CONSEQ_1;//信号来源于定时器,同时转换模式为多通道单次转换
        ADC12MEM0 = ADC12INCH_0;//A0通道
        ADC12MEM1= ADC12INCH_1;
        ADC12MEM2=ADC12INCH_2;
        ADC12MEM3=ADC12INCH_3 + ADC12EOS;//A3,  且转 换结束
        ADC12IE = 0X08;//ADC12IFG3允许
        ADC12CTL0 |= ADC12ENC;//ADC12允许转换
        while(1)
        {
                ADC12CTL0 |= ADC12SC;//开始转换
                _bis_SR_register(LPM4_bits+GIE);//低功耗模式4关闭所有时钟
                _no_operation();
        }
}
#pragma vector=ADC12_VECTOR
        interrupt void ADC12_ISR(void)
        {
                switch(_even_in_range(ADC12IV,34))
                {
                case 0:
                        break;
                case 2:
                        break;
                case 4:
                        break;
                case 6:
                        break;
case 8:
break;
case 10:
break;
case 12:
                   Num_of_result[0]=ADC12MEM0 ;//将寄存器相应的值存入数组对应的位
                                Num_of_result[1]=ADC12MEM1;
                                Num_of_result[2]=ADC12MEM2;
                                Num_of_result[3]=ADC12MEM3;
                                _bic_SR_register_on_exit(LPM4_bits);
case 14:
break;
case 16:
break;
case 18:
break;
case 20:
break;
case 22:
break;
case 24:
break;
case 26:
break;
case 28:
break;
case 30:
break;
case 32:
break;
case 34:
break;

                }
        }


此帖出自电子竞赛论坛

最新回复

長知識了 謝謝分享  详情 回复 发表于 2017-3-7 13:20
点赞 关注
个人签名

More information,please add the weibo ID :_Tang辉,chat number :951141617

 
 

回复
举报

366

帖子

1

TA的资源

一粒金砂(高级)

沙发
 
如果不加while1,程序跑完一遍以后,芯片就不工作了,如果芯片内部没有自动从头开始执行的机制,MCU就跟死了一样。而且,对于一个裸机程序而言,肯定要重复执行某些指令的
此帖出自电子竞赛论坛

点评

那这个例程呢? // 单通道多次采样模式 #include /* * main.c */ #define Num_of_result 8 //单通道转换8次 , volatile unsigned int results[Num_of_result];//不可优化数组  详情 回复 发表于 2017-2-28 15:10
 
 
 

回复

1059

帖子

1

TA的资源

版主

板凳
 
使能ADC转换,进入低功耗模式4
此帖出自电子竞赛论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(中级)

4
 
飞翔荷兰人号 发表于 2017-2-28 15:03
如果不加while1,程序跑完一遍以后,芯片就不工作了,如果芯片内部没有自动从头开始执行的机制,MCU就跟死 ...

那这个例程呢?



//        单通道多次采样模式
#include

/*
* main.c
*/

#define Num_of_result      8          //单通道转换8次  ,
volatile unsigned int results[Num_of_result];//不可优化数组用于存储转换结果
int main(void) {

    WDTCTL = WDTPW | WDTHOLD;        // Stop watchdog timer
    P6SEL |= BIT0;//A0通道输入
        ADC12CTL0=ADC12SHT02+ADC12ON             +ADC12MSC;//采样保持周期    并设置多次采样
        ADC12CTL1=ADC12SHP+ADC12CONSEQ_2;//单通道多次采样模式
        ADC12IE=BIT0;//允许中断
        ADC12CTL0|=ADC12ENC;//enable convertion允许转换

                ADC12CTL0|=ADC12SC;
                _bis_SR_register(LPM4_bits+GIE);
        //        _no_operation();
       

        //return 0;
}
#pragma vector=ADC12_VECTOR
interrupt void ADC12_ISR(void)
{
        unsigned int index=0;
        switch(_even_in_range(ADC12IV,34))
        {
        case 0:
                break;
        case 2:
                break;
        case 4:
                break;
        case 6:

results[index]=ADC12MEM0;
index++;//index++本身就是一个循环
if(index > 7)
  {
        index=0;
  }
        case 8:
                break;
        case 10:
        break;
        case 12:
                break;
        case 14:
        break;
        case 16:
        break;
        case 18:
        break;
        case 20:
        break;
        case 22:
        break;
        case 24:
        break;
        case 26:
        break;
        case 28:
        break;
        case 30:
        break;
        case 32:
        break;
        case 34:
        break;

        }
}
此帖出自电子竞赛论坛

点评

我记得430好像是进入低功耗以后,中断会唤醒,然后执行完中断函数,会继续进入低功耗,所以这个感觉是拿低功耗当了循环。因为它只是个例程,没有太多的功能,如果你有一些必须重复执行的比如查询之类的操作,肯定要  详情 回复 发表于 2017-3-3 16:04
你看先看运行这个程序,是不是能够重复,执行一些动作。要是不能,就不用说了吧。要是能,就应该在某个地方,比如函数里,有类似while(1)功能的机构。使其循环。  详情 回复 发表于 2017-2-28 21:04
个人签名

More information,please add the weibo ID :_Tang辉,chat number :951141617

 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

5
 
HI唐辉 发表于 2017-2-28 15:10
那这个例程呢?



//        单通道多次采样模式
#include  

/*
* main.c
*/

#define Num_of_re ...

你看先看运行这个程序,是不是能够重复,执行一些动作。要是不能,就不用说了吧。要是能,就应该在某个地方,比如函数里,有类似while(1)功能的机构。使其循环。  
此帖出自电子竞赛论坛
 
 
 

回复

366

帖子

1

TA的资源

一粒金砂(高级)

6
 
HI唐辉 发表于 2017-2-28 15:10
那这个例程呢?



//        单通道多次采样模式
#include  

/*
* main.c
*/

#define Num_of_re ...

我记得430好像是进入低功耗以后,中断会唤醒,然后执行完中断函数,会继续进入低功耗,所以这个感觉是拿低功耗当了循环。因为它只是个例程,没有太多的功能,如果你有一些必须重复执行的比如查询之类的操作,肯定要用while的
此帖出自电子竞赛论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

7
 
長知識了 謝謝分享
此帖出自电子竞赛论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表