4254|12

27

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

我用的片子是G2553,我写的简单的语句延时为什么单片机不执行呢。 [复制链接]

我用的片子是G2553,我写的简单的语句延时为什么单片机不执行呢。
void DelayUs(unsigned char us)   //delay us
{
   for(;us>0;us--);
}
希望大家知道的解释一下!

最新回复

建议使用下面的延时函数#define F_CPU    ((double)8000000) #define _delay_us(x)\   __delay_cycles( (unsigned long) ( (double)(F_CPU) *((x)/1000000.0) + 0.5)) #define _delay_ms(x)\   __delay_cycles( (unsigned long) ( (double)(F_CPU)*((x)/1000.0) + 0.5)) #define _delay_s(x)\   __delay_cycles( (unsigned long) ( (double)(F_CPU)*((x)/1.0) + 0.5)) #endif复制代码  详情 回复 发表于 2012-9-21 00:06
 
点赞 关注

回复
举报

7219

帖子

195

TA的资源

五彩晶圆(高级)

沙发
 
发完整的程序看看
 
 

回复

280

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
这个语句应该是执行呢,不过就是与MCU的时钟频率有关,可能是延时太短,看不出来。2553launchpad默认的1Mhz的频率。
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

4
 
unsigned char us最大是255,绝对看不出来
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

5
 
可是用CCS进行但不调试,它直接跳过这个延时语句。
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

6
 
可是用CCS进行但不调试,它直接跳过这个延时语句。
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

7
 
可是用CCS进行单步调试,它直接跳过这个延时语句。
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

8
 
/*
* main.c
*/
#include
typedef unsigned char  uint8_t;     /* 8位无符号数据类型 */
typedef signed   char  int8_t;     /* 8位有符号数据类型 */
typedef unsigned int uint16_t;    /* 16位无符号数据类型 */
typedef signed   int int16_t;    /* 16位有符号数据类型 */
typedef  unsigned long uint32_t;
void delay();
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
uint8_t i;
uint16_t j;
uint8_t A;
if (CALBC1_1MHZ == 0xFF || CALDCO_1MHZ == 0xFF)
  {
   while(1);      // If calibration constants erased, trap CPU!!
  }
  // Configure Basic Clock
  BCSCTL1 = CALBC1_1MHZ;     // Set range
  DCOCTL = CALDCO_1MHZ;    // Set DCO step + modulation
P1SEL=0;
P1SEL2=0;
P1DIR=0XFF;
P1OUT=0XFF;
A=0XFF;
while(1)
{
  P1OUT=0XFF;
  A=0XFF;
  for(j=1000;j>0;j--);
  for(i=0;i<8;i++)
  {
   P1OUT=P1OUT<<1;
   //_delay_cycles(100000);
   delay();

  }
  for(i=0;i<8;i++)
  {
   A=(A>>1);
   P1OUT=~(A);
   //_delay_cycles(100000);
   delay();
  }
}
}
void delay()
{
uint32_t i,j;
for(i=1000;i>0;i--)
  for(j=100;j>0;j--);
}
这是程序,这个延时足够长了,还是不行。就是不执行。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

9
 
我刚遇到了同样的问题   你把自己定义的那个延时函数改成
void delay()
{
       uint32_t i,j;
       for(i=1000;i>0;i--)
              for(j=100;j>0;j--)
             _nop();
}
看看 行不  我就这么弄的
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

10
 
恩,可以。谢谢了。不过我还是想知道为什么上面的不行,是编译器的原因吗?

点评

有可能是你的编译器设置优化级别太高,你才用1MHz的频率,你的延时函数最高255us,可能是被编译器给和谐了哦哦  详情 回复 发表于 2012-7-26 21:08
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(高级)

11
 

回复 10楼 tthhee 的帖子

有可能是你的编译器设置优化级别太高,你才用1MHz的频率,你的延时函数最高255us,可能是被编译器给和谐了哦哦
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

12
 
呃呃,延时语句在MSP430好像不能这样写的~~
试试这个~~
关键字: volatile
void delay(unsigned int duration)
{
        volatile unsigned int d = duration;
        while((d--) > 0)
        {
        }
}
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

13
 
建议使用下面的延时函数
  1. #define F_CPU    ((double)8000000)


  2. #define _delay_us(x)\
  3.   __delay_cycles( (unsigned long) ( (double)(F_CPU) *((x)/1000000.0) + 0.5))


  4. #define _delay_ms(x)\
  5.   __delay_cycles( (unsigned long) ( (double)(F_CPU)*((x)/1000.0) + 0.5))


  6. #define _delay_s(x)\
  7.   __delay_cycles( (unsigned long) ( (double)(F_CPU)*((x)/1.0) + 0.5))

  8. #endif
复制代码
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表