我在 C 代码中遗漏了什么吗?编程 8051 MCU

am I missing something in C code? programming 8051 MCUs

我目前正在学习C,所以我尝试用编程器对我的AT89S52单片机进行编程。

用sdcc编译成功,上传也成功。但是当我尝试制作眨眼程序时,它并没有按照我的预期进行。我用闪烁功能制作了自己的头文件。其目的是以给定的延迟使 P1.0 上的 LED 闪烁。但是貌似延迟不行,而且P1.0开关的速度真的很快

这里是basicIO.h

#include <8052.h>

unsigned int i = 0;
void delay(int dl)
{
    for(i=0;i<=dl;i++) { //repeat 1ms delay x times
        TMOD = 0x01;    // Timer0 mode1
        TH0 = 0xFC;      //initial value for 1ms
        TL0 = 0x66;
        TR0 = 1;      // timer start
        while(TF0==0);  // check overflow condition
        TR0 = 0;     // Stop Timer
        TF0 = 0;    // Clear flag
    }
    
}
void on(void) {
P1_0 = 0x00;
}
void off(void) {
P1_0 = 0xFF;
}
void blink(int valdl) {
    P1_0 = 0x00;
    delay(valdl);
    P1_0 = 0xFF;
}

这里是 srccode.c:

#include <8052.h>
#include "basicIO.h"
void main(void)
{
    off();
    while(1)
    { 
        blink(100);
        blink(100);
    }
}

运行 onoffdelay 函数时没有错误,那么闪烁是怎么回事?

你拥有所有的功能,但你的主循环应该是

while(1)
{   on()
    delay(100);
    off();
    delay(100);
}

或使用

void blink(int valdl) 
{
    P1_0 = 0x00;
    delay(valdl);
    P1_0 = 0xFF;
    delay(valdl);
}