使用汇编语言与C语言实现LED1/LED2/LED3三盏灯点亮

2023-05-16

汇编语言代码段


.text 
.global _start
_start:

LED13_INIT:
	/**********LED1\3点灯**************/
	/**********RCC章节**************/
	@ 1.设置GPIO始终使能 	通过RCC_AHB4ENSRTR寄存器设置0x50000A28[4]=1
	ldr r0,=0x50000A28   @准备一块地址空间
	ldr r1,[r0]  @将r0指向的地址空间中内容读到目标寄存器中
	orr r1,r1,#(0x01<<4)
	str r1,[r0]  @将r1寄存器中的值写到r0指向的地址空间中
	
	/***********GPIO***************/
	@1.设置PE10 PE8引脚为输出模式
	ldr r0,=0x50006000   @准备一块地址空间
	ldr r1,[r0]
	bic r1,r1,#(0x03<<20)
	bic r1,r1,#(0x03<<16)
	orr r1,r1,#(0x01<<20)
	orr r1,r1,#(0x01<<16)
	str r1,[r0]  @将r1寄存器中的值写到r0指向的地址空间中
	
	@2.设置PE10 PE8引脚为推挽输出
	ldr r0,=0x50006004   @准备一块地址空间
	ldr r1,[r0]
	bic r1,r1,#(0x01<<10)
	bic r1,r1,#(0x01<<8)
	str r1,[r0]  @将r1寄存器中的值写到r0指向的地址空间中
	
	@3.设置PE10 PE8引脚为低速输出
	ldr r0,=0x50006008   @准备一块地址空间
	ldr r1,[r0]
	bic r1,r1,#(0x03<<20)
	bic r1,r1,#(0x03<<16)
	str r1,[r0]  @将r1寄存器中的值写到r0指向的地址空间中
	

	@4.设置PE10 PE8引脚为禁止上下拉电阻
	ldr r0,=0x5000600c   @准备一块地址空间
	ldr r1,[r0]
	bic r1,r1,#(0x03<<20)
	bic r1,r1,#(0x03<<16)
	str r1,[r0]  @将r1寄存器中的值写到r0指向的地址空间中

LED2_INIT:
	/**********LED2点灯 PF10**************/
	/**********RCC章节**************/
	@ 1.设置GPIO始终使能 	通过RCC_AHB4ENSRTR寄存器设置0x50000A28[5]=1
	ldr r0,=0x50000A28   @准备一块地址空间
	ldr r1,[r0]  @将r0指向的地址空间中内容读到目标寄存器中
	orr r1,r1,#(0x01<<5)
	str r1,[r0]  @将r1寄存器中的值写到r0指向的地址空间中
	
	/***********GPIO***************/
	@1.设置PF10引脚为输出模式
	ldr r0,=0x50007000   @准备一块地址空间
	ldr r1,[r0]
	bic r1,r1,#(0x03<<20)
	orr r1,r1,#(0x01<<20)
	str r1,[r0]  @将r1寄存器中的值写到r0指向的地址空间中
	
	@2.设置PF10引脚为推挽输出
	ldr r0,=0x50007004   @准备一块地址空间
	ldr r1,[r0]
	bic r1,r1,#(0x01<<10)
	str r1,[r0]  @将r1寄存器中的值写到r0指向的地址空间中
	
	@3.设置PF10引脚为低速输出
	ldr r0,=0x50007008   @准备一块地址空间
	ldr r1,[r0]
	bic r1,r1,#(0x03<<20)
	str r1,[r0]  @将r1寄存器中的值写到r0指向的地址空间中
	

	@4.设置PF10引脚为禁止上下拉电阻
	ldr r0,=0x5000700c   @准备一块地址空间
	ldr r1,[r0]
	bic r1,r1,#(0x03<<20)
	str r1,[r0]  @将r1寄存器中的值写到r0指向的地址空间中

Loop:
	bl LED13_ON
	bl LED2_ON
	bl delay_1s
	bl LED13_OFF
	bl LED2_OFF
	bl delay_1s
	bl Loop

LED13_ON:
	
	@5.设置使能
	ldr r0,=0x50006014   @准备一块地址空间
	ldr r1,[r0]
	orr r1,r1,#(0x01<<10)
	orr r1,r1,#(0x01<<8)
	str r1,[r0]  @将r1寄存器中的值写到r0指向的地址空间中   
	mov pc,lr

LED13_OFF:
 	
	@5.设置使能
	ldr r0,=0x50006014   @准备一块地址空间
	ldr r1,[r0]
	and r1,r1,#(~(0x01<<10))
	and r1,r1,#(~(0x01<<8))
	str r1,[r0]  @将r1寄存器中的值写到r0指向的地址空间中
	mov pc,lr

LED2_ON:
	
	@5.设置使能
	ldr r0,=0x50007014   @准备一块地址空间
	ldr r1,[r0]
	orr r1,r1,#(0x01<<10)
	str r1,[r0]  @将r1寄存器中的值写到r0指向的地址空间中   
	mov pc,lr

