完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大神, 本人刚学习单片机。有一个问题想咨询一下大家。
就是我写的C语言变量,是如何和实际单片机中的某个单位元器件对应上的呢? 比如,我要控制一个LED灯点亮,那我写了一堆代码,设备是怎么知道我这堆代码是控制这个LED灯的? 是靠C语言中变量来控制吗?怎么让这个变量对应的是这个LED灯呢? 问题可能有些显得白痴,麻烦大神别笑。 |
|
相关推荐
8个回答
|
|
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。
|
|
|
|
人中狼 发表于 2017-6-7 11:28 谢谢解答啦!这么说我就理解了。 |
|
|
|
我没有怎么接触过51单片机,直接看的ST的STM32系列的单片机。
看STM32的芯片手册,可以看到寄存器的基址还有偏移量什么的。 然后再去看一下,ST提供的头文件,就可以看到他们用C语言的指针把这些变量 直接定义在了相应的地址上。这样我们改变这些变量值时,就直接把值赋值在相应的地址。 |
|
|
|
你先要看一下相关的单片机资料,搞清楚模块部分所对应的寄存器地址,如果不是很清楚可以看一下头文件里面给寄存器分配的地址,然后再对应原理图,找到你需要控制的IO口,判断你的硬件电路在什么条件可以控制IO的状态,比如按键是给IO口高电平或者低电平,高低电平哪一种可以得到你需要的结果菜鸟意见
|
|
|
|
进来看看了 哦,
|
|
|
|
不知道你仔细翻看了单片机DATASHEET没有,是不是有很多寄存器?
不知道你仔细翻看单片机的“REG52.h”没有,是不是有很多端口地址定义? 不知道你看到过C语言里面的SFR寄存器映射没有,是不是对应了相应的单片机地址? 上面有人说了,“SFR”是对应单片机特殊寄存器的申明。 实际上,我们要写的地址寄存器很多,但是,为了方便,把寄存器定义在头文件里面是一种很省事的做法,程序里面直接用就ok,其实,直接写"P0=xxxxx;"就已经是往寄存器里面给值了,然后每个寄存器地址控制着某位端口,是不是很方便? |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11763 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 22:32 , Processed in 0.636792 second(s), Total 89, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号