我在 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);
}
}
运行 on
、off
或 delay
函数时没有错误,那么闪烁是怎么回事?
你拥有所有的功能,但你的主循环应该是
while(1)
{ on()
delay(100);
off();
delay(100);
}
或使用
void blink(int valdl)
{
P1_0 = 0x00;
delay(valdl);
P1_0 = 0xFF;
delay(valdl);
}
我目前正在学习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);
}
}
运行 on
、off
或 delay
函数时没有错误,那么闪烁是怎么回事?
你拥有所有的功能,但你的主循环应该是
while(1)
{ on()
delay(100);
off();
delay(100);
}
或使用
void blink(int valdl)
{
P1_0 = 0x00;
delay(valdl);
P1_0 = 0xFF;
delay(valdl);
}