变量位定义使用bit lock
IO口位定义使用sbit lock=P1^0;
希望可以帮到你,谢谢!
STM8的指令系统本身不支持位操作,一般通过以下方式进行位操作:
例如:
PA_ODR |= 0x04;//将PA_ODR寄存器的bit2置1
PB_DDR |= (1 5);//将PB_DDR寄存器的bit5置1
TIM1_IER =~ 0x01;//将TIM1_IER的bit0置0
ADC_CR3 =~ (1 6);//将ADC_CR3的bit6置0
类似的赋值方式对所有单片机均可采用,包括支持位操作的51单片机。
用C语言来对单片机编程,有的单片机也有那么几条很特殊的独有的编程语句,51单片机就有,先介绍两条。
第一条语句是: sfr P0 = 0x80;
SFR这个关键字,是51单片机特有的,他的作用是定义一个单片机特殊功能寄存器(special function register)。51单片机内部有很多个小模块,每个模块有8个开关。每个模块呢,都有一个房间和唯一的房间号。那么P0就是一个功能模块,就住在了0x80这个房间里,我们就是通过设置P0的内部这个模块的8个开关,来让单片机的P0这8个IO口输出高电平或者低电平的。
第二条语句是: sbit LED = P0^0;
这个sbit,就是对刚才所说的SFR里边的8个开关其中的一个进行定义。经过上边第二条语句后,以后只要在程序里写LED,就代表了P0.0口(“^”这个符号在数字键6上边),注意这个P必须大写,也就是说我们给P0.0又取了一个更形象的名字叫做LED。
了解了这两个语句后,我们来大概看一下单片机的特殊功能寄存器。注意,每个型号的单片机都会配有生产厂商所写的数据手册(Datasheet),所以我们来看一下STC89C52RC的数据手册,从21页到24页,全部是对特殊功能寄存器的介绍以及地址映射列表。我们在使用这个寄存器之前,必须对这个寄存器的地址进行说明。是不是花花绿绿的太多了,记不住啊,这个没关系的,不需要你记住,了解一下,后边大部分我会慢慢给大家解释,少部分需要用到的时候,自己过来查手册就可以了,做技术不是为了应付考试,你可以随时翻阅手册查找你需要的资料。
P2_2,你把它当成引脚来使用,编译系统就不认识了。
对并口各位的规定本来就是P2^0等等。
P2_2,只能是自定义的《位变量名》,如下才可以:
sbit P2_2 = P2^2;
把 P2_2,放在等号前面,就没有事了。
楼主追问的图片,也说明了这一点。
表示位地址是在汇编语言中才用的,而在keilc中是不用的.
举例说明吧,如寄存器PSW中的8个位是可位寻址的,PSW的单元地址是D0H,其中的进位标志位Cy,可表示成
1、直接位地址:D7H,
2、符号表示: Cy,这种方法用的最多
3、寄存名表示:PSW.7,因Cy在PSW的最高位,这种方法偶尔用
4、单元地址表示:0D0H.7,这种方法用的不多.
再如:20H单元中的8个位是可以位寻址的,位地址是:00H~07H,以其中的06H位为例
则汇编程序可表示为:
1、直接位地址:CLR 06H
2、符号:先定义,BUSY BIT 06H,程序可写成: SETB BUSY
3、单元名表示,也是先定义20H单元,COMM EQU 20H,则位地址表示成:SETB COMM.6
4、单元地址表示:CLR 20H.6
这是写程序时,需要定义标志位的。
汇编语言写程序时址是00H~7FH,占用20H~2FH,共16个单元。
所以,用BIT定义,如
CLK BIT 01H; 这就是把01H的位定义为符号位CLK
用C语言写程序时,就不用考虑位地址了,直接用bit 定义,如
bit CLK
至于位地址是由编译系统来编排的。
单片机位定义的写法的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:单片机位定义的写法