1. 首页 > 科技

keilC51单片机中断程序老是提示undefined identifier,明明在前面已经定义了。求大佬解答,感激不尽?(单片机编程时出现undefined

keilC51单片机中断程序老是提示undefined identifier,明明在前面已经定义了。求大佬解答,感激不尽?(单片机编程时出现undefined identifier是什么意思? 大哥们教教我吧!)

单片机编程时出现undefined identifier是什么意思? 大哥们教教我吧!

undefined identifier是未定义的标志符,在程序内使用了没有被定义的标志符或者变量。

具体解决办法:找到未定义的标志符,对其进行赋值即可。

定义的是unsigned char num,在使用的时候,写成了NUM,也会出现同样的错误p1,undefined identifier:英文意思就是p1未定义,找不到p1编译出错。

扩展资料:

C语言单片机编程:

单片机软件设计使用C语言作为编程开发软件,采用模块化的程序结构。

设计了按键模块程序、RFID模块程序、日历时钟模块程序、GPRS模块程序、显示存储模块程序等,并编写系统主程序,将五个程序模块组合在一起,实现单片机控制系统的整体功能。

51单片机支持三种高级语言,即PL/M,C和BASIC。C语言是一种通用的程序设计语言,其代码率高,数据类型及运算符丰富,并具有良好的程序结构,适用于各种应用的程序设计,是使用较广的单片机编程语言。

单片机的C语言采用C51编译器(简称C51)。有C51产生的目标代码短,运行速度高,所需存储空间小,符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言或PL/M51语言目标代码混合使用 。

参考资料来源:百度百科-单片机C语言编程

参考资料来源:百度百科-单片机编程器

keil c51编程 老提示undefined identifier 急待解决

编译器找不到头文件AT89S52.h,所以你调用里面的定义被看作非法

用keil编译是显示 undefined identifier怎么解决啊,求高人指导

报错的内容跟你贴出来的程序不符,你可能找错地方了。

检查zntwj.c源文件的第24行,该行的i、j两个变量未定义过。

在keil中编译以下程序时出现所有定义变量都是undefined identifier是什么原因啊? 急!!

//没问题了,你的P口应该用大写。

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar i;

sbit lcdrs =P3^0;

sbit lcdrw =P3^1;

sbit lcden=P3^2;

sbit d1=P1^0;

sbit d2=P1^1;

uchar code t0[]="the temperature";

uchar code t1[]="is ";

uchar code wendu[]="0123456789";//乱码

sbit DQ=P3^7;//定义ds18b20总线IO

//液晶显示模块

void delay(uint z)

{

uint x,y;

for (x=100;x>1;x--)

for (y=z;y>1;y--);

}

void write_com(uchar com)

{

lcdrs=0;

P2=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_date(uchar date)

{

lcdrs=1;

P2=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void init_lcd()

{

lcden=0;

lcdrw=0;

write_com(0x38);

write_com(0x01);

write_com(0x0c);

write_com(0x06);

write_com(0x80);

for (i=0;i<16;i++)

{

write_date(t0[i]);

delay(0);

}

write_com(0x80+0x40);

for(i=0;i<16;i++)

{

write_date(t1[i]);

delay(0);

}

}

//温度采集模块

void tmpDelay(int num)//延时函数

{

while(num--);

}

void Init_DS18B20()//初始化DS1820

{

unsigned char x=0;

DQ=1;//DQ复位

tmpDelay(8);//稍作延时

DQ=0;//单片机将DQ拉低

tmpDelay(80);//精确延时 大于480us

DQ=1;//拉高总线

tmpDelay(14);

x=DQ;

tmpDelay(20);

}

unsigned char ReadOneChar()//读一个字节

{

unsigned char i=0;

unsigned char dat=0;

for(i=8;i>0;i--)

{

DQ=0;//给脉冲信号

dat>>=1;

DQ=1;//给脉冲信号

if(DQ)

dat|=0x80;

tmpDelay(4);

}

return(dat);

}

void WriteOneChar(unsigned char dat)//写一个字节

{

unsigned char i=0;

for (i=8;i>0;i--)

{

DQ=0;

DQ=dat&0x01;

tmpDelay(5);

DQ=1;

dat>>1;

}

}

unsigned int Readtemp()//读取温度

{

unsigned char a=0;

unsigned char b=0;

unsigned int t=0;

float tt=0;

Init_DS18B20();

WriteOneChar(0xCC);//跳过读序列号的操作

WriteOneChar(0x44);//启动温度转换

Init_DS18B20();

WriteOneChar(0xCC);//跳过列号的操作

WriteOneChar(0xBE);//读取温度寄存器

a=ReadOneChar();//连续读两个字节数据//读低八位

b=ReadOneChar();//高八位

t=b;

t<<=8;

t=t|a;//两字节合成一个整型变量

tt=t*0.0625;//得到真实十进制温度值,因为DS18B20可以精确到0.0625度,所以读回数据的最低位代表是0.0625度

t=tt*10+0.5;//放大十,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作

return(t);

}

void display()

{

unsigned int num,num1;

unsigned int shi,ge,xiaoshu;

num=Readtemp();

num1=num/10;

if(num1>37)

{d1=0;d2=1;delay(500);}

if(num1<10)

{d1=1;d2=0;delay(500);}

else

{d1=1;d2=1;}

shi=num/100;

ge=num/10%10;

xiaoshu=num%10;

write_com(0x80+0x40+5);

write_date(wendu[shi]);

write_com(0x80+0x40+6);

write_date(wendu[ge]);

write_com(0x80+0x40+7);

write_date(0x2e);

write_com(0x80+0x40+8);

write_date(wendu[xiaoshu]);

}

void main()

{

init_lcd();

while(1)

{

display();

delay(10);

}

}