isp中软件延时计算器自动生成的c代码在c251中报错
已经后半夜了,keil c251 编译报错,因为keil比较笨,它提示往往不直接指出问题所在所以,我把工程导入vs code,提示是 两个i下面都有红色波浪号。怀疑会不会计算器当时针对C51设计,我现在用的是AI8051U,C251会不会有问题
// 延时 20ms (用于主机发送起始信号)
void Delay20ms(void) //@30.000MHz
{
unsigned long edata i;
_nop_();
_nop_();
i = 149998UL;
while (i) i--;
}问,针对用的是AI8051U,C251,软件延时代码正确的表达是什么样子的?
添加 #include <intrins.h> → 为 _nop_() 函数提供声明
还要注意指令集和频率
让延时精准
void _nop_(void);
void Delay20ms(void) //@30.000MHz
{
unsigned long edata i;
_nop_();
_nop_();
i = 149998UL;
while (i) i--;
} edata用于C251,C51不要用edata。 Ayb_ice 发表于 2026-6-26 10:47
void _nop_(void);
void Delay20ms(void) //@30.000MHz
感谢层主回复,也感谢姚工第一个回复
其实,在工程多文件的相关一个.h中我早已声明,我后来做了在c251中删除其他只留下延时这部分,编译完全通过,我认为不是延时代码原因
而keil中编译报错,提示信息不足以排查错误,这才是老大难问题,大家有什么这方面经验分享吗?
#ifndef __DHT11_H__
#define __DHT11_H__
#include <intrins.h> // 包含nop指令需要的头文件
// 1. 先定义类型,解决报错根源
#ifndef uint8
typedef unsigned char uint8;
#endif
页:
[1]