LED的使用纯汇编和C语言的点亮

最新更新时间:2021-11-01来源: eefocus关键字:LED  纯汇编  C语言 手机看文章 扫描二维码
随时随地手机看文章

概述

在这里插入图片描述

在这里插入图片描述

我们通过观察原理图可以发现LED灯有四个分别连接在GPM4_1, GPM4_2, GPM4_3 GPM4_4上面,这时候我们去查询我们板子4412的说明书,去寻址寄存器的配置

在这里插入图片描述
在这里插入图片描述

初始化的时候我们需要将他配置为输出模式,同时我们观察下面的电路可以发现,他需要输出低电平,来使led亮


#define GPM4BASE 0x11000000

#define GPM4CON 0x02E0

#define GPM4DAT 0x02E4

#define UDELAY 0x43e2647c

#define N 5000000


.text

.align 2

.global _start


_start:

        mov ip, sp

      push {fp, ip, lr, pc}

      sub fp, ip, #4

  @设置GPM4CON 使0-3引脚为输出功能


        ldr r0, =GPM4BASE //将基地址放入r0

        ldr r1, [r0, #GPM4CON] //ldr的伪指令用法,立即数放入r1

        ldr r2, =0xffff

        bic r1, r1, r2

        @配置0-3引脚全部为1   0x1111         0b  0001 0001 0001 0001

        ldr r2, =0x1111

        orr r1, r1, r2

        str r1, [r0, #GPM4CON]

        @调用uboot中的延迟函数

         ldr r0, =N // void udelay(x)   x参数为微秒 N=5000000 为0.5秒

        mov lr, pc

        ldr pc, =UDELAY


  loop:

    @1, 将GPM4DAT 输出0x0   点亮所有灯

        ldr r0, =GPM4BASE

        ldrb r1, [r0, #GPM4DAT]

        orr r1, r1, #0xf

        bic r1, r1, #0x1

        strb r1,[r0, #GPM4DAT] //由于是8位的寄存器,所以使用strb


 

    @2 将GPM4DAT 输出0xf   熄灭所有灯

        ldr r0, =GPM4BASE

        ldrb r1, [r0, #GPM4DAT]

        bic r1, r1, #0x3

        strb r1,[r0, #GPM4DAT]


使用C与语言来点亮LED灯

布置现场,调用c语言函数,https://blog.csdn.net/dongdong7_77/article/details/108200731

可以参考我以前的这篇文章


.text

.align 2

.global _start


_start:

        mov ip, sp

      push {fp, ip, lr, pc}

      sub fp, ip, #4

  

        bl main

        

    sub sp, fp, #12

      ldm sp, {fp, sp, pc}


#define sdelay(x) (((void (*)(int))0x43e053d4)(x))

#define udelay(x) (((void (*)(int))0x43e2647c)(x))        


typedef unsigned int u32;

typedef unsigned short u16;

typedef unsigned char u8;


void led_init(void)

{

    GPM4CON &= ~0XFFFF;

    GPM4CON |= 0X1111;


    GPM4DAT |= 0XF;   



}


void led_on(u32 num)

{

        if (num >=0 && num <=3)

        {

           GPM4DAT &= ~(0x1 << num);


        }

        

}


void led_off(u32 num)

{

        if (num >=0 && num <=3)

        {

           GPM4DAT |= (0x1 << num);


        }

int main(void)

{

    int n = 0;


    led_init();

    while (1)

    {

        printf("led %d is on ! n", n+1);

        led_on(n);

        udelay(1000000);

        led_off(n);

        n++;

        if (n > 3)

        {

            n = 0;

        }    

    }

    

    return 0;

关键字:LED  纯汇编  C语言 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic549104.html

上一篇:串行接口的工作原理和实现
下一篇:ARM汇编之APCS规则

推荐阅读

MSP430笔记1——I/O口的设置(点亮LED
基本配置PxDIR 选择寄存器 (x:1/2)0:输入 1:输出复位后默认:0000 0000PxOUT 输出寄存器0:低电平 1:高电平PxIN 输入寄存器读取某个端口连接的是高低电平(只读不写)PxREN 上拉/下拉电阻寄存器0:不使能外部电阻,该寄存器为无效状态 ;1:使能外部电阻,该寄存器为有效状态)PxSEL 功能选择寄存器0:普通I/O端口1:应用于外围电路的特殊功能(一旦置1则该引脚不能再用于中断)BITx(x:0~7) eg: BIT0:0000 0001C语言tipP1DIR |= BIT0;P1DIR = P1DIR | BIT0;//按位或//P1DIR :0000 0000 BIT0:0000 0001 结果
发表于 2022-09-26
MSP430笔记1——I/O口的设置(点亮<font color='red'>LED</font>)
[单片机框架][bsp层][AT32F415][bsp_led] LED配置和使用
重新封装一层函数,用于bsp层函数,方便调用。void bsp_led_init(void);void bsp_led_deinit(void);void bsp_led_on(bsp_led_t ch);void bsp_led_off(bsp_led_t ch);void bsp_led_toggle(bsp_led_t ch);/********************************************************************************* @file bsp_led.c* @author jianqiang.xue* @version V1.0.0* @date 2021
发表于 2022-09-26
STM32如何新建工程+寄存器点亮LED
STM32新建工程跟51差不多的,但是32会多点东西,比如加载芯片支持包啦,启动文件啦。还有一个很重要的 你得有KEIL5 是吧哈哈 我这里就不写如何安装KEIL5了 网上挺多资源的,这里就主要写一下如何新建工程点亮一个LED灯。我这里用STM32F103C8T6我这里用STM32F103C8T6一: 如何新建工程1:下载芯片支持包Keil.STM32Fxxxx.pack文件1.进入KEIL5官网。找到自己的型号这样就下载了 芯片支持包了。2:打开KEIL5 加载Keil.STM32Fxxxx.pack文件.打开KEIL5把 下载的 Keil.STM32Fxxxx.pack文件 加载进去。3:添加编写代码文件main.c 以及 添加
发表于 2022-09-23
STM32如何新建工程+寄存器点亮<font color='red'>LED</font>灯
基于STM32F103入门1——点亮LED
1:新建固件库工程文件1.1找到一个固件库模板1.2:打开KEIL5新建工程最终效果:1.3:添加相关文件然后我们针对不同文件夹 我们添加不同的文件进来。双击STARTUP 添加我们固件库的启动文件STARTUP:添加Libraries——>CMSIS——>startup中的启动文件USER:添加固件库的User文件夹中的.c文件CMSIS 添加Libraries——>CMSIS文件夹中的.c文件DOC:添加固件库中Doc文件夹的readme.txtFWLIB:添加Libraries——>STM32F10x_StdPeriph_Driver文件夹中的.c文件添加完效果1.4:手动添加其他文件路径进来打开stm
发表于 2022-09-23
基于STM32F103入门1——点亮<font color='red'>LED</font>灯
[单片机框架] [app_led] 利用软定时器实现闪烁和呼吸等灯光模式
使用例子:任意地点初始化:app_led_init();app_led_indicate(灯号,灯光类型,周期时间,重装载值);注:需要先实现对应PWM函数文件代码如下app_led.c/********************************************************************************* @file app_led.c* @author jianqiang.xue* @Version V1.0.0* @Date 2021-04-20* @brief LED灯光效果*****************************************************
发表于 2022-09-22
[单片机框架][bsp层][cx32l003][bsp_led] LED配置和使用
LED是一种半导体器件,大家其实对LED并不陌生,各种电器的指示灯、手机键盘灯、LED液晶屏的背光、高亮LED手电筒等,都是通过LED发光的。LED有两种主要用途,一种是作为指示灯;另一种是照明。照明用的LED一般都是大功率LED,需要较大的电压电流才能正常工作。而这里我们要用到的则是用作指示灯的小功率LED。常见的小功率LED,在它的正负极加上3V左右的电压,就会发光,正常发光的时候,电流大概是2~5mA。这里要注意,LED有正负极之分,接反了不会发光。另外,电压也不可太高,那样会烧坏LED。/*********************************************************************
发表于 2022-09-22

推荐帖子

KiCad 批量为元件添加封装
本帖最后由qwqwqw2088于2021-3-1008:51编辑 有时候有大量的电阻电容LED等封装是重复的,如果一个个添加效率就太低了,我们可以批量进行添加1、首先对其中一个元件选择封装,右键-属性-编辑属性2、选中封装这一栏,会出来一个小书架,点击这个小书架会出来封装库浏览3、点击封装符号,会出现封装选择界面,在搜索框里输入led,找到自己需要的封装,点击确定4、再次双击自己的封装,窗口会关闭。5、电脑就会自动把封装填进去了,点击确定关闭窗口6、点击工具
qwqwqw2088 PCB设计
IIC读写摄像头寄存器失败,为何?
小弟使用IIC读写摄像头OV5642寄存器,读写都失败,IIC驱动提示“ACKnotreceived”。 从设备寄存器地址是datasheet上写的,应该不会错。 是何原因那? 附上一段代码: intModuleWriteBlock() { inti; UCHARBUF=0; RETAILMSG(OV9650_DEBUG,(TEXT("[CAMERA]ModuleWriteBlock++\\r\\n")));
dyyzqz1015 嵌入式系统
stm32printf求助
printf("ADC采样值为%d\\n",ADC3ConvertedValue); printf("ADC测量值为%f\\n",ADC3ConvertedVoltage); 输出效果为: ADC采样值为990 ADC测量值为%f 不知道哪出错了求赐教 intputchar(intch) { if(ch==\'\\n\') { while(RESET==USART_GetFlagStatus(US
568760310 stm32/stm8
LPC1114 PWM 测试效果!!!!!更交流
好几天没有发帖子啦,干别的啦2010.5.14测试PWM功能,现发些图片!!使用方面可以自行按照相关的参数自行设置占空比之类的,现在没有用上,制作测试图片供交流,LPC1114PWM测试效果!!!!!更交流
lanyu345 NXP MCU
狗狗币突然火了 来个教程显卡挖矿
4月16日狗狗币暴涨了100%突然暴涨是和马斯克站台有关么不知道也懒得深究昨天研究了一下怎么挖矿不到24H挖到6个多看来是成功了对于电脑需要常年开机且显卡还不错的朋友如果愿意可以尝试一下我有一台6年前的老电脑配置现在看也还将就显卡是GTX10708G的本来是当做一个数据服务器在运行就拿它做测试了首先去狗狗币官方网站下载下载狗狗币钱包软件https://dogecoin.com/因系统是64位的所以选择下载这个安装的时候请关闭杀毒软件像是360之类
cardin6 创意市集
GC.Collect()
GC.Collect()的作用GC.Collect()
loveitboy 嵌入式系统
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved