ARM Day4

文章详细描述了如何使用汇编语言对GPIO端口进行配置,控制三个灯的开关状态,包括高低速输出、推挽模式以及延时操作,以实现灯的闪烁效果。
摘要由CSDN通过智能技术生成

汇编实现三个灯的闪烁

.text 
.global _start
_start: 
    
    @使能GPIOE的外设时钟
    LDR R0,=0x50000A28              @指定基地址
    LDR R1,[R0]                                 @将寄存器数据读取出来保存到R1中
    ORR R1,R1, #(0x3<<4)             @[4]设置为1
    STR R1,[R0]                                   @将修改之后的值写回去
 
 
    @设置PE10为输出
    LDR R0,=0x50006000          @指定基地址
    LDR R1,[R0]                             @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<20)            @[21:20]设置为00
    ORR R1,R1,#(0x1<<20)            @[21:20]设置为01
    STR R1,[R0]                                  @将修改之后的值写回去
 
      @设置PF10为输出
    LDR R0,=0x50007000          @指定基地址
    LDR R1,[R0]                             @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<20)            @[21:20]设置为00
    ORR R1,R1,#(0x1<<20)            @[21:20]设置为01
    STR R1,[R0]                                  @将修改之后的值写回去
 
      @设置PE8为输出
    LDR R0,=0x50006000          @指定基地址
    LDR R1,[R0]                             @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<16)            @[17:16]设置为00
    ORR R1,R1,#(0x1<<16)            @[17:16]设置为01
    STR R1,[R0]                                  @将修改之后的值写回去
 
 
 
    @设置PE10为推挽输出
    LDR R0,=0x50006004                  @指定基地址
    LDR R1,[R0]                                     @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x1<<10)                @[10]设置为0
    STR R1,[R0]                                     @将修改之后的值写回去
 
      @设置PF10为推挽输出
    LDR R0,=0x50007004                  @指定基地址
    LDR R1,[R0]                                     @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x1<<10)                @[10]设置为0
    STR R1,[R0]                                     @将修改之后的值写回去
 
      @设置PE8为推挽输出
    LDR R0,=0x50006004                  @指定基地址
    LDR R1,[R0]                                     @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x1<<8)                @[8]设置为0
    STR R1,[R0]                                     @将修改之后的值写回去
 
 
 
    @设置PE10低速输出
     LDR R0,=0x50006008                 @指定基地址
    LDR R1,[R0]                                     @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<20)                    @[21:20]设置为0
    STR R1,[R0]                                         @将修改之后的值写回去
 
      @设置PF10低速输出
     LDR R0,=0x50007008                 @指定基地址
    LDR R1,[R0]                                     @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<20)                    @[21:20]设置为0
    STR R1,[R0]                                         @将修改之后的值写回去
 
      @设置PE8低速输出
     LDR R0,=0x50006008                 @指定基地址
    LDR R1,[R0]                                     @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<16)                    @[17:16]设置为0
    STR R1,[R0]                                         @将修改之后的值写回去
 
 
 
    @设置PE10无上拉下拉电阻
    LDR R0,=0x5000600C                      @指定基地址
    LDR R1,[R0]                                         @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<20)                        @[21:20]设置为0
    STR R1,[R0]                                             @将修改之后的值写回去
 
      @设置PF10无上拉下拉电阻
    LDR R0,=0x5000700C                      @指定基地址
    LDR R1,[R0]                                         @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<20)                        @[21:20]设置为0
    STR R1,[R0]                                             @将修改之后的值写回去
 
      @设置PE8无上拉下拉电阻
    LDR R0,=0x5000600C                      @指定基地址
    LDR R1,[R0]                                         @将寄存器数据读取出来保存到R1中
    BIC R1,R1,#(0x3<<16)                        @[17:16]设置为0
    STR R1,[R0]                                             @将修改之后的值写回去
 
 
 
    LOOP:           @B不让程序结束
        bl LED1_ON
        bl LED2_ON
        bl LED3_ON
        bl DELAY
 
        bl LED1_OFF
        bl LED2_OFF
        bl LED3_OFF
        bl DELAY
 
        B LOOP
 
    @亮灯
    LED1_ON:
        @点灯 GPIO_ODR[10]->1
        LDR R0,=0x50006014                      @指定基地址
        LDR R1,[R0]                                         @将寄存器数据读取出来保存到R1中
        ORR R1,R1,#(0x1<<10)                    @[10]设置为0
        STR R1,[R0]                                         @将修改之后的值写回去
        mov PC,LR                                           @程序返回
 
    LED2_ON:
        @点灯 GPIO_ODR[10]->1
        LDR R0,=0x50007014                      @指定基地址
        LDR R1,[R0]                                         @将寄存器数据读取出来保存到R1中
        ORR R1,R1,#(0x1<<10)                    @[10]设置为0
        STR R1,[R0]                                         @将修改之后的值写回去
        mov PC,LR                                           @程序返回
 
    LED3_ON:
        @点灯 GPIO_ODR[10]->1
        LDR R0,=0x50006014                      @指定基地址
        LDR R1,[R0]                                         @将寄存器数据读取出来保存到R1中
        ORR R1,R1,#(0x1<<8)                    @[8]设置为0
        STR R1,[R0]                                         @将修改之后的值写回去
        mov PC,LR                                           @程序返回
 
    @灭灯
    LED1_OFF:
        @灭灯 GPIO_ODR[10]->0
        LDR R0,=0x50006014                      @指定基地址
        LDR R1,[R0]                                         @将寄存器数据读取出来保存到R1中
        BIC R1,R1,#(0x1<<10)                    @[10]设置为0
        STR R1,[R0]                                         @将修改之后的值写回去
        mov PC,LR                                            @程序返回   
 
LED2_OFF:
        @灭灯 GPIO_ODR[10]->0
        LDR R0,=0x50007014                      @指定基地址
        LDR R1,[R0]                                         @将寄存器数据读取出来保存到R1中
        BIC R1,R1,#(0x1<<10)                    @[10]设置为0
        STR R1,[R0]                                         @将修改之后的值写回去
        mov PC,LR                                            @程序返回   
 
LED3_OFF:
        @灭灯 GPIO_ODR[10]->0
        LDR R0,=0x50006014                      @指定基地址
        LDR R1,[R0]                                         @将寄存器数据读取出来保存到R1中
        BIC R1,R1,#(0x1<<8)                    @[8]设置为0
        STR R1,[R0]                                         @将修改之后的值写回去
        mov PC,LR                                            @程序返回   
 
    @延时函数
    DELAY:
        LDR R3,=0x10000000
 
    MM:
        CMP R3,#0
        SUBNE R3,R3,#1
        BNE MM
        MOV PC,LR                                           @程序返回
 
    .end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值