Ⅰ static在51单片机中几种用法
static(静态) 是一种数据变量的存储方式而已,不存在什么用法之说,但了解它的特性,能帮你写出好程序。
静态变量的特性:
1、变量只定义一次(含定义时的初始化值);
2、只在定义范围内有效(其他地方、函数并不认识这个变量);
3、函数结束,变量值不丢失。
变量有 全局变量、局部变量之分;
全局变量在程序中,分配有固定物理存储空间,程序运行过程中,数据不丢失(就是自己有个房子)。
局部变量在程序中,没有固定物理存储空间。一般出现在子函数中,调用子函数,随机分配存储空间,子函数结束后,该空间回收,随机分配给其他函数使用。(就是租屋,你不租了,就租给别人)
有些时候,你又希望这个局部变量能保持,这样你下次回来还能接着算,于是就需要static 这个“静态”功能了。它能让这个分配的空间,一直给你保留着。
也许你会说,用全局变量就好了。是的,没错,它的功能几乎与全局等价了。但为什么不用全局,可能原因有以下2种:
1、全局变量对所有子函数都有效,谁都可以修改,可能会超出你的预计范围(就是说,房子虽然是你的,但大家都有钥匙,可以随便进来换换装修,你掌握并不了)
2、移植性高,子函数内的静态局部变量,只需要输出子函数即可。但全局变量,要么需要主文件为你定义这个全局变量,要么就会在多个C文件包含你的头文件时,发生重复定义全局变量问题。
当然,除了静态局部变量,还有静态全局变量,这个用于模块化程序设计里,为了避免其他模块出现同名全局变量问题,就使用了只针对本模块程序有效的 静态全局变量
Ⅱ 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(电磁相容)方面有关。
如果不装这两个电容,会给微控制器造成不好的工作条件,容易宕机,或程式指标异常跳转。
如果要换,只能往小一点换,但不能换的太小,而且大小与晶振的主频有关系。
Ⅲ 请问单片机的电路板以及一些数据线可以通过飞机托运吗!
可以的,我上个星期带很多零件和电路板坐飞机,我只有一个小包包,我直接丢去托运,空手上飞机。这些东西是可以通过托运的,如果你要自己拿着带上飞机通过安检的可能性不大。免得搞出麻烦,直接丢托运。
Ⅳ 单片机中堆栈有什么用
1、堆栈空间分配
栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
2、堆栈缓存方式
栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收侍燃算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
3、效率比较
栈由系统自动分配,速度较快。但程序员是无法控制的。
堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。
4、存储内容
栈: 在函数调用时,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。
当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向函数的返回地址,也就是主函数中的下一条指令的地址,程序由该点继续运行。
堆:一般是在堆的头部用一个老凯虚字节存放堆的大小。堆中的具体内容由程序员安排。
(4)山东单片机回收扩展阅读:
简介
单片机应用中,堆栈是个特殊存储区,堆栈属于RAM空间的一部分,堆栈用于函数调用、中断切换时保存和恢复现场数据。
堆栈中的物体具有一个特性:第一个放入堆栈中的物体总是被最后拿出来, 这个特性通常称为先进后出 (FILO—First-In/Last-Out)。 堆栈中定义了一些操作, 两个最重要的是PUSH和POP。 PUSH(入栈)操作:堆栈指针(SP)加1,然后在堆栈的顶部加入一 个元素。
POP(出栈)操作相反,出栈则先将SP所指示的内部ram单元中内容送入直接地址寻址的单元中(目的位置),然后再孙春将堆栈指针(SP)减1.。这两种操作实现了数据项的插入和删除。