精华内容
下载资源
问答
  • 一款很好的51单片机定时器学习软件,可以自动计算初值,帮助我们编写单片机程序。
  • else if(temp==0xfe) //如果是接受到0xfe,那么结束,begin赋值0,不进入下次赋值,一直到接受到0XFF为止 { begin=0; num1=0;//下次接受num1是从0开始接受 flag=1;//结束后,主函数运行 } } } } //现在问题是不...
  • 关于51单片机的IO接口的地址赋值大小理解前提了解关于51单片机的IO接口的地址赋值大小理解其他单片机定义 前提了解 提示:我们需要回顾C语言的类型定义,如int aa=1;代码编译运行的时候计算机运行到int aa=1,...

    关于51单片机的IO接口的地址与赋值大小理解

    前提了解

    提示:我们需要回顾C语言的类型定义,如int aa=1;代码编译运行的时候计算机运行到int aa=1,它会进行下列操作:首先计算机找到一片4字节大小的地方,然后将这个地方的地址赋值给aa,并且将1保存在这个有着4字节大小的地址里面。
    在这里插入图片描述

    关于51单片机的IO接口的地址与赋值大小理解

    在51单片机的头文件reg51.h里面我们可以看到sfr P1 = 0x90。
    首先我们需要理解SFR:SFR也是一种扩充数据类型,占用一个内存单元,值域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。如用sfr P1 = 0x90这一句定P1为P1端口在片内的寄存器,在后面的语句中我们可以用P1 = 255(对P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。
    sfr—此类型变量可以访问指定的8位特殊功能寄存器,地址范围为0x80~0xFF。定义格式:sfr 变量名=变量地址。
    一个内存单元:一个字节大小
    特殊功能寄存器:寄存器就是我们保存数据的地方,不过他是以0,1这样的类型保存。为什么说特殊呢?因为它是与我们的51单片机的P0,P1,P2等IO接口和其他设计有关联的。
    sfr P1=0x90:定义一个sfr类型的P1的变量,并将0x90这个地址赋值给P1。

    下面是给P1变量赋值,
    P1=0xfe(16进制)=254(10进制)=11111110(2进制)
    为什么说这些寄存器有特殊功能呢?看下图,给这个地址的赋值大小之后,会影响P1各个IO接口的高低电压。
    在这里插入图片描述
    其他赋值也一样,P1=0x01=1=00000001
    通过给这些地址的寄存器赋值,会影响IO接口的高低电压,所以说这些寄存器是特殊功能寄存器。

    其他单片机定义

    bit—定义位变量,定bai义位变量时可以为du变量赋值,但不能指zhi定变量的地址。定义格式:bit 变量名=变量值。
    sbit—此类型变量只要用于访问可位寻址的特殊功能寄存器中的某个位。定义格式:sbit 变量名=位地址;sbit 变量名=SFR地址^位序号;sbit 变量名=sfr16变量^位序号。
    sfr—此类型变量可以访问指定的8位特殊功能寄存器,地址范围为0x80~0xFF。定义格式:sfr 变量名=变量地址。
    sfr16—此类型的变量可访问16为特殊功能寄存器。定义格式:sfr16 变量名=变量地址。此处的变量地址为16位中的低8位地址,其地址范围为0x80~0xFF。通过sfr16变量读16位特殊功能寄存器时,先读低字节,后读高字节;写特殊功能寄存器时先写高字节,后写低字节。

    第一次写有什么不对的地方,欢迎提出。有什么迷惑的地方也可以联系我,互相学习。

    展开全文
  • stc89C52RC单片机,1~1000范围内任意整数,赋值给io口(P2(低8位)、P1^0(第9位)、P1^1(第10位))。 想先把整数转化为16进制数,然后给io赋值。但不会编,请高手指教。
  • 单片机常用的几种赋值操作

    千次阅读 2019-09-22 14:24:26
    之前使用单片机编程时,通常会使用一些较为不专业的语句,现在和大家一起学习下常见的单片机赋值操作; 一、把变量的某位清零 //定义一个变量 a = 1001 1111 b (二进制数) unsigned char a = 0x9f; //对 bit2 清零...

    之前使用单片机编程时,通常会使用一些较为不专业的语句,现在和大家一起学习下常见的单片机赋值操作;
    一、把变量的某位清零

    //定义一个变量 a = 1001 1111 b (二进制数) 
    unsigned char a = 0x9f;  
    //对 bit2 清零 
    a &= ~(1<<2); 
    //括号中的 1 左移两位,(1<<2)得二进制数:0000 0100 b  
    //按位取反,~(1<<2)得 1111 1011 b 
    //假如 a 中原来的值为二进制数: a = 1001 1111 b 
    //所得的数与 a 作”位与&”运算,a = (1001 1111 b)&(1111 1011 b), 
    //经过运算后,a 的值 a=1001 1011 b 13 // a 的 bit2 位被被零,而其它位不变
    

    使用 a&=~(1<<x);可以将第x位清零;

    二、把变量的某几个连续位清零

    //若把 a 中的二进制位分成 2 个一组  
    //即 bit0、bit1 为第 0 组,bit2、bit3 为第 1 组,  
    //  bit4、bit5 为第 2 组,bit6、bit7 为第 3 组 
    //要对第 1 组的 bit2、bit3 清零   
    a &= ~(3<<2*1);   
    
    //括号中的 3 左移两位,(3<<2*1)得二进制数:0000 1100 b 
    //按位取反,~(3<<2*1)得 1111 0011 b 
    //假如 a 中原来的值为二进制数: a = 1001 1111 b  
    //所得的数与 a 作”位与&”运算,a = (1001 1111 b)&(1111 0011 b),  
    //经过运算后,a 的值 a=1001 0011 b 14 // a 的第 1 组的 bit2、bit3 被清零,而其它位不变。 
    //上述(~(3<<2*1))中的(1)即为组编号;如清零第 3 组 bit6、bit7 此处应为 3 
    //括号中的(2)为每组的位数,每组有 2 个二进制位;若分成 4 个一组,此处即为 4 
    //括号中的(3)是组内所有位都为 1 时的值;若分成 4 个一组,此处即为二进制数“1111 b” 
    
    //例如对第 2 组 bit4、bit5 清零 
    a &= ~(3<<2*2);
    

    使用a&=~((2^m-1)<<m*n) m个为一组 第n组清零

    三、对变量的某几位进行赋值

    //a = 1000 0011 b 
    //此时对清零后的第 2 组 bit4、bit5 设置成二进制数“01 b ” 
     a |= (1<<2*2); 
    //a = 1001 0011 b,成功设置了第 2 组的值,其它组不变 
    

    使用a|=(Q<<m*n) m个为一组,设置第n组的值为Q

    四、对变量的某位取反

    //a = 1001 0011 b 
    //把 bit6 取反,其它位不变 
    a ^=(1<<6); 
    //a = 1101 0011 b 
    

    使用a^=(1<<m) 使第m位取反

    小结:赋值使用或|,清零使用与&,取反使用异或^

    希望可以对大家学习起到帮助。

    展开全文
  • 当我们要对text寄存器的bit0...和|操作符进行清零和赋值操作。 例1: text&=0xFE; //将bit0清零 text|=0x01; //对bit0赋值1 例2: GPIOA->BSRRL&=0XFF0F; //将4-7位清零 GPIOA->BSRRL|=0...

    当我们要对text寄存器的bit0设置为1时,我们可能会这样写:

    text=0x01;

    但实际上这种操作是不对的,因为这样会导致text的其他位全部变成0。

    在这种情况下,我们需要使用&和|操作符进行清零和赋值操作。

    例1:

    text&=0xFE;   //将bit0清零

    text|=0x01;    //对bit0赋值1

     

    例2:

    GPIOA->BSRRL&=0XFF0F;           //将4-7位清零

    GPIOA->BSRRL|=0X0040;           //对4-7位赋值

     

     

    展开全文
  • 进行boot升级时,发现应用层的常量值不变,断电后才恢复。原因为:

    进行boot升级时,发现应用层的常量值不变,断电后才恢复。原因为:

    展开全文
  • P12口是触发端,低电平触发时为0,却不能给他赋值0,用该脚接传感器也没用。是什么原因呢。
  • STM32绝对地址赋值

    2020-06-19 19:37:34
    只能用于RAM (*((volatile u32 *)0x20002000)) = 4; FLASH还得需要FLASH读写
  • 接下来我们去看看单片机的原理图,找到led 模块。如图可以看到led的阳极是连接的VCC(电源高电平)阴极连接的接口是单片机的I/O口P20到P27.要想led点亮只需控制单片机I/O口输出低电平即可(单片机I/O口默认高电平)。接...
  • 比较常用的方法是跳转到程序的入口地址,利用汇编LJMP、JMP等跳转语句跳到程序的初始入口。但是现在常用的一些单片机(8051、STM32等)在硬件上都支持软件复位,配置专门的寄存器就可以实现复位功能。例如常用的8051...
  • 单片机c语言变量的定义和赋值

    千次阅读 2012-02-10 17:57:18
    用sfr16定义16位特殊功能寄存器时,等号后面是它的低位地址,高位地址一定要位于物理低位地址之上。注意的是不能用于定时器0和1的定义。  sbit可定义可位寻址对象。如访问特殊功能寄存器中的某位。其实这样应用是...
  • STM32单片机地址映射

    2019-11-29 15:41:34
    //开辟一个以0x40000000+0x00010000+ 0x1000为地址的结构体指针 /** * @brief Universal Synchronous Asynchronous Receiver Transmitter */ typedef struct { __IO uint32_t SR; /*!, Address ...
  • sfr和sfr16可以直接对51单片机的特殊寄存器进行定义,定义方法如下: sfr 特殊功能寄存器名= 特殊功能寄存器地址常数; sfr16 特殊功能寄存器名= 特殊功能寄存器地址常数; 我们可以这样定义AT89C51的P1口sfr P1 = 0x...
  • 单片机中绝对地址的访问

    千次阅读 2020-04-01 19:57:39
    C51编译器提供了一组宏定义来对51系列单片机的code、data、pdata和xdata空间进行绝对寻址。规定只能以无符号数方式访问,定义了8个宏定义,其函数原型如下: #define CBYTE((unsigned char volatile*)0x50000L) #...
  • 操作特殊寄存器,有时需要对同一寄存器配置多次,而每一次如果进行直接赋值的话,会把前一次的赋值覆盖掉,这样就不能实现应有的功能。所以为了不改变前面的设置,而用逻辑与或进行配置。 如果要将某一位置1,其他位...
  • 如题~
  • 编程将外部数据存储器1050H~1054H单元分别赋值为 00,01,02,03,04,使用存储器Memory#1窗口显示如下结果图。 一、思路 前面指令系统我们讲到,访问外部数据存储器要用MOVX指令,而且只能使用寄存器间接寻址,忘记了...
  • 今天在做单片机的一个小程序,本来以为改一改例子程序很简单,结果耗费了一一整天时间。程序中用了很多strcat函数对字符串进行拷贝,我为了增强程序的通用性,就把原来字符串的地方用char数组代替。结果出现了很多...
  • 单片机

    2020-02-18 19:31:48
    单片机 单片机内部结构 51单片机的IO口 中断系统 场效应管的线宽 一般笔记本是7纳米 单片机组成:CPU、存储器、IO口 89C52:8是8051内核、9是型号(意思是内部含Flash、E2prom)、C是指COMS的场效应管、2是片内的存储...
  • 51单片机HelloWorldkeil5创建工程并创建主函数编写主函数点亮流水灯写入到单片机运行程序 keil5创建工程并创建主函数 1.创建工程 ...如图,是P1来控制这8个灯的亮灭,0表示亮,1表示灭,我们只需要给P1赋值
  • 1、PIC单片机程序的基本格式 先介绍二条伪指令: EQU ——标号赋值伪指令 ORG ——地址定义伪指令 PIC16C5X单片机在RESET后指令计算器PC被置为全“1”,所以PIC16C5X几种型号芯片的复位地址为: PIC16C54/55:1...
  • 单片机外设(ram、寄存器)地址详解

    千次阅读 2020-01-05 13:01:13
    外设与内设 在学习汇编语言时,我们会接触到一些寄存器,比如R0、R1、还有栈指针寄存器SP、下一条指令寄存器PC 等等。这些寄存器是存在于内核(如CPU)之内的,这些寄存器是我们...因此在单片机的引导程序建立了c...
  • 单片机基础-第一个单片机系统

    千次阅读 多人点赞 2020-05-14 10:17:11
    单片机基础-第一个单片机系统 简单的单片机系统 构成单片机系统——单片机+外围器件 如果把单片机和外围器件组合起来,实现一定的功能,那我们就称单片机和外围器件组成了单片机系统。 如何控制一个发光...
  • 1、PIC单片机程序的基本格式 先介绍二条伪指令: EQU ——标号赋值伪指令 ORG ——地址定义伪指令 PIC16C5X单片机在RESET后指令计算器PC被置为全“1”,所以PIC16C5X几种型号芯片的复位地址为: PIC16C54/55:1...
  •  所以,你在看别人写的程序的时候,会经常看到给单片机寄存器赋值的语句。下面就以简单的控制51单片机引脚高低电平来说明一下。(不要总是存在51单片机已经淘汰的想法,51单片机至今任然是出货量的单片机,并且各...
  • 单片机笔记

    千次阅读 2020-02-17 14:52:38
    单片机第一章 第一章 将组成微型计算机的个功能部件:中央处理器(CPU)、存储器(RAM、ROM、EPROM)、定时/计数器、串行口、I/O接口电路集合在一块集成电路芯片中从而构成完整的微型计算机,故称:单晶片微型...
  • 在上一篇中《单片机实现跑马灯》中我们完成了一个漂亮的流水灯,里面有一段代码我们来分析一下吧,看看单片机是怎么理解这段代码的。 《单片机实现跑马灯》(点击图片跳转)#include  //此文件中定义了51的一些...
  • 单片机教程

    2013-08-28 16:36:19
    点亮一个led灯 用逐位赋值的方法点亮第一、第三、第五、第七个发光二极管

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,827
精华内容 4,730
关键字:

单片机地址赋值