微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于C语言变量如何和单片机中具体硬件对应

关于C语言变量如何和单片机中具体硬件对应

时间:10-02 整理:3721RD 点击:
各位大神, 本人刚学习单片机。有一个问题想咨询一下大家。
就是我写的C语言变量,是如何和实际单片机中的某个单位元器件对应上的呢?
比如,我要控制一个LED灯点亮,那我写了一堆代码,设备是怎么知道我这堆代码是控制这个LED灯的?
是靠C语言中变量来控制吗?怎么让这个变量对应的是这个LED灯呢?
问题可能有些显得白痴,麻烦大神别笑。

C语言的单片机编程会有对应芯片的头文件,里面定义了单片机寄存器的名称和其地址对应关系,比如51单片机的P0口的寄存器地址是0X80,所有对P0口的操作都是对这个地址进行的,不如读或写。
在头文件里的定义是sfr P0   = 0x80;,定义了P0在程序里代表的地址是0X80,当然你自己也可以重新定义,比如#define LED_PORT P0,这就定义了LED_PORT等同与P0,在程序中的LED_PORT在编译时就等同与P0,也就是0X80地址。
这是C语言中各种定义方式的问题,你要查看这方面的资料。

先把单片机引脚弄明白吧,一般io口的高低电平控制led亮灭

最近我也在接触单片机,对于你的问题,涉及到编译器原理了,你只要了解单片机端口特性,特别是P1~P3。

谢谢解答啦!这么说我就理解了。

我没有怎么接触过51单片机,直接看的ST的STM32系列的单片机。
看STM32的芯片手册,可以看到寄存器的基址还有偏移量什么的。
然后再去看一下,ST提供的头文件,就可以看到他们用C语言的指针把这些变量
直接定义在了相应的地址上。这样我们改变这些变量值时,就直接把值赋值在相应的地址。

你先要看一下相关的单片机资料,搞清楚模块部分所对应的寄存器地址,如果不是很清楚可以看一下头文件里面给寄存器分配的地址,然后再对应原理图,找到你需要控制的IO口,判断你的硬件电路在什么条件可以控制IO的状态,比如按键是给IO口高电平或者低电平,高低电平哪一种可以得到你需要的结果菜鸟意见

进来看看了 哦,

不知道你仔细翻看了单片机DATASHEET没有,是不是有很多寄存器?
不知道你仔细翻看单片机的“REG52.h”没有,是不是有很多端口地址定义?
不知道你看到过C语言里面的SFR寄存器映射没有,是不是对应了相应的单片机地址?
上面有人说了,“SFR”是对应单片机特殊寄存器的申明。
实际上,我们要写的地址寄存器很多,但是,为了方便,把寄存器定义在头文件里面是一种很省事的做法,程序里面直接用就ok,其实,直接写"P0=xxxxx;"就已经是往寄存器里面给值了,然后每个寄存器地址控制着某位端口,是不是很方便?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top