❶ 刚开始学习keil c51编程是个菜鸟级的,想请教一下在KEIL C51中全局变量和局部变量的设定方法
C51采用的是C89标准,不支持在函数体开始后又声明变量。你定义指针变量的语句必须保持在函数体的最前端。
网络嫌我字数不够
❷ 单片机Keil C51 C语言多文件如何使用全局位变量跪拜!!
不管你引用再多的文件
main函数只有一个吧!!
如果引用的c文件需要使用全局变量。就把变量写在引用文件前面
比如
int
i;
//全局变量
#include
"1.h"
#include
"2.h"
#include
"3.h"
不知道能不能帮到你
反正我是这么理解的
❸ 51单片机访问片内数据存储器某单元的内容用c语言怎么写
方法1:
char data *p; //定义一个指向片内RAM地址的指针
p = 0x30; //片内RAM地址为0x30
*p = 0x12; //向0x30内写入立即数0x12
方法2:
#include <absacc.h>
char x;
x = DBYTE[0x30]; //将片内RANM地址0x30的内容赋给变量x
DBYTE[0x30] = 0x12; //向0x30内写入立即数0x12
方法3:采用 _at_ 直接声明变量所处地址,但该变量必须是全局变量。
char data x _at_ 0x30 ; //x为char型全局变量,地址位于data区地址0x30
。。。。。
x = 0x12; //向0x30内写入立即数0x12
❹ static在51单片机中几种用法
static(静态) 是一种数据变量的存储方式而已,不存在什么用法之说,但了解它的特性,能帮你写出好程序。
静态变量的特性:
1、变量只定义一次(含定义时的初始化值);
2、只在定义范围内有效(其他地方、函数并不认识这个变量);
3、函数结束,变量值不丢失。
变量有 全局变量、局部变量之分;
全局变量在程序中,分配有固定物理存储空间,程序运行过程中,数据不丢失(就是自己有个房子)。
局部变量在程序中,没有固定物理存储空间。一般出现在子函数中,调用子函数,随机分配存储空间,子函数结束后,该空间回收,随机分配给其他函数使用。(就是租屋,你不租了,就租给别人)
有些时候,你又希望这个局部变量能保持,这样你下次回来还能接着算,于是就需要static 这个“静态”功能了。它能让这个分配的空间,一直给你保留着。
也许你会说,用全局变量就好了。是的,没错,它的功能几乎与全局等价了。但为什么不用全局,可能原因有以下2种:
1、全局变量对所有子函数都有效,谁都可以修改,可能会超出你的预计范围(就是说,房子虽然是你的,但大家都有钥匙,可以随便进来换换装修,你掌握并不了)
2、移植性高,子函数内的静态局部变量,只需要输出子函数即可。但全局变量,要么需要主文件为你定义这个全局变量,要么就会在多个C文件包含你的头文件时,发生重复定义全局变量问题。
当然,除了静态局部变量,还有静态全局变量,这个用于模块化程序设计里,为了避免其他模块出现同名全局变量问题,就使用了只针对本模块程序有效的 静态全局变量
❺ 51单片机变量 51的单片机变量是怎么个定义法。全局变量,局部变量都放在什么存储器里的
不能这样定义,这样定义是错的。你这个是赋值,不是定义在0x22单元格里。
unsigned char bdata SS _at_ 0x22;
只有在Keil编译环境下才可以这样使用。还有,这种语法不适合用C语言,我说的是不适合,不是不能用。C语言里面的指针就是针对这个的,不建议使用 _at_ 进行变量在RAM中固定,这样对程序编译优化时,带来很多麻烦,也得不到充分的优化。
其实用C语言指针的方法是可行的。
bdata区虽然有自己独立的位地址,但你用的是char型 ,是一个字节的,所以你说的0x22只是bdata区的字节地址,而不是位地址,那麽用C语言的方式实现 就是这样:
unsigned char *p;
p=0x22;
*p=50;
*p 表示指向0x22所在的单元格,就是将50赋值到0x22地址所指向的单元格里。
再从另一个角度讲,如果你没于传参或改变实参的情况下,不建议使用这类,即使有,也不是很建议。因为单片机高手是不会用_at_这类关键字进行变量定位的。
有什么疑问可以一起探讨。
希望我的回答对你有帮助,谢谢。
❻ 51单片机中,全局变量和全程变量是一回事吗
没听过全程变量,只听说过全局变量和局部变量2
种,全局变量是在这个函数中都可以使用,局部变量只在声明的函数内有效。
❼ 单片机C语言中的全局变量和中断问题,大神进
简单点:在需要使用a的文件里面,在最前面加一行:
extern char a;
在那个文件里面就可以直接用了。
如果多个文件会用到,就多个文件都写这么一行。
也可以了解一下头文件。
新建main.h, 内容如下:
#ifndef _MAIN_H_
#define _MAIN_H_
extern char a;
#endif _MAIN_H_
之后在需要用到a变量的文件内在最前面
#include "main.h"