① 单片机C语言的一个问题 static bit a 什么意思
在单片机C语言中,bit
a表示定义一个变量a,其类型为bit型,所谓的bit型就是用一位二进制数来表示变量。bit型的取值为0或1。
static
bit
a表示定义一个bit型的变量a,其为静态变量,只初始化一次即可。
② 51 微控制器中 DPH 和 DPL
DPH和DPL是DPTR暂存器的高八位和低八位。DPTR是16位暂存器。DPH/DPL可以单独作为8位暂存器使用。
开侍肢中断以后,在中断服务子程式中设定一个中断次数计数器,统计达到2次后
中断次数计数器清0,然后再把莫暂存器加一。
51微控制器中 equ p2.1
这是一个巨集指令,申明一个变数,在程式中它代表P2.1这个IO口。
不是C51,是51系列微控制器.
51系列微控制器和PIC系列微控制器的在内部结构上完全不一样:51微控制器的一个指令周期占12个机器周期,但PIC微控制器一个指令周期只占4个机器周期;51微控制器有上百条指令,属于RISC系统,PIC的中端8位微控制器最多只有38条指令属于CISC系统。传统型51微控制器只有40和44和20引脚的,而PIC的8位单片机种类繁多,从6引脚到64引脚的微控制器都有。
51微控制器只有8位的,而PIC微控制器有8位、16位、32位的微控制器,还有特殊的内嵌DSP功能的dsPIC微控制器。
在中断方面,51系列微控制器有中断向量,微控制器内CPU直接判断中断型别来呼叫中断子程式。而PIC的8位微控制器没有中断向量,需在中断子程式内判断中断型别(16位和32位的PIC微控制器有中断向量,而且比51微控制器的多得多冲塌)
IO方面,所有PIC微控制器的IO口驱动能力比51的要强,因为pic微控制器全是推挽输入输出。并且对PIC微控制器的IO操作前需要指定该IO口是输入还是输出。不是说双向还是单向,而是说,51微控制器只要读IO口就是输入,写IO口就是输出,而PIC的需要在读之前指定为IO输入才能读到正确的数值,如果是IO输出,则程式读到的值恒为1。
INT0是外部中断0,INT1是外部中断1,这两个是不同的中断源,实现的功能是完全一样的。
区别是在优先顺序设定一样的情况下,INT0的优先顺序比INT1高。即如果两者同时发生中断,那么先响应INT0。
不能 可以加一条指令
MOV A,DPH
CJNE A,#00H,LOOP1
或者
MOV R2,DPH ; R0 - R7 都可以
CJNE R2,#00H,LOOP1
自定义的资料 一般是因为不能定义data做变数名 所以定义dat 来表示资料
static(静态) 是一种资料变数的储存方式而已,不存在什么用法之说,但了解它的特性,能帮你写出好程式。
静态变数的特性:
1、变数只定义一次(含定义时的初始化值);
2、只在定义范围内有效(其他地方、函式并不认识这个变数);
3、函式结束,变数值不丢失。
变数有 全域性变数、区域性变数之分;
全域性变数在程式中,分配有固定物理储存空间,程式执行过程中,资料不丢失(就是自己有个房子)。
区域性变数在程式中,没有固定物理储存空间。一般出现在子函式中,呼叫子函式,随机分配储存空间,子函式结束后,该空间回收,随机分配给其他函式使用。(就是租屋,你不租了,就租给别人)
有些时候,你又希望这个区域性变数老判世能保持,这样你下次回来还能接着算,于是就需要static 这个“静态”功能了。它能让这个分配的空间,一直给你保留着。
也许你会说,用全域性变数就好了。是的,没错,它的功能几乎与全域性等价了。但为什么不用全域性,可能原因有以下2种:
1、全域性变数对所有子函式都有效,谁都可以修改,可能会超出你的预计范围(就是说,房子虽然是你的,但大家都有钥匙,可以随便进来换换装修,你掌握并不了)
2、移植性高,子函式内的静态区域性变数,只需要输出子函式即可。但全域性变数,要么需要主档案为你定义这个全域性变数,要么就会在多个C档案包含你的标头档案时,发生重复定义全域性变数问题。
当然,除了静态区域性变数,还有静态全域性变数,这个用于模组化程式设计里,为了避免其他模组出现同名全域性变数问题,就使用了只针对本模组程式有效的 静态全域性变数
差不多,各有各的好处
锐志的配件多一点,带一个u *** -ISP,可以用AT89C51;多一个可以下载AVR微控制器的功能,但液晶是1062,普中的最新款我记得是12864,60块;
普中的开发箱不自带ISP下载线,得花点钱买个转接板,不过一般用不到。
看完淘宝,个人觉得最好买普中最新款微控制器开发箱,支援STM32的那个。因为学完C51可以直接学ARM了,AVR什么的和51都差不多。能把ARM和微控制器做到了一块板子上,可以给你省掉以后买ARM学习板的钱。
那个电容不是用来助振的,是用来滤除外界串入的干扰波的,有两个组成,在晶振的两个脚与地之间串联。
详细的设计理论,与EMI(电磁相容)方面有关。
如果不装这两个电容,会给微控制器造成不好的工作条件,容易宕机,或程式指标异常跳转。
如果要换,只能往小一点换,但不能换的太小,而且大小与晶振的主频有关系。
③ 如图所示:单片机的Keil软件里在子函数里为什么定义static 会有警告
静态局部变量在函数内定义,生存期为整个源程序,但作用域与自动变量相同,只能在定义该变量的函数内使用。退出该函数后,尽管该变量还继续存在,但不能使用它。所以 b =100会常驻内存,单片机的RAM本来就小,所以编译器可能不允许。
④ 单片机C语言中static bit 是什么类型侧重点是后面的bit是什么意思,前面的static是静态
bit是位定义,就是单纯一个位,类似于BOOL型变量,不过这个定义不是正规,不是所有的编译器都能编译的,static你都知道啦,我就不解释了
⑤ static在51单片机中几种用法
static(静态) 是一种数据变量的存储方式而已,不存在什么用法之说,但了解它的特性,能帮你写出好程序。
静态变量的特性:
1、变量只定义一次(含定义时的初始化值);
2、只在定义范围内有效(其他地方、函数并不认识这个变量);
3、函数结束,变量值不丢失。
变量有 全局变量、局部变量之分;
全局变量在程序中,分配有固定物理存储空间,程序运行过程中,数据不丢失(就是自己有个房子)。
局部变量在程序中,没有固定物理存储空间。一般出现在子函数中,调用子函数,随机分配存储空间,子函数结束后,该空间回收,随机分配给其他函数使用。(就是租屋,你不租了,就租给别人)
有些时候,你又希望这个局部变量能保持,这样你下次回来还能接着算,于是就需要static 这个“静态”功能了。它能让这个分配的空间,一直给你保留着。
也许你会说,用全局变量就好了。是的,没错,它的功能几乎与全局等价了。但为什么不用全局,可能原因有以下2种:
1、全局变量对所有子函数都有效,谁都可以修改,可能会超出你的预计范围(就是说,房子虽然是你的,但大家都有钥匙,可以随便进来换换装修,你掌握并不了)
2、移植性高,子函数内的静态局部变量,只需要输出子函数即可。但全局变量,要么需要主文件为你定义这个全局变量,要么就会在多个C文件包含你的头文件时,发生重复定义全局变量问题。
当然,除了静态局部变量,还有静态全局变量,这个用于模块化程序设计里,为了避免其他模块出现同名全局变量问题,就使用了只针对本模块程序有效的 静态全局变量
⑥ static 在单片机c语言用用法
首先static变量不是全局变量,全局变量在整个程序中均可见。且可以在整个程序的任何位置进行修改。
而static变量,只在声明它的函数内看见,也只有在声明它的函数内可以被修改。即便在函数外或其它函数中有同名的变量,也和它不是同一变量。
和局部变量相比,局部变量在每次调用函数时,变量值都会重置。而static变量,在每次调用函数时,它都会保留这上次调用时最后一次赋值过的值。
总之,static是一种特殊的局部变量,它可以保存函数上次调用时这个变量的状态。
⑦ 单片机变量定义类型
C语言中,变量一般有两种属性,分别是:存储类别、数据类型。
例如定义一个变量:static unsigned char var = 0; 上述语句中,static(静态的)为变量的存储类别,unsigned char(无符号字符型)为变量的数据类型,var为变量名,初始化值为0。
下面给你说明几点。
存储类别:即变量在代码运行期间的存储方式。c语言提供了4种,分别是:auto(自动的)、static(静态的)、extern(外部的)、register(寄存器的)。
默认情况下,如果不加存储类别,则该变量是auto类的,该关键字可以省略,其它三个不能省。static的用法是,定义一个局部变量,该变量只进行一次初始化,在程序运行期间一直占用着内存,每次调用完毕都保持本次调用完后得到的值(而auto调用完一次即释放内存,下次调用用从新进行初始化)。extern:一个变量被定义成全局变量,加上该关键字,意思是提醒编译器,该变量是在别的C文件中(即你想再一个C文件中调用另外一个C文件的变量,需用该关键字进行引入)。register:定义一个变量为该存储类型,建议编译器将该变量存放在CUP内部寄存器中,以便该变量频繁调用而提高代码运行速度。注意,它是建议型的,一般用在循环次数多的地方,因为变量一般存放在内存中,每次CUP访问它都得跑到内存去提取,次数多了,影响运行速度。放在内部寄存器就快多了(当然放不放我们不知道,只是建议编译器这么做),这种变量也是用完就释放。
数据类型:C语言提供了三种基本数据类型:char型 int型 float型。
默认情况下,char/int/float是指有符号的,即前面都省略了signed关键字,如果需要定义成无符号型的,需在前面加上不可省略的unsigned关键字。char占一个字节,int占2个字节(在有的环境下是4个字节),float占4个。表示的数据范围也比较明确,char一个字节8位,共256种状态,有符号的最高位表示符号,0为正,1为负,其余7位表示数字位,2的7次方。int型16位 的,一样。float型的数据必须要有小数点,一般float能表示6~7位有效数字。上述的数据类型中,如果范围还不够大,还可以定义成long型,即长整型,占4个字节,而浮点型可以定义成double型,可以表示16~17为小数,当然,它也只占四个字节。