2023.12.21:烧录三个led灯

复制代码
.text 
.global _start
_start: 
/*---------------------------------LD1------------------------------------------------*/
        @设置GEIOE时钟使能  RCC_MP_AHB4ENSETR[4]->1   0x50000A28
        LDR R0,=0X50000A28     @指定寄存器的地址
        LDR R1,[R0]    @将寄存器数值取出来放在R1中
        ORR R1,R1,#(0X1<<4)     @讲第4为设置为1
        STR R1,[R0]    @ 将修改之后的值写回去

        @设置PE10为输出    GPIOE_MODER[21:20]->01    0x50006000
        LDR R0,=0X50006000                 @指定寄存器地址
        LDR R1,[R0]                                   @将寄存器数值取出来放在r1中
        BIC R1,R1,#(0X3<<20)               @将[21:20]位设置为01
        ORR R1,R1,#(0X1<<20)            
        STR R1,[R0]                            @将修改后的值写回去

        @设置PE10为推挽输出  GPIOE_OTYPER[10]->0   0x50006004
          LDR R0,=0X50006004     @指定寄存器的地址
        LDR R1,[R0]    @将寄存器数值取出来放在R1中
        BIC R1,R1,#(0X1<<10)     @讲第10位设置为1
        STR R1,[R0]     @将修改之后的值写回去
        
        @设置PE10为低速输出  GPIOE_OSPEEDR[21:20] ->00   0x50006008
        LDR R0,=0X50006008          @指定寄存器的地址
        LDR R1,[R0]                                  @将寄存器数值取出来放在R1中
        BIC R1,R1,#(0X3<<20)                   @将[21:20]位设置为01
        STR R1,[R0]                                 @将修改后的值写回去

        @设置PE10输出时无上拉下拉电阻  GPIOE_PUPDR[21:20] ->00   0x5000600C
         LDR R0,=0X5000600C              @指定寄存器的地址
        LDR R1,[R0]                                 @将寄存器数值取出来放在R1中
        BIC R1,R1,#(0X3<<20)              @将[21:20]位设置为01
        STR R1,[R0]                                 @将修改后的值写回去
/*-----------------------------------------------LD2-------------------------------------------------------*/

          @设置GEIOE时钟使能  RCC_MP_AHB4ENSETR[4]->1   0x50000A28
        LDR R0,=0X50000A28     @指定寄存器的地址
        LDR R2,[R0]    @将寄存器数值取出来放在R1中
        ORR R2,R2,#(0X1<<5)     @讲第4为设置为1
        STR R2,[R0]    @ 将修改之后的值写回去

        @设置PF10为输出    GPIOF_MODER[21:20]->01    0x50007000
        LDR R5,=0X50007000  
        LDR R2,[R5]
        BIC R2,R2,#(0X3<<20)
        ORR R2,R2,#(0X1<<20)
        STR R2,[R5]

        @设置PF10为推挽输出  GPIOF_OTYPER[10]->0   0x50007004
          LDR R5,=0X50007004     @指定寄存器的地址
        LDR R2,[R5]    @将寄存器数值取出来放在R1中
        BIC R2,R2,#(0X1<<10)     @讲第10位设置为1
        STR R2,[R5]     @将修改之后的值写回去
        
        @设置PF10为低速输出  GPIOF_OSPEEDR[21:20] ->00   0x50007008
        LDR R5,=0X50007008 
        LDR R2,[R5]
        BIC R2,R2,#(0X3<<20)
        STR R2,[R5]

        @设置PF10输出时无上拉下拉电阻  GPIOE_PUPDR[21:20] ->00   0x5000700C
         LDR R5,=0X5000700C  
        LDR R2,[R5]
        BIC R2,R2,#(0X3<<20)
        STR R2,[R5]
