基于ARM,使用汇编语言在Keil_v5和Proteus下进行LED闪烁操作

4 篇文章 0 订阅
2 篇文章 0 订阅

基于ARM,用汇编语言在Keil_V5和Proteus仿真下实现点灯操作
1、打开keil创建新工程
在这里插入图片描述
由于Proteus不支持STM32F103ZET6的芯片,所以我们这里选择C6的芯片。
在这里插入图片描述
ARM的CMSIS已经把开发所需要的软件组件都封装好了,因此直接选择即可,把启动文件加进去
在这里插入图片描述
在Source组中添加New Item在这里插入图片描述
创建Asm File文件
在这里插入图片描述
写入代码,如图所示
这里操作的是GPIOA的第0口,如果有其他端口要求可以自行更改(需要把端口物理地址做映射)
在这里插入图片描述

BIT2		EQU	0X00000004    
LED0		EQU 	0X00000001
GPIOA		EQU	0X40010800    ;GPIOA端口的地址		
GPIOA_CRL 	EQU 	0X40010800    ;A口CRL设置低寄存器的地址		
GPIOA_CRH 	EQU 	0X40010804    ;A口CRH配置高寄存器的地址
GPIOA_ODR 	EQU	0X4001080C    ;输出,偏移0Ch,A口ODR寄存器的地址
GPIOA_BSRR 	EQU 	0X40010810    ;清除/设置偏移地址10h,A口BSRR寄存器的地址
GPIOA_BRR 	EQU 	0X40010814    ;清除,偏移地址14h,A口BRR寄存器的地址		
IOPAEN		EQU 	BIT2	      ;APB2ENR外设使能时钟寄存器IOPAEN的地址		
RCC_APB2ENR EQU 	0X40021018    ;APB2ENR外设使能时钟寄存器地址
	
	AREA MYCODE, CODE
		
		ENTRY
		
		EXPORT __main
__main
	LDR R1,	=RCC_APB2ENR   
	LDR R0, [R1]           ;读
	LDR R2,	=IOPAEN        
	ORR R0, R2             ;改
	STR R0, [R1]	       ;使能GPIOA时钟					
	MOV R0, #0x0003        ;PA.0口输出的状态和速度
	LDR R1, =GPIOA_CRL     ;PA.0在低寄存器				
	STR R0, [R1]	       ;LED0--PA.0推挽输出,50MHZ				
	NOP
	NOP
	LDR R1, =GPIOA_ODR     ;PA.0在高寄存器
	LDR	R2,=0x0000001  ;将PA.0输出高电平
	
LOOP
	STR	R2,[R1]	       ;输出状态					
	MOV R0, #4500	       ;4500/9=500ms			
	BL.W 	DELAY_NMS      ;延时
	EOR 	R2, #LED0      ;翻转LED0的输出状态				
	B	LOOP			
	
DELAY_NMS
	PUSH {R1}						
DELAY_NMSLOOP
	SUB R0, #1
	MOV R1,#100
DELAY_ONEUS
	SUB R1, #1
	NOP
	NOP
	NOP
	CMP R1, #0
	BNE DELAY_ONEUS
	CMP R0, #0
	BNE DELAY_NMSLOOP
	POP {R1}
	BX  LR
	NOP						
	END

在编译之前选择下图选中的图标或者点击Project中的options for Target"Target1"

在这里插入图片描述
在Output一栏中勾选Create HEX File(默认不勾选),没有勾选的话,在Proteus中没有对应的.hex文件。然后在Debug中勾选仿真Use Simulator,注意左下角的参数设置。
在这里插入图片描述
接下来就可以编译,调试了。
在这里插入图片描述
在这里插入图片描述
打开Proteus仿真软件,创建新工程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加STM32F103C6的芯片,同样的在Library中添加电阻和led灯
在这里插入图片描述
加上电源power,配置电网,连接元件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
双击芯片,更改频率为8MHZ,将在keil中生成的.hex文件打开,点击ok,然后开始仿真。仿真结果为闪烁截图,led灯以0.5s为周期闪烁。
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值