发新帖我要提问
12
返回列表
打印
[其他ST产品]

stm32 汇编点灯程序

[复制链接]
楼主: 狗啃模拟
手机看帖
扫描二维码
随时随地手机跟帖
21
狗啃模拟|  楼主 | 2022-1-27 23:56 | 只看该作者 回帖奖励 |倒序浏览
  ;初始化SRAM寄存器
    mov    r1, #0
    ldr    r0, =Flag1
    str    r1, [r0]
    ldr    r0, =DlyI
    str    r1, [r0]
    ldr    r0, =DlyJ
    str    r1, [r0]
    ldr    r0, =DlyK
    str    r1, [r0]
    ldr    r0, =SysTim
    str    r1, [r0]
              
————————————

使用特权

评论回复
22
狗啃模拟|  楼主 | 2022-1-27 23:57 | 只看该作者
;主循环           
main           
    ldr    r0, =Flag1
    ldr    r1, [r0]
    tst    r1, #Bit1               
    ;SysTick产生0.5s,置位bit 1
    beq    main                  ;0.5s标志还没有置位      
   
    ;0.5s标志已经置位
    ldr    r0, =b_05s               
    ;位带操作清零0.5s标志
    mov    r1, #0
    str    r1, [r0]
    bl     LedFlas


    mov    r0, #'K'
    bl     send_a_char      
    b      main
         

使用特权

评论回复
23
狗啃模拟|  楼主 | 2022-1-27 23:58 | 只看该作者
;子程序 串口1发送一个字符
send_a_char
    push   {r0 - r3}
    ldr    r2, =USART1_DR  
    str    r0, [r2]
b1
    ldr    r2, =USART1_SR
    ldr    r2, [r2]
    tst    r2, #0x40
    beq    b1
    ;发送完成(Transmission complete)等待
    pop    {r0 - r3}
    bx     lr

使用特权

评论回复
24
狗啃模拟|  楼主 | 2022-1-27 23:58 | 只看该作者
;子程序 led闪烁
LedFlas     
    push   {r0 - r3}
    ldr    r0, =Flag1
    ldr    r1, [r0]
    tst    r1, #Bit0
    ;bit0 闪烁标志位
    beq    ONLED        ;为0 打开led灯
    ;为1 关闭led灯
    ldr    r0, =b_flas
    mov    r1, #0
    str    r1, [r0]
    ;闪烁标志位置为0,下一状态为打开灯
    ;PC.7输出0
    ldr    r0, =GPIOC_BRR
    ldr    r1, [r0]
    orr    r1, #Bit7
    str    r1, [r0]
    b      LedEx
ONLED      
    ;为0 打开led灯
    ldr    r0, =b_flas
    mov    r1, #1
    str    r1, [r0]
    ;闪烁标志位置为1,下一状态为关闭灯
    ;PC.7输出1
    ldr    r0, =GPIOC_BSRR
    ldr    r1, [r0]
    orr    r1, #Bit7
    str    r1, [r0]
LedEx      
    pop    {r0 - r3}
    bx     lr
                           

使用特权

评论回复
25
狗啃模拟|  楼主 | 2022-1-27 23:59 | 只看该作者
;异常程序
NMI_Handler
    bx     lr


HardFault_Handler
    bx     lr
            
SysTick_Handler
    ldr    r0, =SysTim
    ldr    r1, [r0]
    add    r1, #1
    str    r1, [r0]
    cmp    r1, #500
    bcc    TickExit
    mov    r1, #0
    str    r1, [r0]
    ldr    r0, =b_05s
    ;大于等于500次 清零时钟滴答计数器 设置0.5s标志位
    ;位带操作置1
    mov    r1, #1
    str    r1, [r0]
TickExit   
    bx     lr
                                                                          
    ALIGN           
    ;通过用零或空指令NOP填充,来使当前位置与一个指定的边界对齐
    END

使用特权

评论回复
26
豌豆爹| | 2022-1-28 10:23 | 只看该作者
好帖是好帖就是发的零碎了点

使用特权

评论回复
27
alexzhou88| | 2022-1-30 23:25 | 只看该作者
谢谢楼主分享,不错的资料!

使用特权

评论回复
28
skyred| | 2022-2-9 11:24 | 只看该作者
本来对汇编就不感冒,
这下更不懂了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则