我在C代码中遗漏了什么吗?8051单片机编程
我目前正在学习C语言,所以我试着用编程器为我的AT89S52单片机编程 使用sdcc works编译,上传也成功。但当我尝试制作blink程序时,它并没有达到我预期的效果。我用闪烁功能制作了自己的头文件。其目的是以给定延迟闪烁P1.0上的LED。但是看起来延迟不起作用,它真的很快打开和关闭P1.0 这是basicIO.h我在C代码中遗漏了什么吗?8051单片机编程,c,microcontroller,8051,C,Microcontroller,8051,我目前正在学习C语言,所以我试着用编程器为我的AT89S52单片机编程 使用sdcc works编译,上传也成功。但当我尝试制作blink程序时,它并没有达到我预期的效果。我用闪烁功能制作了自己的头文件。其目的是以给定延迟闪烁P1.0上的LED。但是看起来延迟不起作用,它真的很快打开和关闭P1.0 这是basicIO.h #include <8052.h> unsigned int i = 0; void delay(int dl) { for(i=0;i<=dl;i
#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;
}
#包括
无符号整数i=0;
无效延迟(int-dl)
{
对于(i=0;i您拥有所有函数,但主循环应该是
while(1)
{ on()
delay(100);
off();
delay(100);
}
或使用
void blink(int valdl)
{
P1_0 = 0x00;
delay(valdl);
P1_0 = 0xFF;
delay(valdl);
}
您还需要在关闭LED后等待,而不仅仅是在打开LED后,在闪烁
。否则,在关闭LED后,您将立即再次打开LED。我投票关闭此问题,因为这是一个简单的误解,而不是C编程问题。这不是问题的原因,但头文件不应包含functi它们可能,而且经常包含函数原型,但是实现应该是分开的。
void blink(int valdl)
{
P1_0 = 0x00;
delay(valdl);
P1_0 = 0xFF;
delay(valdl);
}