[STM32F1] 重新写了下STM32汇编红外解码

[复制链接]
4114|10
 楼主| yjmwxwx 发表于 2016-1-21 18:32 | 显示全部楼层 |阅读模式
写这东西无任何价值很简单的东西, 到处都有现成稳定完美的代码,根本没必要自己写。

我也不知道写的对不对,反正摸着石头过河,以前我也写过不过这个比以前写的强点。

直接用位带地址保存成完整的码

vs1838B 接在GPIOA_0 上,用TIM2捕获

按键值放在0x20000500 , 码没有倒过来懒得改了,不影响判断。 0x200004f0是连续按键次数暂时没计算他
截图_2016-01-21_18-20-01.png



过程:
根本就不用设置IO口状态,只开了时钟,IO口保持复位值

            ldr r0, = 0x40021018 @ APB2_ENR 开各IO口时钟
                ldr r1, = 0x3c
            str r1, [r0]

            ldr r0, = 0X4002101C @ APB1_ENR  开TIM2时钟
            ldr r1, = 0x01
            str r1, [r0]




开TIM2中断设置优先级

    ldr r0, = 0xe000ed0c
        ldr r1, = 0x5fa0500
    str r1, [r0]
        ldr r0, = 0xe000e400
    mov r1, # 0xc0
    str r1, [r0, # 28]
        ldr r0, = 0xe000e100 @ 中断使能
        ldr r1, = 0x10000000
    str r1, [r0]

下面是TIM2各寄存器的设置
    ldr r0, = 0x40000000 @ tim2
    ldr r1, = 720
    str r1, [r0, # 0x28] @ 分频
    ldr r1, = 0xffffff
    str r1, [r0, # 0x2c] @ 重载
    mov r1, # 2
    str r1, [r0, # 0x0c] @开中断
    mov r1, # 0xf1
    str r1, [r0, # 0x18] @ 捕获/比较模式
    mov r1, # 3
    str r1, [r0, # 0x20] @ 下降沿捕获
    ldr r1, = 0x81
    str r1, [r0]


定时器 2 中断服务程序

tim2dingshiqi:
    push {r0-r7,lr}
    ldr r2, = 0x200004fc         
    ldr r0, = 0x40000034
    ldr r3, [r2]
    ldr r1, [r0]  @ 读取时间
    cmp.w r1, # 0xe000
    bhi tim2fanhui
    cmp.w r1, # 0x1000
    ittt hi
    ldrhi r4, = 0x2200a000
    strhi r4, [r2]
    bhi tim2fanhui
   
    cmp r1, # 0xff
    itttt hi
    ldrhi r5, [r2, # -0x0c]
    addhi r5, # 1
    strhi r5, [r2, # - 0x0c]
    bhi tim2fanhui
    cmp r1, # 0xa0
    itttt hi
    movhi r6, # 1
    strhi r6, [r3], # 4
    strhi r3, [r2]
    bhi tim2fanhui
   
    cmp r1, # 0x60
    ittt hi
    movhi r6, # 0
    strhi r6, [r3], # 4
    strhi r3, [r2]
   
tim2fanhui:
    ldr r0, = 0x40000024
    mov r1,  # 0
    str r1, [r0]
    pop {r0-r7,pc}

 楼主| yjmwxwx 发表于 2016-1-21 18:36 | 显示全部楼层
再采集个正点原子开发板的遥控器的码,刚才那个是天敏电视盒

截图_2016-01-21_18-34-57.png

 楼主| yjmwxwx 发表于 2016-1-21 18:54 | 显示全部楼层
本帖最后由 yjmwxwx 于 2016-1-21 19:08 编辑

写万年历的还没写出来, 这么简单的东西我都写不出来,真是菜啊。。

今天主要把红外解码搞了搞,还写了个菜单,不过子菜单里就一个往R11里面写数值的指令,然后就BX返回了,并前把这个数值显示到数码管上,29个按键可以进入不同的29个子菜单,通过看数码管可以知道进入了哪一个。 程序只在zhucaidan 函数里面死循环,就是测试一下。 不用判断几号键,而是直接根据按哪个键进入哪个函数非常省时间, 数量越多越适合,最好上千个才好。
时钟部分先不测试。
贴出来,防止以后丢了,做个备份

   
  1.   .thumb                 
  2.          .syntax unified
  3. .section .data
  4.     .align 4
  5.    
  6. shumaguanmabiao: .byte 0x88,0xbe,0xc4,0x94,0xb2,0x91,0x81,0xbc,0x80,0x90
  7. hongwaimabiao: .int 0xbc43e708,0xb847e708,0xbd42e708,0xbe41e708,0xbf40e708,0xb946e708,0xba45e708,0xbb44e708,0xb54ae708,0xb649e708,0xb748e708,0xb14ee708,0xb24de708,0xb34ce708,0xb44be708,0xeb14e708,0xe31ce708,0xee11e708,0xea15e708,0xe21de708,0xe916e708,0xe01fe708,0xe11ee708,0xed12e708,0xa35ce708,0xe718e708,0xe619e708,0xe51ae708,0xef10e708

  8. shuaxinbiao: .byte 0x80,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x00
  9. caidian: .word zhucaidian +1,dd1 +1,dd2 +1,dd3 +1,dd4 +1,dd5 +1,dd6 +1,dd7 +1,dd8 +1,dd9 +1,dd10 +1,dd11 +1,dd12 +1,dd13 +1,dd14 +1,dd15 +1,dd16 +1,dd17 +1,dd18 +1,dd19 +1,dd20 +1,dd21 +1,dd22 +1,dd23 +1,dd24 +1,dd25 +1,dd26 +1,dd27 +1,dd28 +1,dd29 +1
  10.    
  11.    
  12.             .equ STACKINIT,          0x20005000
  13.         .equ systickbiaozhi,     0x20000300
  14. .section .text
  15. xiangliangbiao:
  16.     .word STACKINIT
  17.     .word _start + 1
  18.     .word _nmi_handler + 1
  19.     .word _hard_fault  + 1
  20.     .word _memory_fault + 1
  21.     .word _bus_fault + 1
  22.     .word _usage_fault + 1
  23.     .word 0
  24.     .word 0
  25.     .word 0
  26.     .word 0
  27.     .word 0
  28.     .word 0
  29.     .word 0
  30.     .word 0
  31.     .word systickdingshiqi +1
  32.     .word    0 @WWDG      0
  33.     .word    0 @PVD      1
  34.     .word    0 @TAMPER    2
  35.     .word    0 [url=home.php?mod=space&uid=35667]@rtc[/url]        3
  36.     .word    0 [url=home.php?mod=space&uid=25238]@Flash[/url]    4
  37.     .word    0 @RCC        5
  38.     .word    0 @EXTI0    6
  39.     .word    0 @EXTI1    7
  40.     .word    0 @EXTI2    8
  41.     .word    0 @EXTI3    9
  42.     .word    0 @EXTI4    10
  43.     .word    0 @DMA11    11
  44.     .word    0 @DMA12    12
  45.     .word    0 @DMA13    13
  46.     .word    0 @DMA14    14
  47.     .word    0 @DMA15    15
  48.     .word    0 @DMA16    16
  49.     .word    0 @DMA17    17
  50.     .word    0 @ADC1_2     18
  51.     .word    0 @USB_HP_CAN1_TX 19
  52.     .word    0 @USB_LP_CAN1_RX0 20
  53.     .word    0 @CAN1_RX1    21
  54.     .word    0 @CAN1_SCE    22
  55.     .word    0 @EXTI9_5    23
  56.     .word    0 @TIM1_BRK    24
  57.     .word    0 @TIM1_UP    25
  58.     .word    0 @TIM1_TRG_COM    26
  59.     .word    0 @TIM1_CC    27
  60.     .word    tim2dingshiqi +1  @TIM2 28
  61.     .word    0 @TIM3        29
  62.     .word    0 @TIM4        30
  63.     .word    0 @I2C1_EV    31
  64.     .word    0 @I2C1_ER    32
  65.     .word    0 @I2C2_EV    33
  66.     .word    0 @I2C2_ER    34
  67.     .word    0 @SPI1        35
  68.     .word    0 @SPI2        36
  69.     .word    0 @USART1    37
  70.     .word    0 @USART2    38
  71.     .word    0 @USART3    39
  72.     .word    0 @EXTI15_10    40
  73.     .word    0 @RTCAlarm_IRQ    41
  74.     .word    0 @USBWakeUp    42
  75.     .word    0   
  76.     .word    0   
  77.     .word    0
  78.     .word    0
  79.     .word    0
  80.     .word    0
  81.     .word    0
  82.     .word    0 @BootRAM   
  83. _start:
  84.     ldr r0, = 0x40010004
  85.     ldr r1, = 0x02000000
  86.     str r1, [r0]

  87.     str r1, [r0, # 0x04]
  88.     ldr r0, = 0x40021000
  89.     ldr r1, = 0x14D83
  90.     str r1, [r0]
  91. gsszbz:
  92.     ldr r2, [r0]
  93.     ldr r1, = 0x20000
  94.     tst r1, r2           @HSE高速时钟标志位           
  95.     bne rccchushihua
  96.     b gsszbz
  97. rccchushihua:
  98.     ldr r0, = 0x40022000
  99.     mov r1, # 0x00000032
  100.     str r1, [r0]           @FLASH缓冲 缓冲开启
  101.     ldr r0, = 0x40021004
  102.     ldr r1, = 0x1D8400
  103.     str r1, [r0]
  104.     ldr r0, = 0x40021000
  105.     ldr r1, = 0x1033D03
  106.     str r1, [r0]
  107. chaxun:
  108.     ldr r2, [r0]
  109.     ldr r1, = 0x2000000
  110.     tst r1, r2
  111.     bne rccgg               @等待PLL稳定
  112.     b chaxun
  113. rccgg:
  114.     ldr r0, = 0x40021004
  115.     ldr r1, = 0x1D8402
  116.     str r1, [r0]            [url=home.php?mod=space&uid=72445]@[/url] PLL作为系统时钟

  117.     ldr r0, = 0x40010004
  118.     ldr r1, = 0x02000000
  119.     str r1, [r0]

  120. neicunqingling:                  @ 无聊把内存清0
  121.     ldr r0, = 0x20000000
  122.     ldr r2, = 0x4fff         @ 区域是0X4FFF大的地方
  123.     mov r1, # 0              @ 写0
  124. qingling_xunhuan:               
  125.     str r1, [r0], 4         
  126.     subs r2, # 1
  127.     bne qingling_xunhuan     @ 循环清0

  128. chushihuayixieshuju:     @初始化一些数据
  129.     ldr r0, = 0x200004fc
  130.     ldr r1, = 0x2200a000
  131.     str r1, [r0]
  132.     mov r0, # 0
  133.     mov r1, r0
  134.     mov r2, r0
  135.     mov r3, r0
  136.     mov r4, r0
  137.     mov r5, r0
  138.     mov r6, r0
  139.     mov r7, r0
  140.     mov r8, r0
  141.     mov r9, r0
  142.     mov r10, r0
  143.     mov r11, r0
  144.     mov r12, r0
  145.    
  146.    
  147. systick:
  148.     @0xe000e010 SYSTICK控制状态寄存器
  149.     @0=定时器使能
  150.     @1=(1倒数到0发出异常请,0无动作)
  151.     @2=(0外部始终1内核时钟)
  152.     @16= 如果赏赐读取本寄存器后SYSTICK已经数到0则该位为1如果读取该位则清0
  153.     @0xe000e014 重载值寄存器 数到0将要被重载的值
  154.     @0xe000e018 当前值,写清0
  155.     @0e000e01c
  156.     @0-23 10MS的时间内倒计数的格数
  157.     @ 30=(1教准不是准确的10MS)(0教准是准确的10MS)
  158.     ldr r0, = 0xe000e010
  159.     mov r1, # 0               
  160.     str r1, [r0]            @ 关掉SYSTICK
  161.     ldr r1, = 9000      @ 重载数
  162.     str r1, [r0, # 4]       @ 写进重载数
  163.     str r1, [r0, # 8]       @ 清0当前数         
  164.     ldr r3, = 0xe000ed23  @systick优先级
  165.     mov r1, # 240
  166.     str r1, [r3]
  167.     mov r1, # 3
  168.     str r1, [r0] @ 开定时器
  169.    
  170. waisheshizhong:


  171.     @APB2_ENR=0X40021018 0(AFIO)1(保留)2(PA)3(PB)4(PC)5(PD)6(PE)78(保留)
  172.     @9(ADC1)10(ADC2)11(TIM1)12(SPI1)13(保留)14(USART1)15(保留)
  173.             ldr r0, = 0x40021018 @ APB2_ENR
  174.             ldr r1, = 0x3c
  175.             str r1, [r0]
  176.     @APB1_ENR=0X4002101C
  177.     @0=TIM2,1=TIM3,2=TIM4,3=TIM5,4=TIM6,5=TIM7,11=WWDG
  178.     @14=SP12,15=SP13,17=UART3,19=UART4,20=UART5
  179.     @21=I2C,22=I2C2,23=USB,25=CAN,27=BKPT,28=PWR,29=DACEN
  180.         ldr r0, = 0X4002101C @ APB1_ENR
  181.         ldr r1, = 0x01
  182.         str r1, [r0]
  183.    
  184. zhongduankongzhi:
  185.     @SETENA0=0XE000E100,SETENA1=0XE000E104 @中断使能
  186.     @CLRENA0=0XE000E180,CLRENA1=0XE000E184 @中断除能
  187.     @SETPEND0=0XE000E200,SETPPEND1=0XE000E204 @中断悬起
  188.     @CLRPEND0=0XE000E280,CLRPEND1=0XE000E284  @中断解悬
  189.     @ACTIVE0=0XE000E300,ACTIVE1=0XE000E304   @ 中断活动状态
  190.     @0XE000E400-0XE000E43C 中断优先级阵列每个占8位
  191.     @0XE000ED00=CPUID,0XE000ED04=中断控制及状态寄存器
  192.     @0xe000ed08=向量表偏移,0xe000ed0c=应用程序中断及复位
  193.     @0xe000ed10=系统控制,0XE000ED14=配置与控制
  194.     @0xe000ed18-0xe000ed23=系统异常优先级阵列
  195.     ldr r0, = 0xe000ed0c
  196.     ldr r1, = 0x5fa0500
  197.     str r1, [r0]
  198.     ldr r0, = 0xe000e400
  199.     mov r1, # 0xc0
  200.     str r1, [r0, # 28]
  201.     ldr r0, = 0xe000e100 @ 中断使能
  202.     ldr r1, = 0x10000000
  203.     str r1, [r0]
  204.    
  205.    
  206.    
  207. timdingshiqi:
  208.     @tim1=0x40012c00
  209.     @+0=CR1 控制寄存器
  210.     @+4=CR2 控制寄存器2
  211.     @+8=SMCR 从模式控制寄存器
  212.     @+c=DIER 中断使能寄存器
  213.     @+10=SR 状态寄存器
  214.     @+14=EGR 事件产生寄存器
  215.     @+18=CCMR1 捕获/比较模式寄存器1
  216.     @+1C=CCMR2 捕获/比较模式寄存器2
  217.     @+20=CCER 捕获/比较使能寄存器
  218.     @+24=CNT 计数器
  219.     @+28=PSC 预分频器
  220.     @+2C=ARR 重载寄存器
  221.     @+30=RCR 重复计数寄存器
  222.     @+34=CCR1 捕获/比较寄存器1
  223.     @+38=CCR2 捕获/比较寄存器2
  224.     @+3C=CCR3 捕获/比较寄存器3
  225.     @+40=CCR4 捕获/比较寄存器4
  226.     @+44=BDTR 刹车/死区寄存器
  227.     @+48=DCR DMA控制器
  228.     @+4C=DMAR 连续模式的DMA地址
  229.     @TIM2=0x40000000
  230. @18=CCMR1,18=OCMR1,1C=CCMR2,1C=OCMR2
  231. @CNT与CCR比较占空,ARR与PSC决定频率。主频除以PSC=计数频率
  232.     ldr r0, = 0x40000000 @ tim2
  233.     ldr r1, = 720
  234.     str r1, [r0, # 0x28] @ 分频
  235.     ldr r1, = 0xffffff
  236.     str r1, [r0, # 0x2c] @ 重载
  237.     mov r1, # 2
  238.     str r1, [r0, # 0x0c] @开中断
  239.     mov r1, # 0xf1
  240.     str r1, [r0, # 0x18] @ 捕获/比较模式
  241.     mov r1, # 3
  242.     str r1, [r0, # 0x20] @ 下降沿捕获
  243.     ldr r1, = 0x81
  244.     str r1, [r0]
  245.    
  246. IOshezhi:
  247.    
  248.     ldr r0, = 0x40010c00
  249.     @PA=0x40010800 PB=0x40010c00 PC=0x40011000
  250.     @PD=0x40011400 PE=0x40011800 PF=0x40011c00
  251.     @ IO 1(通用推挽10M)2(通用推挽2M)3(通用推挽50M)
  252.     @4(浮空输入)5(通用开漏输出10M)6(通用开漏输出2M)
  253.     @7(通用开漏输出50M)8(上拉下拉输入)9(复用功能推挽输出10M)
  254.     @A(复用功能推挽输出2M)B(复用功能推挽输出50M)C(保留)
  255.     @D(复用功能开溜输出10M)E(复用功能开漏输出2M)F(复用功能开漏输出50M)
  256.     @ 偏移0X8=IDR 输入数据寄存器
  257.     @偏移0XC=ODR 输出数据寄存器
  258.     @偏移0X10=BSRR IO开
  259.     @偏移0X14=BRR  IO关
  260.     ldr r1, = 0x45554444
  261.     str r1, [r0, # 0x04]
  262. zhucaidian:   
  263.     bl anjian

  264.     mov r0, r11
  265.     mov r1, # 8
  266.     ldr r2, = 0x20000100
  267.     bl zhuan_ascii
  268.     mov r0, # 8
  269.     bl xieshumaguan
  270.    
  271.     ldr r3, = 0x200004f8
  272.     ldr r0, [r3]
  273.     ldr r1, = caidian
  274.     ldr lr, [r1]
  275.     lsl r0, # 2
  276.     ldr r2, [r1, r0]
  277.     mov pc, r2
  278. dd1:
  279.     ldr r11, = 0x100
  280.     bx lr
  281. dd2:
  282.     ldr r11, = 0x101
  283.     bx lr
  284. dd3:
  285.     ldr r11, = 0x102
  286.     bx lr
  287. dd4:
  288.     ldr r11, = 0x103
  289.     bx lr
  290. dd5:
  291.     ldr r11, = 0x104
  292.     bx lr
  293. dd6:
  294.     ldr r11, = 0x105
  295.     bx lr
  296. dd7:
  297.     ldr r11, = 0x106
  298.     bx lr
  299. dd8:
  300.     ldr r11, = 0x107
  301.     bx lr
  302. dd9:
  303.     ldr r11, = 0x108
  304.     bx lr
  305. dd10:
  306.     ldr r11, = 0x109
  307.     bx lr
  308. dd11:
  309.     ldr r11, = 0x110
  310.     bx lr
  311. dd12:
  312.     ldr r11, = 0x111
  313.     bx lr
  314. dd13:
  315.     ldr r11, = 0x112
  316.     bx lr
  317. dd14:
  318.     ldr r11, = 0x113
  319.     bx lr
  320. dd15:
  321.     ldr r11, = 0x114
  322.     bx lr
  323. dd16:
  324.     ldr r11, = 0x115
  325.     bx lr
  326. dd17:
  327.     ldr r11, = 0x116
  328.     bx lr
  329. dd18:
  330.     ldr r11, = 0x117
  331.     bx lr
  332. dd19:
  333.     ldr r11, = 0x118
  334.     bx lr
  335. dd20:
  336.     ldr r11, = 0x119
  337.     bx lr
  338. dd21:
  339.     ldr r11, = 0x120
  340.     bx lr
  341. dd22:
  342.     ldr r11, = 0x121
  343.     bx lr
  344. dd23:
  345.     ldr r11, = 0x122
  346.     bx lr
  347. dd24:
  348.     ldr r11, = 0x123
  349.     bx lr
  350. dd25:
  351.     ldr r11, = 0x124
  352.     bx lr
  353. dd26:
  354.     ldr r11, = 0x125
  355.     bx lr
  356. dd27:
  357.     ldr r11, = 0x126
  358.     bx lr
  359. dd28:
  360.     ldr r11, = 0x127
  361.     bx lr
  362. dd29:
  363.     ldr r11, = 0x128
  364.     bx lr
  365.    
  366.    















  367.    
  368. zhuchengxu:
  369.     bl anjian
  370.     ldr r2, = 0x200004f8
  371.     ldrb r2, [r2]
  372.    
  373.     ldr r1, = 0x20000014
  374.     ldrb r8, [r1]
  375.     ldrb r2, [r1, # 1]
  376.     ldrb r3, [r1, # 2]
  377.     ldrb r4, [r1, # 3]
  378.     mov r5, # 100
  379.     mul r9, r8, r5
  380.     movw r5, # 10000
  381.     mul r7, r3, r5
  382.     ldr r5, = 1000000
  383.     mul r6, r4, r5
  384.     add r8, r8, r9
  385.     add r2, r7, r8
  386.     add r0, r2, r6
  387.     mov r1, # 8
  388.     ldr r2, = 0x20000100
  389.     bl zhuan_ascii   
  390.    
  391.     ldr r0, = 20160101
  392.     mov r1, # 8
  393.     ldr r2, = 0x20000110
  394.     bl zhuan_ascii
  395.     mov r0, # 8
  396.     bl xieshumaguan
  397.     b zhuchengxu
  398.    
  399.    
  400. zhuan_ascii: @ 入口R0=数据 R1= 长度 R2=出口
  401.     push {r0-r7,lr}
  402.     ldr r7, = shumaguanmabiao
  403.     mov r5, # 10
  404. xunhuanqiuma:
  405.     udiv r4, r0, r5
  406.     mul r6, r4, r5
  407.     sub r3, r0, r6
  408.     ldrb r6, [r7, r3]
  409.     strb r6, [r2], # 1
  410.     mov r0, r4
  411.     subs r1, # 1
  412.     bne xunhuanqiuma
  413.     pop {r0-r7,pc}
  414. xie595:    @ 入口0X20000000
  415.    
  416.     @74HC595 11=输入锁存 12=输出锁存 14=数据
  417.     push {r0-r5,lr}
  418.     ldr r0, = 0x422181b0 @ 位带地址  
  419.     mov r1, # 1          @ 1
  420.     mov r2, # 0          @ 0
  421.     ldr r3, = 0x22000000 @ 0x20000000的位带
  422.     mov r4, # 24         @ 写两个8位
  423. xunhuan595:
  424.     str r2, [r0, # 0x08] @ 595_11 输入锁存
  425.     ldr r5, [r3], # 4    @ 取出一位的数据
  426.     str r5, [r0]         @14脚输出数据
  427.     str r1, [r0, # 0x08] @ 锁存
  428.     subs r4, # 1         
  429.     bne xunhuan595       @循环16次
  430.     str r2, [r0, # 0x04] @ 12输出锁存
  431.     str r1, [r0, # 0x04]
  432.     pop {r0-r5,pc}      @ 弹出各寄存器返回
  433. anjian:
  434.     push {r0-r12,lr}
  435.     ldr r3, = 0x20000500
  436.     ldr r5, = hongwaimabiao
  437.     mov r6, # 29
  438. panduananjian:
  439.     ldr r4, [r5], # 4
  440.     ldr r2, [r3]
  441.     cmp r2, r4
  442.     beq anjianzhengque
  443.     subs r6, # 1
  444.     bne panduananjian
  445.     b anjianfanhui
  446. anjianzhengque:
  447.     ldr r2, = 0x200004f8
  448.     str r6, [r2]
  449.    
  450. anjianfanhui:
  451.     pop {r0-r12,pc}
  452. xieshumaguan: @ r0位数
  453.     push {r0-r12,lr}
  454.     ldr r9, = 0x20000110
  455.     ldr r7, = 0x20000100
  456.     ldr r8, = shuaxinbiao
  457.     ldr r6, = 0x20000000

  458. xianshi:
  459.     ldrb r5, [r8], # 1
  460.     ldrb r2, [r7], # 1
  461.     ldrb r4, [r9], # 1
  462.     strb r2, [r6, # 1]
  463.     strb r4, [r6, # 2]
  464.     strb r5, [r6]
  465.     bl xie595
  466.     subs r0, # 1
  467.     bne xianshi
  468.     pop {r0-r12,pc}
  469.    
  470. _nmi_handler:
  471.     bx lr
  472. _hard_fault:
  473.     bx lr
  474. _memory_fault:
  475.     bx lr
  476. _bus_fault:
  477.     bx lr
  478. _usage_fault:
  479.      bx lr
  480. systickdingshiqi:              @ SYSTICK定时期中断服务函数
  481.     push {r0-r12,lr}
  482.     ldr r0, = 0xe00ed04
  483.     ldr r1, = 0x2000000
  484.     str r1, [r0]         @ 挂起SYSTICK
  485.     ldr r2, = 0x20000010
  486.     ldr r4, = 0x20000014
  487.     ldrb r3, [r4, # 1]
  488.     ldrb r5, [r4, # 2]
  489.     ldrb r6, [r4, # 3]
  490.     ldrb r7, [r4]
  491.     ldr r1, [r2]
  492.     add r1, # 1
  493.     cmp.w r1, # 1
  494.     itt eq
  495.     moveq r1, # 0
  496.     addeq r3, # 1
  497.     cmp r3 ,# 60
  498.     itt eq
  499.     moveq r3, # 0
  500.     addeq r5, # 1
  501.     cmp r5, # 60
  502.     itt eq
  503.     moveq r5, # 0
  504.     addeq r6, # 1
  505.     cmp r6, # 24
  506.     itt eq
  507.     moveq r6, # 0
  508.     addeq r7, # 1
  509.     cmp r7, # 7
  510.     it eq
  511.     moveq r7, # 0
  512.    
  513.     strb r3, [r4, # 1]
  514.     strb r5, [r4, # 2]
  515.     strb r6, [r4, # 3]
  516.     strb r7, [r4]
  517.     str r1, [r2]
  518.     pop {r0-r12,pc}

  519. tim2dingshiqi:
  520.     push {r0-r7,lr}
  521.     ldr r2, = 0x200004fc
  522.     ldr r0, = 0x40000034
  523.     ldr r3, [r2]
  524.     ldr r1, [r0]  @ 读取时间
  525.     cmp.w r1, # 0xe000
  526.     bhi tim2fanhui
  527.     cmp.w r1, # 0x1000
  528.     ittt hi
  529.     ldrhi r4, = 0x2200a000
  530.     strhi r4, [r2]
  531.     bhi tim2fanhui
  532.    
  533.     cmp r1, # 0xff
  534.     itttt hi
  535.     ldrhi r5, [r2, # -0x0c]
  536.     addhi r5, # 1
  537.     strhi r5, [r2, # - 0x0c]
  538.     bhi tim2fanhui
  539.     cmp r1, # 0xa0
  540.     itttt hi
  541.     movhi r6, # 1
  542.     strhi r6, [r3], # 4
  543.     strhi r3, [r2]
  544.     bhi tim2fanhui
  545.    
  546.     cmp r1, # 0x60
  547.     ittt hi
  548.     movhi r6, # 0
  549.     strhi r6, [r3], # 4
  550.     strhi r3, [r2]
  551.    
  552. tim2fanhui:
  553.     ldr r0, = 0x40000024
  554.     mov r1,  # 0
  555.     str r1, [r0]
  556.     pop {r0-r7,pc}
  557.    

lyn3210 发表于 2016-1-22 10:55 | 显示全部楼层
是,汇编高速、高效。
 楼主| yjmwxwx 发表于 2016-1-22 22:22 | 显示全部楼层
终于搞出来了,虽然很简单,但是作为菜鸟级别的人搞出来也不容易, 用的SYSTICK定时器,16个数码管分别显示公历、时间、星期 , 红外遥控器只用了4个按键调整时间

  1.          .thumb                 
  2.          .syntax unified
  3. .section .data
  4.         .align 4
  5.        
  6. shumaguanmabiao: .byte 0x88,0xbe,0xc4,0x94,0xb2,0x91,0x81,0xbc,0x80,0x90
  7. hongwaimabiao: .int 0xbc43e708,0xb847e708,0xbd42e708,0xbe41e708,0xbf40e708,0xb946e708,0xba45e708,0xbb44e708,0xb54ae708,0xb649e708,0xb748e708,0xb14ee708,0xb24de708,0xb34ce708,0xb44be708,0xeb14e708,0xe31ce708,0xee11e708,0xea15e708,0xe21de708,0xe916e708,0xe01fe708,0xe11ee708,0xed12e708,0xa35ce708,0xe718e708,0xe619e708,0xe51ae708,0xef10e708

  8. shuaxinbiao: .byte 0x80,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x00
  9. caidian: .word zhucaidan +1,dd1 +1,dd2 +1,dd3 +1,dd4 +1,dd5 +1,dd6 +1,dd7 +1,dd8 +1,dd9 +1,dd10 +1,dd11 +1,dd12 +1,dd13 +1,dd14 +1,dd15 +1,dd16 +1,dd17 +1,dd18 +1,dd19 +1,dd20 +1,dd21 +1,dd22 +1,dd23 +1,dd24 +1,dd25 +1,dd26 +1,dd27 +1,dd28 +1,dd29 +1
  10.        
  11. yuefenbiao: .byte 0x00,0x20,0x1d,0x20,0x1f,0x20,0x1f,0x20,0x1f,0x20,0x1f,0x20,0x1f,0x20
  12.                 .equ STACKINIT,          0x20005000
  13.                 .equ systickbiaozhi,     0x20000300
  14. .section .text
  15. xiangliangbiao:
  16.         .word STACKINIT
  17.         .word _start + 1
  18.         .word _nmi_handler + 1
  19.         .word _hard_fault  + 1
  20.         .word _memory_fault + 1
  21.         .word _bus_fault + 1
  22.         .word _usage_fault + 1
  23.         .word 0
  24.         .word 0
  25.         .word 0
  26.         .word 0
  27.         .word 0
  28.         .word 0
  29.         .word 0
  30.         .word 0
  31.         .word systickdingshiqi +1
  32.         .word        0 @WWDG          0
  33.         .word        0 @PVD          1
  34.         .word        0 @TAMPER        2
  35.         .word        0 @RTC                3
  36.         .word        0 @FLASH        4
  37.         .word        0 @RCC                5
  38.         .word        0 @EXTI0        6
  39.         .word        0 @EXTI1        7
  40.         .word        0 @EXTI2        8
  41.         .word        0 @EXTI3        9
  42.         .word        0 @EXTI4        10
  43.         .word        0 @DMA11        11
  44.         .word        0 @DMA12        12
  45.         .word        0 @DMA13        13
  46.         .word        0 @DMA14        14
  47.         .word        0 @DMA15        15
  48.         .word        0 @DMA16        16
  49.         .word        0 @DMA17        17
  50.         .word        0 @ADC1_2         18
  51.         .word        0 @USB_HP_CAN1_TX 19
  52.         .word        0 @USB_LP_CAN1_RX0 20
  53.         .word        0 @CAN1_RX1        21
  54.         .word        0 @CAN1_SCE        22
  55.         .word        0 @EXTI9_5        23
  56.         .word        0 @TIM1_BRK        24
  57.         .word        0 @TIM1_UP        25
  58.         .word        0 @TIM1_TRG_COM        26
  59.         .word        0 @TIM1_CC        27
  60.         .word        tim2dingshiqi +1  @TIM2 28
  61.         .word        0 @TIM3                29
  62.         .word        0 @TIM4                30
  63.         .word        0 @I2C1_EV        31
  64.         .word        0 @I2C1_ER        32
  65.         .word        0 @I2C2_EV        33
  66.         .word        0 @I2C2_ER        34
  67.         .word        0 @SPI1                35
  68.         .word        0 @SPI2                36
  69.         .word        0 @USART1        37
  70.         .word        0 @USART2        38
  71.         .word        0 @USART3        39
  72.         .word        0 @EXTI15_10        40
  73.         .word        0 @RTCAlarm_IRQ        41
  74.         .word        0 @USBWakeUp        42
  75.         .word        0       
  76.         .word        0       
  77.         .word        0
  78.         .word        0
  79.         .word        0
  80.         .word        0
  81.         .word        0
  82.         .word        0 @BootRAM   
  83. _start:
  84.         ldr r0, = 0x40010004
  85.         ldr r1, = 0x02000000
  86.         str r1, [r0]

  87.         str r1, [r0, # 0x04]
  88.         ldr r0, = 0x40021000
  89.         ldr r1, = 0x14D83
  90.         str r1, [r0]
  91. gsszbz:
  92.         ldr r2, [r0]
  93.         ldr r1, = 0x20000
  94.         tst r1, r2           @HSE高速时钟标志位           
  95.         bne rccchushihua
  96.         b gsszbz
  97. rccchushihua:
  98.         ldr r0, = 0x40022000
  99.         mov r1, # 0x00000032
  100.         str r1, [r0]           @FLASH缓冲 缓冲开启
  101.         ldr r0, = 0x40021004
  102.         ldr r1, = 0x1D8400
  103.         str r1, [r0]
  104.         ldr r0, = 0x40021000
  105.         ldr r1, = 0x1033D03
  106.         str r1, [r0]
  107. chaxun:
  108.         ldr r2, [r0]
  109.         ldr r1, = 0x2000000
  110.         tst r1, r2
  111.         bne rccgg               @等待PLL稳定
  112.         b chaxun
  113. rccgg:
  114.         ldr r0, = 0x40021004
  115.         ldr r1, = 0x1D8402
  116.         str r1, [r0]            @ PLL作为系统时钟

  117.         ldr r0, = 0x40010004
  118.         ldr r1, = 0x02000000
  119.         str r1, [r0]

  120. neicunqingling:                  @ 无聊把内存清0
  121.         ldr r0, = 0x20000000
  122.         ldr r2, = 0x4fff         @ 区域是0X4FFF大的地方
  123.         mov r1, # 0              @ 写0
  124. qingling_xunhuan:               
  125.         str r1, [r0], 4         
  126.         subs r2, # 1
  127.         bne qingling_xunhuan     @ 循环清0

  128. chushihuayixieshuju:         @初始化一些数据
  129.         ldr r0, = 0x200004fc
  130.         ldr r1, = 0x2200a000
  131.         str r1, [r0]
  132.         ldr r0, = 0x2000001c
  133.         ldr r1, = 0xffffff
  134.         str r1, [r0]
  135.         ldr r5, = 0x20000024 @ 22000480
  136.         ldr r1, = 0x00110001
  137.         ldr r2, = 0x00010001
  138.         ldr r3, = 0x00010101
  139.         str r1, [r5]
  140.         str r2, [r5, # 4]
  141.         str r3, [r5, # 8]
  142.        
  143. systick:
  144.         @0xe000e010 SYSTICK控制状态寄存器
  145.         @0=定时器使能
  146.         @1=(1倒数到0发出异常请,0无动作)
  147.         @2=(0外部始终1内核时钟)
  148.         @16= 如果赏赐读取本寄存器后SYSTICK已经数到0则该位为1如果读取该位则清0
  149.         @0xe000e014 重载值寄存器 数到0将要被重载的值
  150.         @0xe000e018 当前值,写清0
  151.         @0e000e01c
  152.         @0-23 10MS的时间内倒计数的格数
  153.         @ 30=(1教准不是准确的10MS)(0教准是准确的10MS)
  154.         ldr r0, = 0xe000e010
  155.         mov r1, # 0               
  156.         str r1, [r0]            @ 关掉SYSTICK
  157.         ldr r1, = 9000      @ 重载数
  158.         str r1, [r0, # 4]       @ 写进重载数
  159.         str r1, [r0, # 8]       @ 清0当前数         
  160.         ldr r3, = 0xe000ed23  @systick优先级
  161.         mov r1, # 240
  162.         str r1, [r3]
  163.         mov r1, # 3
  164.         str r1, [r0] @ 开定时器
  165.        
  166. waisheshizhong:


  167.         @APB2_ENR=0X40021018 0(AFIO)1(保留)2(PA)3(PB)4(PC)5(PD)6(PE)78(保留)
  168.         @9(ADC1)10(ADC2)11(TIM1)12(SPI1)13(保留)14(USART1)15(保留)
  169.                 ldr r0, = 0x40021018 @ APB2_ENR
  170.                 ldr r1, = 0x3c
  171.                 str r1, [r0]
  172.         @APB1_ENR=0X4002101C
  173.         @0=TIM2,1=TIM3,2=TIM4,3=TIM5,4=TIM6,5=TIM7,11=WWDG
  174.         @14=SP12,15=SP13,17=UART3,19=UART4,20=UART5
  175.         @21=I2C,22=I2C2,23=USB,25=CAN,27=BKPT,28=PWR,29=DACEN
  176.                 ldr r0, = 0X4002101C @ APB1_ENR
  177.                 ldr r1, = 0x01
  178.                 str r1, [r0]
  179.        
  180. zhongduankongzhi:
  181.         @SETENA0=0XE000E100,SETENA1=0XE000E104 @中断使能
  182.         @CLRENA0=0XE000E180,CLRENA1=0XE000E184 @中断除能
  183.         @SETPEND0=0XE000E200,SETPPEND1=0XE000E204 @中断悬起
  184.         @CLRPEND0=0XE000E280,CLRPEND1=0XE000E284  @中断解悬
  185.         @ACTIVE0=0XE000E300,ACTIVE1=0XE000E304   @ 中断活动状态
  186.         @0XE000E400-0XE000E43C 中断优先级阵列每个占8位
  187.         @0XE000ED00=CPUID,0XE000ED04=中断控制及状态寄存器
  188.         @0xe000ed08=向量表偏移,0xe000ed0c=应用程序中断及复位
  189.         @0xe000ed10=系统控制,0XE000ED14=配置与控制
  190.         @0xe000ed18-0xe000ed23=系统异常优先级阵列
  191.         ldr r0, = 0xe000ed0c
  192.         ldr r1, = 0x5fa0500
  193.         str r1, [r0]
  194.         ldr r0, = 0xe000e400
  195.         mov r1, # 0xc0
  196.         str r1, [r0, # 28]
  197.         ldr r0, = 0xe000e100 @ 中断使能
  198.         ldr r1, = 0x10000000
  199.         str r1, [r0]
  200.        
  201.        
  202.        
  203. timdingshiqi:
  204.         @tim1=0x40012c00
  205.         @+0=CR1 控制寄存器
  206.         @+4=CR2 控制寄存器2
  207.         @+8=SMCR 从模式控制寄存器
  208.         @+c=DIER 中断使能寄存器
  209.         @+10=SR 状态寄存器
  210.         @+14=EGR 事件产生寄存器
  211.         @+18=CCMR1 捕获/比较模式寄存器1
  212.         @+1C=CCMR2 捕获/比较模式寄存器2
  213.         @+20=CCER 捕获/比较使能寄存器
  214.         @+24=CNT 计数器
  215.         @+28=PSC 预分频器
  216.         @+2C=ARR 重载寄存器
  217.         @+30=RCR 重复计数寄存器
  218.         @+34=CCR1 捕获/比较寄存器1
  219.         @+38=CCR2 捕获/比较寄存器2
  220.         @+3C=CCR3 捕获/比较寄存器3
  221.         @+40=CCR4 捕获/比较寄存器4
  222.         @+44=BDTR 刹车/死区寄存器
  223.         @+48=DCR DMA控制器
  224.         @+4C=DMAR 连续模式的DMA地址
  225.         @TIM2=0x40000000
  226. @18=CCMR1,18=OCMR1,1C=CCMR2,1C=OCMR2
  227. @CNT与CCR比较占空,ARR与PSC决定频率。主频除以PSC=计数频率
  228.         ldr r0, = 0x40000000 @ tim2
  229.         ldr r1, = 720
  230.         str r1, [r0, # 0x28] @ 分频
  231.         ldr r1, = 0xffffff
  232.         str r1, [r0, # 0x2c] @ 重载
  233.         mov r1, # 2
  234.         str r1, [r0, # 0x0c] @开中断
  235.         mov r1, # 0xf1
  236.         str r1, [r0, # 0x18] @ 捕获/比较模式
  237.         mov r1, # 3
  238.         str r1, [r0, # 0x20] @ 下降沿捕获
  239.         ldr r1, = 0x81
  240.         str r1, [r0]
  241.        
  242. IOshezhi:
  243.        
  244.         ldr r0, = 0x40010c00
  245.         @PA=0x40010800 PB=0x40010c00 PC=0x40011000
  246.         @PD=0x40011400 PE=0x40011800 PF=0x40011c00
  247.         @ IO 1(通用推挽10M)2(通用推挽2M)3(通用推挽50M)
  248.         @4(浮空输入)5(通用开漏输出10M)6(通用开漏输出2M)
  249.         @7(通用开漏输出50M)8(上拉下拉输入)9(复用功能推挽输出10M)
  250.         @A(复用功能推挽输出2M)B(复用功能推挽输出50M)C(保留)
  251.         @D(复用功能开溜输出10M)E(复用功能开漏输出2M)F(复用功能开漏输出50M)
  252.         @ 偏移0X8=IDR 输入数据寄存器
  253.         @偏移0XC=ODR 输出数据寄存器
  254.         @偏移0X10=BSRR IO开
  255.         @偏移0X14=BRR  IO关
  256.         ldr r1, = 0x45554444
  257.         str r1, [r0, # 0x04]

  258. kammengou:
  259.         ldr r0, = 0x40003000
  260.         ldr r1, = 0x5555
  261.         str r1, [r0]
  262.         mov r1, # 4
  263.         str r1, [r0, # 4]
  264.         ldr r1, = 0x28c
  265.         str r1, [r0, # 8]
  266.         ldr r1, = 0xaaaa
  267.         str r1, [r0]
  268.         ldr r1, = 0xcccc
  269.         str r1, [r0]

  270.        
  271. zhucaidan:

  272.         ldr r0, = 0x40003000
  273.         ldr r1, = 0xaaaa
  274.         str r1, [r0]  @ 看门狗
  275.        
  276.         ldr r0, = 0xe000e010
  277.         mov r1, # 0
  278.         str r1, [r0]
  279.         bl systickdingshiqi
  280.        
  281.         bl anjian
  282.         ldr r0, = 0x20000014
  283.         bl zhuan_shijinzhi
  284.         ldr r0, [r12, # -4]
  285.         mov r1, # 8
  286.         ldr r2, = 0x20000100
  287.         bl zhuan_ascii
  288.         ldr r0, = 0x20000018
  289.         bl zhuan_shijinzhi
  290.         ldr r0, [r12, # -4]
  291.         mov r1, # 8
  292.         ldr r2, = 0x20000110
  293.         bl zhuan_ascii
  294.        
  295.         mov r0, # 8
  296.         bl xieshumaguan
  297.        
  298.         ldr r3, = 0x200004f8
  299.         ldr r0, [r3]
  300.         ldr r1, = caidian
  301.         ldr lr, [r1]
  302.         lsl r0, # 2
  303.         ldr r2, [r1, r0]
  304.         mov pc, r2
  305. dd2:
  306.         ldr r11, = 0x101
  307.         bx lr
  308. dd3:
  309.         push {r0-r10,lr}
  310.         ldr r3, = 0x20000020
  311.         ldr r3, [r3]
  312.         ldr r0, = 0x20000014
  313.         ldrb r1, [r0, r3]
  314.         add r1, # 1
  315.         strb r1, [r0, r3]
  316.        
  317.         bl qingchuanjian
  318.        
  319.         pop {r0-r10,pc}
  320. dd4:
  321.         push {r0-r10,lr}
  322.         ldr r5, = 0x20000020
  323.         ldr r4, [r5]
  324.         add r4, # 1
  325.         cmp r4, # 8
  326.         it eq
  327.         moveq r4, # 0
  328.         str r4, [r5]
  329.         bl qingchuanjian
  330.         ldr r11, = 0x103
  331.         pop {r0-r10,pc}
  332.        
  333. dd5:
  334.         ldr r11, = 0x104
  335.         bx lr
  336. dd6:
  337.         ldr r11, = 0x105
  338.         bx lr
  339. dd7:
  340.         ldr r11, = 0x106
  341.         bx lr
  342. dd8:
  343.         ldr r11, = 0x107
  344.         bx lr
  345. dd9:
  346.         ldr r11, = 0x108
  347.         bx lr
  348. dd10:
  349.         ldr r11, = 0x109
  350.         bx lr
  351. dd11:
  352.         ldr r11, = 0x110
  353.         bx lr
  354. dd12:
  355.         ldr r11, = 0x111
  356.         bx lr
  357. dd13:
  358.         ldr r11, = 0x112
  359.         bx lr
  360. dd14:
  361.         ldr r11, = 0x113
  362.         bx lr
  363. dd15:
  364.         ldr r11, = 0x114
  365.         bx lr
  366. dd16:
  367.         ldr r11, = 0x115
  368.         bx lr
  369. dd17:
  370.         ldr r11, = 0x116
  371.         bx lr
  372. dd18:
  373.         ldr r11, = 0x117
  374.         bx lr
  375. dd19:
  376.         ldr r11, = 0x118
  377.         bx lr
  378. dd20:
  379.         ldr r11, = 0x119
  380.         bx lr
  381. dd21:
  382.         ldr r11, = 0x120
  383.         bx lr
  384. dd22:
  385.         ldr r11, = 0x121
  386.         bx lr
  387. dd23:
  388.         ldr r11, = 0x122
  389.         bx lr
  390. dd24:
  391.         ldr r11, = 0x123
  392.         bx lr
  393. dd25:
  394.         ldr r11, = 0x124
  395.         bx lr
  396. dd26:
  397.         ldr r11, = 0x125
  398.         bx lr
  399. dd27:
  400.         ldr r11, = 0x126
  401.         bx lr
  402. dd28:
  403.         ldr r11, = 0x127
  404.         bx lr
  405. dd29:
  406.         ldr r11, = 0x128
  407.         bx lr
  408.        
  409.        
  410. dd1:
  411.         ldr r0, = 0xe000e010
  412.         mov r1, # 3
  413.         str r1, [r0]
  414.        
  415.        
  416. zhuye:

  417.         ldr r0, = 0x40003000
  418.         ldr r1, = 0xaaaa
  419.         str r1, [r0]        @看门狗
  420.        
  421.        
  422.         bl anjian
  423.         ldr r2, = 0x200004f8
  424.         ldrb r2, [r2]
  425.         cmp r2, # 2
  426.         it eq
  427.         beq zhucaidan
  428.         ldr r0, = 0x20000014
  429.         bl zhuan_shijinzhi
  430.         ldr r0, [r12, # -4]
  431.         mov r1, # 8
  432.         ldr r2, = 0x20000100
  433.         bl zhuan_ascii
  434.        
  435.         ldr r0, = 0x20000018
  436.         bl zhuan_shijinzhi
  437.         ldr r0, [r12, # -4]
  438.         mov r1, # 8
  439.         ldr r2, = 0x20000110
  440.         bl zhuan_ascii
  441.        
  442.         mov r0, # 8
  443.         bl xieshumaguan
  444.         b zhuye

  445. zhuan_shijinzhi:   @ R0=要转换的数的地址
  446.         push {r0-r9,lr}
  447.         mov r12, sp
  448.         sub sp, # 0x04       
  449.         ldrb r8, [r0]
  450.         ldrb r2, [r0, # 1]
  451.         ldrb r3, [r0, # 2]
  452.         ldrb r4, [r0, # 3]
  453.         mov r5, # 100
  454.         mul r9, r2, r5
  455.         movw r5, # 10000
  456.         mul r7, r3, r5
  457.         ldr r5, = 1000000
  458.         mul r6, r4, r5
  459.         add r8, r8, r9
  460.         add r2, r7, r8
  461.         add r1, r2, r6
  462.         str r1, [sp]
  463.         mov sp, r12
  464.         pop {r0-r9,pc}
  465. zhuan_ascii: @ 入口R0=数据 R1= 长度 R2=出口
  466.         push {r0-r7,lr}
  467.         ldr r7, = shumaguanmabiao
  468.         mov r5, # 10
  469. xunhuanqiuma:
  470.         udiv r4, r0, r5
  471.         mul r6, r4, r5
  472.         sub r3, r0, r6
  473.         ldrb r6, [r7, r3]
  474.         strb r6, [r2], # 1
  475.         mov r0, r4
  476.         subs r1, # 1
  477.         bne xunhuanqiuma
  478.         pop {r0-r7,pc}
  479. xie595:    @ 入口0X20000000
  480.        
  481.         @74HC595 11=输入锁存 12=输出锁存 14=数据
  482.         push {r0-r5,lr}
  483.         ldr r0, = 0x422181b0 @ 位带地址  
  484.         mov r1, # 1          @ 1
  485.         mov r2, # 0          @ 0
  486.         ldr r3, = 0x22000000 @ 0x20000000的位带
  487.         mov r4, # 24         @ 写两个8位
  488. xunhuan595:
  489.         str r2, [r0, # 0x08] @ 595_11 输入锁存
  490.         ldr r5, [r3], # 4    @ 取出一位的数据
  491.         str r5, [r0]         @14脚输出数据
  492.         str r1, [r0, # 0x08] @ 锁存
  493.         subs r4, # 1         
  494.         bne xunhuan595       @循环16次
  495.         str r2, [r0, # 0x04] @ 12输出锁存
  496.         str r1, [r0, # 0x04]
  497.         pop {r0-r5,pc}      @ 弹出各寄存器返回
  498. qingchuanjian:
  499.         push {r0-r1,lr}
  500.         ldr r0, = 0x200004f8
  501.         mov r1, # 0
  502.         str r1, [r0]
  503.         ldr r0, = 0x20000500
  504.         str r1, [r0]
  505.         pop {r0-r1,pc}
  506. anjian:
  507.         push {r0-r12,lr}
  508.         ldr r3, = 0x20000500
  509.         ldr r5, = hongwaimabiao
  510.         mov r6, # 29
  511. panduananjian:
  512.         ldr r4, [r5], # 4
  513.         ldr r2, [r3]
  514.         cmp r2, r4
  515.         beq anjianzhengque
  516.         subs r6, # 1
  517.         bne panduananjian
  518.         b anjianfanhui
  519. anjianzhengque:
  520.         ldr r2, = 0x200004f8
  521.         str r6, [r2]
  522.        
  523. anjianfanhui:
  524.         pop {r0-r12,pc}
  525. xieshumaguan: @ r0位数
  526.         push {r0-r12,lr}
  527.         ldr r9, = 0x20000110
  528.         ldr r7, = 0x20000100
  529.         ldr r8, = shuaxinbiao
  530.         ldr r6, = 0x20000000

  531. xianshi:
  532.         ldrb r5, [r8], # 1
  533.         ldrb r2, [r7], # 1
  534.         ldrb r4, [r9], # 1
  535.         strb r2, [r6, # 1]
  536.         strb r4, [r6, # 2]
  537.         strb r5, [r6]
  538.         bl xie595
  539.         subs r0, # 1
  540.         bne xianshi
  541.         pop {r0-r12,pc}
  542.        
  543. _nmi_handler:
  544.         bx lr
  545. _hard_fault:
  546.         bx lr
  547. _memory_fault:
  548.         bx lr
  549. _bus_fault:
  550.         bx lr
  551. _usage_fault:
  552.         bx lr
  553. systickdingshiqi:              @ SYSTICK定时期中断服务函数
  554.         push {r0-r12,lr}
  555.         ldr r0, = 0xe00ed04
  556.         ldr r1, = 0x2000000
  557.         str r1, [r0]         @ 挂起SYSTICK
  558.         ldr r2, = 0x20000010
  559.         ldr r4, = 0x20000014
  560.         ldrb r3, [r4, # 1]
  561.         ldrb r5, [r4, # 2]
  562.         ldrb r6, [r4, # 3]
  563.         ldrb r8, [r4, # 4]
  564.         ldrb r9, [r4, # 5]
  565.         ldrb r10, [r4, # 6]
  566.         ldrb r11, [r4, # 7]
  567.        
  568.         ldrb r7, [r4]
  569.         ldr r1, [r2]
  570.         ldr r0, = 0xe000e010
  571.         ldr r0, [r0]
  572.         cmp r0, # 0
  573.         beq tiaoguojiajia
  574.         add r1, # 1
  575. tiaoguojiajia:
  576.         cmp.w r1, # 1000
  577.         itt cs
  578.         movcs r1, # 0
  579.         addcs r3, # 1
  580.         cmp r3 ,# 60
  581.         itt cs
  582.         movcs r3, # 0
  583.         addcs r5, # 1
  584.         cmp r5, # 60
  585.         itt cs
  586.         movcs r5, # 0
  587.         addcs r6, # 1
  588.         cmp r6, # 24
  589.         ittt cs
  590.         movcs r6, # 0
  591.         addcs r7, # 1
  592.         addcs r8, # 1
  593.         cmp r7, # 8
  594.         it cs
  595.         movcs r7, # 1
  596.         ldr r0, = 0x20000038
  597.         ldr r12, = yuefenbiao
  598.         ldrb r0, [r12, r9]
  599.         cmp r0, # 0x1d
  600.         bne runnianbuchang
  601.         ldr r12, = 0x22000480
  602.         push {r1, r9}
  603.         lsl r9, # 2
  604.         ldr r1, [r12, r10]
  605.         cmp r1, # 1
  606.         it eq
  607.         addeq r0, # 1
  608.         pop {r1, r9}
  609. runnianbuchang:       
  610.         cmp r8, r0
  611.         itt cs
  612.         movcs r8, # 1
  613.         addcs r9, # 1
  614.         cmp r9, # 13
  615.         itt cs
  616.         movcs r9, # 1
  617.         addcs r10, # 1
  618.         cmp r10, # 99
  619.         itt cs
  620.         movcs r10, # 0
  621.         addcs r11, # 1
  622.         cmp r11, # 99
  623.         it cs
  624.         movcs r11, # 0
  625.         strb r7, [r4]
  626.         strb r3, [r4, # 1]
  627.         strb r5, [r4, # 2]
  628.         strb r6, [r4, # 3]
  629.         strb r8, [r4, # 4]
  630.         strb r9, [r4, # 5]
  631.         strb r10, [r4, # 6]
  632.         strb r11, [r4, # 7]
  633.         str r1, [r2]
  634.         pop {r0-r12,pc}

  635. tim2dingshiqi:
  636.         push {r0-r12,lr}
  637.         ldr r2, = 0x200004fc
  638.         ldr r0, = 0x40000034
  639.         ldr r3, [r2]
  640.         ldr r1, [r0]  @ 读取时间
  641.         cmp.w r1, # 0xe000
  642.         bhi tim2fanhui
  643.         cmp.w r1, # 0x1000
  644.         ittt hi
  645.         ldrhi r4, = 0x2200a000
  646.         strhi r4, [r2]
  647.         bhi tim2fanhui
  648.        
  649.         cmp r1, # 0xff
  650.         itttt hi
  651.         ldrbhi r5, [r2, # - 0x0c]
  652.         addhi r5, # 1
  653.         strbhi r5, [r2, # - 0x0c]
  654.         bhi tim2fanhui
  655.         cmp r1, # 0xa0
  656.         itttt hi
  657.         movhi r6, # 1
  658.         strhi r6, [r3], # 4
  659.         strhi r3, [r2]
  660.         bhi tim2fanhui
  661.        
  662.         cmp r1, # 0x60
  663.         ittt hi
  664.         movhi r6, # 0
  665.         strhi r6, [r3], # 4
  666.         strhi r3, [r2]
  667.        
  668. tim2fanhui:
  669.         ldr r0, = 0x40000024
  670.         mov r1,  # 0
  671.         str r1, [r0]
  672.         pop {r0-r12,pc}
  673.        

shizhong3.zip (7.15 KB, 下载次数: 8)


戈卫东 发表于 2016-1-22 23:41 | 显示全部楼层
这么长的汇编哪。。。。。我死了。。。。。。
bli19 发表于 2016-1-23 14:15 | 显示全部楼层
好牛。
 楼主| yjmwxwx 发表于 2016-1-24 18:11 | 显示全部楼层
把图片发出来,没想到写个时钟的程序也不好写

SDC12628.jpg

itelectron 发表于 2016-1-24 21:54 | 显示全部楼层
楼主  文字池  你  是 如何 处理的
 楼主| yjmwxwx 发表于 2016-1-24 22:11 | 显示全部楼层
itelectron 发表于 2016-1-24 21:54
楼主  文字池  你  是 如何 处理的

我没处理文字池,汇编器把他放到了代码段的后面了
Jessicakjdsl 发表于 2016-1-31 16:14 | 显示全部楼层
楼主现在还能写汇编语言,真是厉害啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

123

主题

2968

帖子

54

粉丝
快速回复 在线客服 返回列表 返回顶部