80C51单片机有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式。所谓位寻址,就是对内部RAM或可位寻址的特殊功能寄存器SFR内的某个位,直接加以置位为1或复位为0。
位寻址的范围,也就是哪些部份可以进行位寻址:
1、我们在第十二课学习51单片机的存储器结构时,我们已知道在单片机的内部数据存储器RAM的低128单元中有一个区域叫位寻址区。它的单元地址是20H-2FH。共有16个单元,一个单元是8位,所以位寻址区共有128位。这128位都单独有一个位地址,其位地址的名字就是00H-7FH。
这里就有一个比较麻烦的问题需要大家理解清楚了。我们在前面的学习中00H、01H。。。。7FH等等,所表示的都是一个字节(或者叫单元地址),而在这里,这些数据都变成了位地址。我们在指令中,或者在程序中如何来区分它是一个单元地址还是一个位地址呢?这个问题,也就是我们现在正在研究的位寻址的一个重要问题。其实,区分这些数据是位地址还是单元地址,我们都有相应的指令形式的。这个问题我们在后面的指令系统学习中再加以论述。
2、对专用寄存器位寻址。这里要说明一下,不是所有的专用寄存器都可以位寻址的。具体哪些专用寄存器可以哪些专用寄存器不可以,请大家回头去看看我们前面关于专用寄存器的相关文章。一般来说,地址单元可以被8整除的专用寄存器,通常都可以进行位寻址,当然并不是全部,大家在应用当中应引起注意。
专用寄存器的位寻址表示方法:
下面我们以程序状态字PSW来进行说明
D7 | D6 | D5 | D4
| D3 | D2
| D1 | D0 |
CY | AC
| F0 | RS1
| RS0
| OV
|
| P |
1、直接使用位地址表示:看上表,PSW的第五位地址是D5,所以可以表示为D5H
MOV C,D5H
2、位名称表示:表示该位的名称,例如PSW的位5是F0,所以可以用F0表示
MOV C,F0
3、单元(字节)地址加位表示:D0H单元位5,表示为DOH.5
MOV C,D0H.5
4、专用寄存器符号加位表示:例如PSW.5
MOV C,PSW.5
这四种方法实现的功能都是相同的,只是表述的方式不同而已。
关键字:51单片机 位寻址
引用地址:
51单片机位寻址指令与编程
推荐阅读最新更新时间:2024-03-16 15:40
基于AT89C51单片机的智能台灯设计
一.系统概述 系统使用的模块有AT89C51单片机+按键+两个不同颜色的小灯。 系统内使用AT89C51单片机作为主控,系统内分为普通模式和调节模式,上电之后就是普通模式,小灯会亮但是不能进行亮度调节,按下设置按键后亮度可调节的小灯亮,通过加减按键就能直接控制小灯的亮度。 二.仿真概述 1.系统上电台灯打开,此时的绿灯亮代表的是亮度无法修改的普通灯亮起。 2.按下设置按键后切换到可调节亮度的灯。 3.蓝色小灯的亮度调节是PWM调节,按键加和减可以调节信号的占空比,并实现小灯亮度的控制。 三.程序设计 使用Keil 51进行程序设计,打开Proteus时程序是默认烧录的状态,如果没有烧录点击AT89C51单片机并将
[单片机]
51单片机pwm调速程序
此程序是一个用51单片机来调直流电机转速的程序。当然也可以用来调整led灯的亮度,用定时器2来实现. #include reg52.h //包括一个52标准内核的头文件 #define uchar unsigned char #define uint unsigned int #define ulong unsigned long sbit PWM = P3^3; //要控制的风扇 sbit K= P3^7; //按键控制转速 uchar scale;//用于保存占空比的输出0的时间份额,总共10份 //延时程序 void delay10ms(void) { unsigned char i,j; for(i=20;i 0;i-
[单片机]
TJA1020+51单片机实现的LIN总线通讯源程序(master+slave)
LIN mater的51单片机代码 /**************master*****************/ #include REGX52.H #include intrins.h sbit p31=P3^1; sbit k1=P1^0; sbit k2=P1^1; sbit p20=P2^0; unsigned char t; unsigned char sendflag, flag; void delay(unsigned int i) { while(i--); } void send() { // 同步 ID data1 data2
[单片机]
用51单片机定时器中断设计电子钟
把前天设计的时钟的功能补全了一些,贴上来, #include reg52.h #define uchar unsigned char sbit rd=P2^6; sbit wr=P2^5; sbit lcde=P2^7; sbit k1=P1^0; sbit k2=P1^1; sbit k4=P1^3; sbit k8=P1^7; uchar code table1 = 2011-11-05 ; uchar code table2 = 00:00:00 ; uchar code table3 ={{ MON },{ TUE },{ WED },{ THU },{ FRI },{ SAT },{ SUN }};
[单片机]
51单片机的GPIO配置
导语 通过单片机控制外围器件(LED,蜂鸣器,数码管,按键),本质上是对于单片机IO口的操作,相对于STM32,51单片机IO口模式较少,但了解IO的内部对于学习了解51单片机也由很大的帮助。 GPIO GPIO(General Purpose Input Output),通用输入输出。既能当输入口使用,又能当输出口使用。端口,就是元器件上的一个引脚。可以通过软件去控制。 在大多数的时候,我们将IO口可以看为一个电子开关,通过向IO寄存器中写入相应的值,其输出的电平就随着寄存器的变化而变化,这是IO口的输出,在大多数的单片机中,需要去配置单片机的IO模式,是输入还是输出。 即需要预先初始化,配置GPIO的参数,再去使用
[单片机]
嵌入式学习笔记14——51单片机之A/D转换器
1. A/D转换器:将模拟信号转换为数字信号。 2. A/D转换的速度要比D/A慢,其原理如下图:
[单片机]
【51单片机】STC89C52独立键盘实验,含c代码(6)
1.参考教程: 清翔51单片机教程 2.实现效果: 利用独立键盘的按键,控制数码管数字的变化。 3.基本原理 **特点:**每个按键占用一个IO口,当按键数量较多时,IO口的利用效率不高,但程序简单,适用于所需按键较少的场合。 **原理:**以按键S2为例,给P30赋逻辑1,当S2被按下的时候,由于S2左端接地,则P30输出由高电平变低电平。S2没被按下依旧输出高电平。 4.参考代码 #include reg52.h #include intrins.h //标准库函数 #define uint unsigned int #define uchar unsigned char sbit DU = P2^6; //
[单片机]
51单片机的时钟及复位
时钟电路: 8031单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。 在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。内部振荡方式的外部电路如下图所示。 外部振荡方式是把外部已有的时钟信号引入单片机内。这种方式适宜用来使单片机的时钟与外部信号保持同步。外部振荡方式的外部电路如下图所示。 图中,电容器Col,C02起稳定振荡频率、快速起振的作用,其电容值一般在5-30pF。晶振频率的典型值为12MH2,采用6MHz的情况也比较多。内部振荡方式所得的时钟情号比较稳定,实用电路中使用较
[单片机]