/*---------------------------------------------------LD3-------------------------------------------------------*/
          @设置GEIOE时钟使能  RCC_MP_AHB4ENSETR[4]->1   0x50000A28
        LDR R0,=0X50000A28     @指定寄存器的地址
        LDR R3,[R0]    @将寄存器数值取出来放在R1中
        ORR R3,R3,#(0X1<<4)     @讲第4为设置为1
        STR R3,[R0]    @ 将修改之后的值写回去

        @设置PE8为输出    GPIOE_MODER[17:16]->01    0x50006000
        LDR R0,=0X50006000  
        LDR R3,[R0]
        BIC R3,R3,#(0X3<<16)
        ORR R3,R3,#(0X1<<16)
        STR R3,[R0]

        @设置PE8为推挽输出  GPIOE_OTYPER[8]->0   0x50006004
          LDR R0,=0X50006004     @指定寄存器的地址
        LDR R3,[R0]    @将寄存器数值取出来放在R1中
        BIC R3,R3,#(0X1<<8)     @讲第10位设置为1
        STR R3,[R0]     @将修改之后的值写回去
        
        @设置PE8为低速输出  GPIOE_OSPEEDR[17:16] ->00   0x50006008
        LDR R0,=0X50006008 
        LDR R3,[R0]
        BIC R3,R3,#(0X3<<16)
        STR R3,[R0]

        @设置PE8输出时无上拉下拉电阻  GPIOE_PUPDR[17:16] ->00   0x5000600C
         LDR R0,=0X5000600C  
        LDR R3,[R0]
        BIC R3,R3,#(0X3<<16)
        STR R3,[R0]

/*---------------------------------------------------------------------------------------------------------*/
/*
loop:
        @设置PE10输出高电平  GPIOE_ODR[10]->1    0x50006014
        LDR R0,=0X50006014
        LDR R1,[R0]
        ORR R1,R1,#(0X1<<10)
        STR R1,[R0]

        ldr r3,[r0]
        orr r3,r3,#(0x1<<8)
        str r3,[r0]

        ldr r5,=0x50007014
        ldr r2,[r5]
        orr r2,r2,#(0x1<<10)
        str r2,[r5]
      
        b loop
*/
flash:
        bl led_on
        bl delay
        bl led_off
        bl delay
        bl flash

led_on:
             @设置PE10输出高电平  GPIOE_ODR[10]->1    0x50006014
        LDR R0,=0X50006014
        LDR R1,[R0]
        ORR R1,R1,#(0X1<<10)
        STR R1,[R0]

         ldr r3,[r0]
        orr r3,r3,#(0x1<<8)
        str r3,[r0]

        ldr r5,=0x50007014
        ldr r2,[r5]
        orr r2,r2,#(0x1<<10)
        str r2,[r5]

        mov pc,lr

led_off:
             @设置PE10输出高电平  GPIOE_ODR[10]->1    0x50006014
        LDR R0,=0X50006014
        LDR R1,[R0]
        BIC R1,R1,#(0X1<<10)
        STR R1,[R0]

        ldr r3,[r0]
        bic r3,r3,#(0x1<<8)
        str r3,[r0]

        ldr r5,=0x50007014
        ldr r2,[r5]
        bic r2,r2,#(0x1<<10)
        str r2,[r5]
        mov pc,lr

delay:
        ldr r4,=0x10000000

mm:
        cmp r4,#0
        subne r4,r4,#1
        bne mm
        mov pc,lr




.end

效果图

思维导图

相关推荐
梓仁沐白2 天前
CSAPP实验2:Bomb
汇编
资料,小偿3 天前
8086微机原理与汇编语言,8086程序设计,EMU8086,MASM,汇编程序设计,proteus
汇编·51单片机·proteus
rechol12 天前
汇编与底层编程笔记
汇编·arm开发·笔记
CHANG_THE_WORLD13 天前
switch语句在汇编层面的几种优化方式 ,为什么能进行优化
汇编·算法·switch·汇编分析·switch case·switch case 汇编·switch case 语句
SundayBear14 天前
嵌入式进阶:C语言内联汇编
c语言·开发语言·汇编
CC-NX15 天前
32位汇编:实验5算数运算类指令使用
汇编·win32·算数运算
伐尘15 天前
【汇编】RAX,eax,ax,ah,al 关系
汇编
CHANG_THE_WORLD15 天前
c语言位运算 汇编代码分析
c语言·开发语言·汇编
CHANG_THE_WORLD15 天前
if条件语句 三目运算符 汇编分析
汇编·算法·条件语句·if 语句·汇编分析·条件语句汇编分析
CHANG_THE_WORLD16 天前
有符号数和无符号数的 汇编视角 区别
汇编