首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

为什么简单的走马灯程序居然会在开发板上运行不了??

为什么简单的走马灯程序居然会在开发板上运行不了??

程序编译通过了,可是单步调试时在延时部分就不能运行,连续运行时总是报非法中断而且只点亮一个灯LED1,请问这是我延时函数写的不对吗?

#include /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#include "self.h"
/**************************************************************
Define the LED perameters
**************************************************************/
#define LED1 PTDD_PTDD4
#define LED1DIR PTDDD_PTDDD4
#define LED2 PTDD_PTDD5
#define LED2DIR PTDDD_PTDDD5
#define LED3 PTDD_PTDD6
#define LED3DIR PTDDD_PTDDD6
#define LED4 PTDD_PTDD7
#define LED4DIR PTDDD_PTDDD7
#define LED5 PTCD_PTCD4
#define LED5DIR PTCDD_PTCDD4

#define LED_ON 0
#define LED_OFF 1
#define DDIR_OUTPUT 1
#define DDIR_INPUT 0

#define LED_INIT_MACRO LED1 = LED_OFF; \
LED2 = LED_OFF; \
LED3 = LED_OFF; \
LED4 = LED_OFF; \
LED5 = LED_OFF; \
LED1DIR = DDIR_OUTPUT; \
LED2DIR = DDIR_OUTPUT; \
LED3DIR = DDIR_OUTPUT; \
LED4DIR = DDIR_OUTPUT; \
LED5DIR = DDIR_OUTPUT;
void WalkLED_1x(void);
void WalkLED_2x(void);
void Delay(UINT8 x);
/***********************************************
Main
***********************************************/
void main(void) {


LED_INIT_MACRO
for(;;) {
WalkLED_1x();
WalkLED_2x();

}
}


void WalkLED_1x(void){
LED1=LED_ON;
Delay(255);
LED1=LED_OFF;
LED2=LED_ON;
Delay(255);
LED2=LED_OFF;
LED3=LED_ON;
Delay(255);
LED3=LED_OFF;
LED4=LED_ON;
Delay(255);
LED4=LED_OFF;
}


void WalkLED_2x(void){
LED1=LED_ON;
Delay(100);
LED1=LED_OFF;
LED2=LED_ON;
Delay(100);
LED2=LED_OFF;
LED3=LED_ON;
Delay(100);
LED3=LED_OFF;
LED4=LED_ON;
Delay(100);
LED4=LED_OFF;
}



void Delay(UINT8 x){
UINT8 Tempvalue;

for(Tempvalue=0;Tempvalue<x; Tempvalue++)

for(Tempvalue=0;Tempvalue<10;Tempvalue++)
;
}

[此贴子已经被作者于2007-6-1 16:07:17编辑过]

你这个循环延时程序永远也无法结束吧。仔细检查一下。
海纳百川  有容乃大
我觉着也是,你把内外循环的变量别用一个变量名,换个试试
1
单片机
LED1=LED_OFF;
LED2=LED_ON;

中间没有延时!
\',\'\'\'\',\'\'\',,,;,.\',\'\'\',,\',.╭⌒╮⌒╮\',\'\';; ⌒╮\'╭⌒╮⌒╮.宠辱不惊,看庭前花开花落;; ╱◥██◣\'\';\',,,,;\';\';\'\'\';,\'.\'\',\'\'\'\',\';; ︱田︱田田| ⌒╮去留无意,望天空云卷云舒;; ╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
呵呵
这个程序的delay是一个永远不能退出的循环!

如果x小于10的话,这个循环是没有问题的!

void Delay(UINT8 x){
UINT8 Tempvalue;

for(Tempvalue=0;Tempvalue //在这里,Tempvalue最大只能是11
for(Tempvalue=0;Tempvalue<10;Tempvalue++)
; //在这里,Tempvalue只能等于10
}

不知道搂主这样做的意义何在?
返回列表