那位帮忙看看这个程序那里错了
#define LED_ON() LED = 0x00 ; //所有LED 亮
#define LED_OFF() LED = 0xff ; //所有LED 熄灭
unsigned int g_u16LedTimeCount = 0 ; //LED 计数器
unsigned char g_u8LedState = 0 ; //LED 状态标志, 0 表示亮,1 表示熄灭
void LedProcess(void)
{
if(0 == g_u8LedState) //如果LED 的状态为亮,则点亮LED
{
LED_ON() ;
}
else //否则熄灭LED
{
LED_OFF() ;
}
}
void LedStateChange(void)
{
if(g_bSystemTime1Ms) //系统1MS 时标到
{
g_bSystemTime1Ms = 0 ;
g_u16LedTimeCount++ ; //LED 计数器加一
if(g_u16LedTimeCount >= 500) //计数达到500,即500MS 到了,改变LED 的状态。
{
g_u16LedTimeCount = 0 ;
g_u8LedState = ! g_u8LedState ;
}
}
}
void main(void) //主程序
{
while(1)
{
LedProcess() ;
LedStateChange() ;
}
}
你还有没有其他文件的?在你所给的程序里LED和g_bSystemTime1Ms这两个变量都没定义;
有完整代码的。
#define LED P0
void Timer0Init(void)
{
TMOD &= 0xf0 ;
TMOD |= 0x01 ; //定时器0工作方式1
TH0 = 0xfc ; //定时器初始值
TL0 = 0x66 ;
TR0 = 1 ;
ET0 = 1 ;
}
void Time0Isr(void) interrupt 1
{
TH0 = 0xfc ; //定时器重新赋初值
TL0 = 0x66 ;
g_bSystemTime1Ms = 1 ; //1MS时标标志位置位
}
少了上面这些
g_bSystemTime1Ms没有定义,如果所有程序都在一个文件里,全局变量和宏定义都放到文件开头吧
LED的类型定义呢?
开头还是少了#include <reg52.h>, g_bSystemTime1Ms没定义;Timer0Init(void)函数没调用;
我调整了一下,这个在我的编译器了可以编译
#include <reg52.h>
#define LED P0
#define LED_ON() LED = 0x00 ; //所有LED 亮
#define LED_OFF() LED = 0xff ; //所有LED 熄灭
unsigned int g_u16LedTimeCount = 0 ; //LED 计数器
unsigned char g_u8LedState = 0 ; //LED 状态标志, 0 表示亮,1 表示熄灭
bit g_bSystemTime1Ms;
void Timer0Init(void)
{
TMOD &= 0xf0 ;
TMOD |= 0x01 ; //定时器0工作方式1
TH0 = 0xfc ; //定时器初始值
TL0 = 0x66 ;
TR0 = 1 ;
ET0 = 1 ;
}
void Time0Isr(void) interrupt 1
{
TH0 = 0xfc ; //定时器重新赋初值
TL0 = 0x66 ;
g_bSystemTime1Ms = 1 ; //1MS时标标志位置位
}
void LedProcess(void)
{
if(0 == g_u8LedState) //如果LED 的状态为亮,则点亮LED
{
LED_ON() ;
}
else //否则熄灭LED
{
LED_OFF() ;
}
}
void LedStateChange(void)
{
if(g_bSystemTime1Ms) //系统1MS 时标到
{
g_bSystemTime1Ms = 0 ;
g_u16LedTimeCount++ ; //LED 计数器加一
if(g_u16LedTimeCount >= 500) //计数达到500,即500MS 到了,改变LED 的状态。
{
g_u16LedTimeCount = 0 ;
g_u8LedState = ! g_u8LedState ;
}
}
}
void main(void) //主程序
{ Timer0Init();
while(1)
{
LedProcess() ;
LedStateChange() ;
}
}
是的,我忘记这一段了。
void Timer0Init(void)
{
TMOD &= 0xf0 ;
TMOD |= 0x01 ; //定时器0 工作方式1
TH0 = 0xfc ; //定时器初始值
TL0 = 0x66 ;
TR0 = 1 ;
ET0 = 1 ;
}
谢谢,我用你给的程序试一下。
原来的程序是在别人试验板上用的,想学释放CPU的方法在面包板上做,我自己把程序改了,把数码管段选的定义取掉了,结果把不该取也取了,(贴到一楼的是其中一段),难怪有错误。谢谢各位指教,我再试一试。
你好,用你的这个程序在编译器里可以通过,可是烧到面包板上LED都亮, 不闪烁。