LED2_OFF:
	@5.设置使能
	ldr r0,=0x50007014   @准备一块地址空间
	ldr r1,[r0]
	and r1,r1,#(~(0x01<<10))
	str r1,[r0]  @将r1寄存器中的值写到r0指向的地址空间中
	mov pc,lr


@ 大概1s的延时函数
delay_1s:
	mov r3, #0x10000000
	mm:
	cmp r3, #0
	subne r3, r3, #1
	bne mm
	mov pc, lr
.end

实现功能展示,间隔1秒实现循环亮灭 

 

C语言编写

头文件

#ifndef __LED_H__
#define __LED_H__
//寄存器封装
typedef struct{
	volatile unsigned int MODER; //设置为输出模式00
	
	volatile unsigned int OTYPER; //设置为推挽模式04
	
	volatile unsigned int OSPEEDR; //设置为低速输出  08
	
	volatile unsigned int PUPDR; //设置为不需要上下拉电阻 0C
	
	volatile unsigned int IDR; //10
	
	volatile unsigned int ODR; //设置使能 14
}gpio_t;
//LED1---->PE10
void Led13_init();
void Led13_on();
void Led13_off();
void Led2_init();
void Led2_on();
void Led2_off();

#endif

功能文件

#include "led.h"

#define GPIOE (*(gpio_t *)0x50006000)
#define GPIOF (*(gpio_t *)0x50007000)
#define RCC_AHB4_ENSETR  (*(volatile unsigned int*)0x50000A28)

void Led13_init()
{
	RCC_AHB4_ENSETR |=(0x1<<4);
	GPIOE.MODER &= (~(0x03<<20)); //20-21位清零在将20位置1
	GPIOE.MODER &= (~(0x03<<16)); //20-21位清零在将20位置1
	GPIOE.MODER |= (0x01<<20); //20-21位清零在将20位置1
	GPIOE.MODER |= (0x01<<16); //20-21位清零在将20位置1

	GPIOE.OTYPER &=(~(0X01<<10));
	GPIOE.OTYPER &=(~(0X01<<8));

	GPIOE.OSPEEDR &=(~(0X03<<20));
	GPIOE.OSPEEDR &=(~(0X03<<16));

	GPIOE.PUPDR &=(~(0X01<<20));
	GPIOE.PUPDR &=(~(0X01<<16));
	return;
}

void Led13_on()
{
	GPIOE.ODR |= (0X01<<10);
	GPIOE.ODR |= (0X01<<8);
	return;
}
void Led13_off()
{
	GPIOE.ODR &=(~(0X01<<10));
	GPIOE.ODR &=(~(0X01<<8));
	return;
}
void Led2_init()
{
	RCC_AHB4_ENSETR |=(0x1<<5);
	GPIOF.MODER &= (~(0x03<<20)); //0-21位清零在将20位置1
	GPIOF.MODER |= (0x01<<20);    //20-21位清零在将20位置1

	GPIOF.OTYPER &=(~(0X01<<10));

	GPIOF.OSPEEDR &=(~(0X03<<20));

	GPIOF.PUPDR &=(~(0X01<<20));
}
void Led2_on()
{
	GPIOF.ODR |= (0X01<<10);
	return;
}

void Led2_off()
{
	GPIOF.ODR &=(~(0X01<<10));
	return;
}

测试文件

#include "led.h"
extern void printf(const char *fmt, ...);

void delay_ms(int ms)
{
	int i,j;
	for(i = 0; i < ms;i++)
		for (j = 0; j < 1800; j++);
}


int main()
{

	Led13_init();     // led灯初始化
	Led2_init();
	while(1)
	{
		Led13_on();
		Led2_on();
		delay_ms(1000);
		Led13_off();
		Led2_off();
		delay_ms(1000);
	}
	return 0;
}

