【发布时间】:2021-06-14 22:27:47
【问题描述】:
我目前正在学习 C,所以我尝试用编程器对我的 AT89S52 MCU 进行编程。
用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);
}
}
运行on、off或delay函数没有错误,那么blink是怎么回事?
【问题讨论】:
-
在
blink中,您还需要在关闭 LED 后等待,不仅在打开后等待。否则关闭后立即重新打开。 -
我投票结束这个问题,因为这是一个简单的误解,而不是 C 编程问题。
-
这不是问题的原因,但头文件不应包含函数实现。它们可能并且经常确实包含函数原型,但实现应该是分开的。
标签: c microcontroller 8051