测试结果:实现功能展示,间隔1秒实现循环亮灭 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用汇编语言与C语言实现LED1/LED2/LED3三盏灯点亮 的相关文章

  • Linux下生产者消费者问题的C语言实现

    注 xff1a 查看全文请关注作者 xff0c 或点击前往 xff1a 生产者 消费者问题的C语言实现 实验六 生产者 消费者问题实现 实验题目 要求 在Linux操作系统下用C实现经典同步问题 xff1a 生产者 消费者 xff0c 具体
  • C语言实现strlen()函数

    方式一 xff1a span class token macro property span class token directive keyword define span CRT SECURE NO WARNINGS span spa
  • <操作系统>读者写者问题(读者优先)C语言实现

    问题描述 代码 span class token macro property span class token directive keyword include span span class token string lt stdio
  • 贝叶斯网络python实现_朴素贝叶斯和贝叶斯网络算法及其R语言实现

    原标题 xff1a 朴素贝叶斯和贝叶斯网络算法及其R语言实现 作者 xff1a 鲁伟 一个数据科学践行者的学习日记 数据挖掘与机器学习 xff0c R与Python xff0c 理论与实践并行 个人公众号 xff1a 数据科学家养成记 微信
  • 每个程序员半小时内必须解决的5个编程问题(C语言实现)

    最近关注的几个算法的公众号都看到了如题的一篇文章 xff0c 后1道题单拿出来我肯定不能半个小时内解决 前三道题非常基础 xff0c 相信大部分人能用自己熟悉的语言很快解决 xff0c 而且解决的方法可以多种多样 xff0c 这里说一下我对
  • 使用汇编语言与C语言实现LED1/LED2/LED3三盏灯点亮

    汇编语言代码段 text global start start LED1点灯LED1 gt PE10 64 1 对LED1进行初始化 RCC AHB4 ENSETR MODER OTYPER OSPEEDR PUPDR 64 2 实现LED
  • C++:C语言实现HTTP的GET和POST请求

    似乎写代码发HTTP请求需要自己把完整的协议帧写出来 xff1f 而不是单纯填个URL就行了 xff0c 那既然完整协议帧都写出来了 xff0c 那我直接TCP发不就可以了 xff1f 还是说不能这样 基本你百度搜 c 43 43 发送ht
  • 记录:在ubuntu中以C语言实现json文件读取遇到的问题(1)(说不定会有2)

    4 12 记录在ubuntu中以C语言实现json文件读取遇到的问题 xff08 1 xff09 xff08 说不定会有2 xff09 暂记录遇到的问题及解决 xff0c 其中还有些原因没有搞明白 xff09 1 首先过程参考自一位大佬的博
  • TCP通信模型(C语言实现)

    大家好 xff0c 我是练习编程时长两年半的个人练习生昆工第一ikun xff0c 今天我们来分享TCP通信模型 xff0c 并且用C语言实现它 目录 一 我们将实现三个示例功能 xff1a 二 TCP服务器搭建流程 xff08 1 xff
  • PID连续控制算法的表达式以及C语言实现

    1 数字 xff08 离散 xff09 PID控制算法的表达式 xff1a 将PID调节器离散化 xff0c 用差分方程来代替连续系统的微分方程 xff0c 分为位置式和增量式两类 重点理解概念如下 xff1a a xff09 基本偏差e
  • C语言实现mavlink库与px4通信仿真

    参照网址 http mavlink io en mavgen c 首先从github上下载对应的C uart interface example 对应的github仓库网址为https github com mavlink c uart i
  • C语言实现UDP通信

    UDP通信 UDP是一种无连接的尽最大努力交付的不可靠连接 xff0c 通信之前无需先建立连接 xff0c 自然而然 xff0c 通信之后也就无需再释放连接 通信的套接字 UDP所采用的通信接口与前面讲过的TCP通信接口相同 xff0c 只
  • PID控制算法的C语言实现

    PID控制算法的C语言实现一 PID算法原理 最近两天在考虑一般控制算法的C语言实现问题 xff0c 发现网络上尚没有一套完整的比较体系的讲解 于是总结了几天 xff0c 整理一套思路分享给大家 在工业应用中PID及其衍生算法是应用最广泛的
  • C语言实现http post请求和get请求,post请求可以上传图片和文件

    文章目录 1 http协议简介2 http协议分析2 1 http请求2 1 1 请求行2 1 1 1 请求方法2 1 1 2 URL2 1 1 3 协议版本2 1 1 4 请求行总结 2 1 2 请求头部2 1 3 请求数据 2 2 ht
  • C语言实现“井字棋”游戏(三子棋)人机对弈

    井字棋游戏 xff1a 即三子棋 xff0c 英文名叫Tic Tac Tic xff0c 是一种在3 3格子上进行的连珠游戏 xff0c 和五子棋比较类似 xff0c 由于棋盘一般不画边线框 xff0c 格线排成井字故得名 题目分析 xff
  • C语言实现HTTP的GET和POST请求

    HTTP请求和IP TCP 所谓的HTTP协议是基于IP TCP协议的 xff0c 所以要获取远端的html数据只要创建socket对象就足够了 xff1b HTTP是基于IP TCP加上了网络请求的固定格式 get 请求 include
  • 用c语言实现https通信,C/C++实现HTTPS通信

    include 34 afxinet h 34 CInternetSession mysession CHttpConnection myconn CString VoidText CString strSentence strGetSen
  • C语言实现TCP服务器与客户端通信

    以上是TCP通信客户端与服务器实现通信的基本原理流程图 1 客户端的实现 xff08 4个步骤 xff09 1 1创建socket对象 1 2请求连接 1 3发送数据 1 4关闭套接字 include lt stdio h gt inclu
  • C语言实现TCP通信

    C语言通过socket编程实现TCP通信 服务端客户端通信例子 xff1a socket tcp 通信1 xff0c socket tcp通信2 xff0c udp使用讲解 xff0c socket udp通信例子 TCP IP协议 叫做传
  • 汉诺塔问题—C语言实现

    一 题目描述 相传在古印度圣庙中 xff0c 有一种被称为汉诺塔 Hanoi 的游戏 该游戏是在一块铜板装置上 xff0c 有三根杆 编号A B C xff0c 在A杆自下而上 由大到小按顺序放置64个金盘 如下图 游戏的目标 把A杆上的金

随机推荐