矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 2938|回复: 12

单片机测电感传感器,又改进了一点

[复制链接]
     
发表于 2018-3-5 16:05:58 | 显示全部楼层 |阅读模式
本帖最后由 yjmwxwx 于 2018-3-5 16:11 编辑

听各位老师说要加相敏检波,无奈0基础不知道模拟电路怎么加,这个版本用单片机产生5K正弦波,每个周期100点,测第25和75点时候的ADC,肯定会有相移先不考虑,先软件测量正负峰值,再乘这个点的正弦和余弦(这一部程序里还没算)。

现在程序只实现测量线圈两个线的ADC正值,最大4099,在1602下面一行左面右面两个数据,往左拉左边这个数增加,往右推右面数增加,放大倍数可能有点高,手稍微动下就变化很大,滤波数设的有点大数值变化延迟大,东西大部分都在软件里比较好矫正。

截图_2018-03-05_15-17-32.png

截图_2018-03-05_15-18-20.png

截图_2018-03-05_16-01-32.png

lvdt.png






  1.                 @ stm32f030f4p6 asm
  2.          .thumb
  3.                  .syntax unified
  4. .section .data
  5. zhengxian1k:
  6.         .short 0x30,0x33,0x36,0x38,0x3b,0x3e,0x41,0x44,0x47,0x49,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5e,0x5d,0x5c,0x5b,0x5a,0x59,0x57,0x55,0x53,0x51,0x4f,0x4d,0x4a,0x48,0x45,0x43,0x40,0x3d,0x3a,0x37,0x34,0x31,0x2e,0x2b,0x28,0x25,0x22,0x1f,0x1c,0x1a,0x17,0x15,0x12,0x10,0xe,0xc,0xa,0x8,0x6,0x5,0x4,0x3,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3,0x4,0x6,0x7,0x9,0xb,0xd,0xf,0x11,0x13,0x16,0x18,0x1b,0x1e,0x21,0x24,0x27,0x29,0x2c,0x30
  7. lcdshuju:
  8.         .ascii  "yjmwxwx-20180304"
  9. dianhua:       
  10.         .ascii        "      15552208295"
  11. qq:
  12.         .ascii        "   QQ:3341656346"
  13.         .equ STACKINIT,                        0x20001000
  14.         .equ asciimabiao,                0x20000000
  15.         .equ jishu,                        0x20000010
  16.         .equ caiyang90zhizhen,                0x20000020
  17.         .equ caiyang90,                        0x20000024
  18.         .equ caiyang270zhizhen,                0x20000120
  19.         .equ caiyang270,                0x20000124
  20.         .equ adczhengfu,                0x20000104        @1正0负
  21. .section .text
  22. vectors:
  23.         .word STACKINIT
  24.         .word _start + 1
  25.         .word _nmi_handler + 1
  26.         .word _hard_fault  + 1
  27.         .word 0
  28.         .word 0
  29.         .word 0
  30.         .word 0
  31.         .word 0
  32.         .word 0
  33.         .word 0
  34.         .word _svc_handler +1
  35.         .word 0
  36.         .word 0
  37.         .word _pendsv_handler +1
  38.         .word _systickzhongduan +1               @ 15
  39.         .word aaa +1     @ _wwdg +1          @ 0
  40.         .word aaa +1     @_pvd +1            @ 1
  41.         .word aaa +1     @_rtc +1            @ 2
  42.         .word aaa +1     @_flash +1          @ 3
  43.         .word aaa +1        @ _rcc + 1          @ 4
  44.         .word aaa +1      @_exti0_1  +1      @ 5
  45.         .word aaa +1      @ _exti2_3 +1      @ 6
  46.         .word aaa +1       @_exti4_15 +1     @ 7
  47.         .word aaa +1                         @ 8
  48.         .word aaa +1         @_dma1_1  +1    @ 9
  49.         .word aaa +1    @_dma1_2_3 +1        @ 10
  50.         .word aaa +1       @_dma1_4_5 +1     @ 11
  51.         .word aaa +1         @_adc1 +1          @ 12
  52.         .word aaa +1       @_tim1_brk_up +1  @ 13
  53.         .word aaa +1        @ _tim1_cc +1    @ 14
  54.         .word aaa +1         @_tim2 +1       @ 15
  55.         .word aaa +1          @_tim3 +1      @ 16
  56.         .word aaa +1                         @ 17
  57.         .word aaa +1                                @ 18
  58.         .word aaa +1        @_tim14 +1    @ 19
  59.         .word aaa +1                         @ 20
  60.         .word aaa +1         @_tim16 +1      @ 21
  61.         .word aaa +1         @_tim17 +1      @ 22
  62.         .word aaa +1          @_i2c   +1     @ 23
  63.         .word aaa +1                         @ 24
  64.         .word aaa +1           @_spi   +1    @ 25
  65.         .word aaa +1                         @ 26
  66.         .word aaa +1         @_usart1 +1     @ 27
  67.         .align 2

  68. _start:
  69. shizhong:
  70.         ldr r0, = 0x40021000 @ rcc
  71.         ldr r2, = 0x40022000   @FLASH访问控制
  72.         movs r1, # 0x32
  73.         str r1, [r2]           @FLASH缓冲 缓冲开启
  74.         ldr r0, = 0x40021000 @ rcc
  75.         ldr r1, = 0x100002
  76.         str r1, [r0, # 0x04]
  77.         ldr r1, = 0x1000001
  78.         str r1, [r0]
  79. dengrc:
  80.         ldr r1, [r0]
  81.         lsls r1, # 30
  82.         bpl dengrc
  83. dengpll:
  84.         ldr r1, [r0]
  85.         lsls r1, # 6
  86.         bpl dengpll
  87.         @0x34时钟控制寄存器 2 (RCC_CR2)
  88.         movs r1, # 0x01
  89.         str r1, [r0, # 0x34]  @ HSI开14M时钟
  90. dengdai14mshizhongwending:
  91.         ldr r1, [r0, # 0x34]
  92.         lsls r1, r1, # 30     @ 左移30位
  93.         bpl dengdai14mshizhongwending  @ 等待14M时钟稳定

  94. neicunqingling:
  95.         ldr r0, = 0x20000000
  96.         movs r1, # 0
  97.         ldr r3, = 0x1000
  98. neicunqinglingxunhuan:
  99.         subs r3, # 4
  100.         str r1, [r0, r3]
  101.         bne neicunqinglingxunhuan

  102. _waisheshizhong:                         @ 外设时钟
  103.         @+0x14=RCC_AHBENR
  104.         @0=DMA @2=SRAM @4=FLITF@6=CRC @17=PA @18=PB @19=PC @20=PD @22=PF
  105.         ldr r0, = 0x40021000
  106.         ldr r1, = 0x460005
  107.         str r1, [r0, # 0x14]

  108.         @+0x18外设时钟使能寄存器 (RCC_APB2ENR)
  109.         @0=SYSCFG @5=USART6EN @9=ADC @11=TIM1 @12=SPI1 @14=USART1 @16=TIM15 @17=TIM16 @18=TIM17 @22=DBGMCU
  110.         ldr r1, = 0xa00
  111.         str r1, [r0, # 0x18]
  112.         @+0X1C=RCC_APB1ENR
  113.         @1=TIM3 @4=TIM6 @5=TIM7 @8=TIM14 @11=WWDG @14=SPI @17=USRT2 @18=USART3 @20=USART5 @21=I2C1
  114.         @22=I2C2 @23=USB @28=PWR


  115. tim1chushiha:
  116.         ldr r0, = 0x40012c00 @ tim1_cr1
  117.         movs r1, # 0
  118.         str r1, [r0, # 0x28] @ psc
  119.         ldr r1, = 96
  120.         str r1, [r0, # 0x2c] @ ARR
  121.         ldr r1, = 0x68
  122.         str r1, [r0, # 0x1c] @ ccmr2  CC3
  123.         ldr r1, = 0x100    @  CC3
  124.         str r1, [r0, # 0x20] @ ccer
  125.         ldr r1, = 0x8000
  126.         str r1, [r0, # 0x44] @ BDTR
  127.         ldr r1, = 0x800 @ CC3 DMA
  128.         str r1, [r0, # 0x0c] @ DIER
  129.         ldr r1, = 0xe1
  130.         str r1, [r0]

  131.        
  132. _adcchushihua:
  133.         ldr r0, = 0x40012400  @ adc基地址
  134.         ldr r1, = 0x80000000
  135.         str r1, [r0, # 0x08]  @ ADC 控制寄存器 (ADC_CR)  @adc校准
  136. _dengadcjiaozhun:
  137.         ldr r1, [r0, # 0x08]
  138.          movs r1, r1
  139.         bmi _dengadcjiaozhun   @ 等ADC校准
  140. _kaiadc:
  141.         ldr r1, [r0, # 0x08]
  142.         movs r2, # 0x01
  143.         orrs r1, r1, r2
  144.         str r1, [r0, # 0x08]
  145. _dengdaiadcwending:
  146.         ldr r1, [r0]
  147.         lsls r1, r1, # 31
  148.         bpl _dengdaiadcwending @ 等ADC稳定
  149. _tongdaoxuanze:
  150.         ldr r1, = 0x01
  151.         str r1, [r0, # 0x28]    @ 通道选择寄存器 (ADC_CHSELR)
  152.         ldr r1, = 0x2000        @ 13 连续转换
  153.         str r1, [r0, # 0x0c]    @ 配置寄存器 1 (ADC_CFGR1)
  154.         movs r1, # 0x07         @
  155.         str r1, [r0, # 0x14]    @ ADC 采样时间寄存器 (ADC_SMPR)
  156.         ldr r1, [r0, # 0x08]
  157.         movs r2, # 0x04         @ 开始转换
  158.         orrs r1, r1, r2
  159.         str r1, [r0, # 0x08]    @ 控制寄存器 (ADC_CR)

  160. dmachushihua:
  161.         @+0=LSR,+4=IFCR,
  162.         @+8=CCR1,+c=CNDTR1,+10=CPAR1+14=CMAR1,
  163.         @+1c=CCR2,+20=CNDTR2,+24=CPAR2,+28=CMAR2
  164.         @+30=CCR3,+34=CNDTR3,+38=CPAR2,+3c=CMAR3
  165.         @+44=CCR4,+48=CNDTR4,+4c=CPAR4,+50=CMAR4
  166.         @+58=CCR5,+5c=CNDTR5,+60=CPAR5,+64=CMAR5
  167.         @+6C=CCR6,+70=CNDTR6,+74=CPAR6,+78=CMAR6
  168.         @+80=CCR7,+84=CNDTR7,+88=CPAR7,+8c=CMAR7


  169.         @tim1ch3DMA
  170.         ldr r0, = 0x40020000
  171.         ldr r1, = 0x40012c3c @ 外设地址
  172.         str r1, [r0, # 0x60]
  173.         ldr r1, = zhengxian1k @ 储存器地址
  174.         str r1, [r0, # 0x64]
  175.         ldr r1, = 100             @点数
  176.         str r1, [r0, # 0x5c]
  177.         ldr r1, = 0x25b1         @ 储存到外设
  178.         str r1, [r0, # 0x58]
  179.        
  180. _waishezhongduan:                                @外设中断
  181.         @0xE000E100    0-31  写1开,写0没效
  182.         @0XE000E180    0-31 写1关,写0没效
  183.         @0XE000E200    0-31 挂起,写0没效
  184.         @0XE000E280    0-31 清除, 写0没效

  185.        
  186.        
  187. _systick:                                @ systick定时器初始化

  188.         ldr r0, = 0xe000e010
  189.         ldr r1, = 0xffffff
  190.         str r1, [r0, # 4]
  191.         str r1, [r0, # 8]
  192.         movs r1, # 0x07
  193.         str r1, [r0]

  194.        
  195. io_she_zhi:
  196.         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  197.         @a(0x48000000)b(0x48000400)c(0x48000800)d(0x48000c00)f(0x48001400)
  198.         @ 输入(00),通用输出(01),复用功能(10),模拟(11)
  199.         @偏移0x4 = 端口输出类型 @ (0 推挽),( 1 开漏)
  200.         @偏移0x8 = 输出速度  00低速, 01中速, 11高速
  201.         @偏移0xC = 上拉下拉 (00无上下拉,  01 上拉, 10下拉)
  202.         @偏移0x10 = 输入数据寄存器
  203.         @偏移0x14 = 输出数据寄存器
  204.         @偏移0x18 = 端口开  0-15置位
  205.         @偏移0x28 = 端口关
  206.         @0X20 = 复用低
  207.         @GPIO口0(0-3位)每个IO口占用4位
  208.         @ AF0 = 0X0000, AF1 = 0X0001, AF2 = 0X0010 AF3 = 0X0011, AF4 = 0X0100
  209.         @ AF5 = 0X0101, AF6 = 0X0111, AF7 = 0X1000
  210.         @0x24 = 复用高
  211.         @GPIO口8 (0-3位)每个IO口占用4位
  212.         @ AF0 = 0X0000, AF1 = 0X0001, AF2 = 0X0010 AF3 = 0X0011, AF4 = 0X0100
  213.         @ AF5 = 0X0101, AF6 = 0X0111, AF7 = 0X1000
  214.         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  215.         ldr r0, = 0x48000000
  216.         ldr r1, = 0x28205553
  217.         str r1, [r0]

  218.         ldr r1, = 0x200
  219.         str r1, [r0, # 0x24]

  220. _lcdchushihua:
  221.         movs r0, # 0x33
  222.         movs r1, # 0
  223.         bl _xielcd
  224.         bl _lcdyanshi
  225.         movs r0, # 0x32
  226.         movs r1, # 0
  227.         bl _xielcd
  228.         bl _lcdyanshi
  229.         movs r0, # 0x28
  230.         movs r1, # 0
  231.         bl _xielcd
  232.         bl _lcdyanshi
  233.         movs r0, # 0x0c
  234.         movs r1, # 0
  235.         bl _xielcd
  236.         bl _lcdyanshi
  237.         movs r0, # 0x01
  238.         movs r1, # 0
  239.         bl _xielcd
  240.         bl _lcdyanshi

  241. tingting:
  242.         ldr r0, = jishu
  243.         ldr r1, [r0]
  244.         cmp r1, # 2
  245.         beq _lcddi1
  246.         cmp r1, # 4
  247.         beq _lcddi2
  248.         cmp r1, # 6
  249.         beq _lcddi3
  250.         b _tiaoguolcdxunhuan
  251. _lcddi1:
  252.         movs r0, # 0x80
  253.         ldr r1, = lcdshuju
  254.         movs r2, # 16
  255.         movs r3, # 0xff
  256.         bl _lcdxianshi
  257.         ldr r0, = 0x40020000
  258.         ldr r1, = 0
  259.         str r1, [r0, # 0x08]
  260.         b _tiaoguolcdxunhuan
  261. _lcddi2:
  262.         movs r0, # 0x80
  263.         ldr r1, = dianhua
  264.         movs r2, # 16
  265.         movs r3, # 0xff
  266.         bl _lcdxianshi
  267.         b _tiaoguolcdxunhuan
  268. _lcddi3:
  269.        
  270.         movs r0, # 0x80
  271.         ldr r1, = qq
  272.         movs r2, # 16
  273.         movs r3, # 0xff
  274.         bl _lcdxianshi
  275.         ldr r0, = jishu
  276.         movs r1, # 0
  277.         str r1, [r0]
  278.        
  279. _tiaoguolcdxunhuan:
  280.         bl _jianbo
  281.         ldr r0, = caiyang90
  282.         movs r1, # 32
  283.         ldr r2, = caiyang90zhizhen
  284.         bl _lvboqi
  285.        
  286.         movs r1, # 6
  287.         ldr r2, = asciimabiao
  288.         movs r3, # 0xff
  289.         bl _zhuanascii

  290.         movs r0, # 0xc0
  291.         ldr r1, = asciimabiao
  292.         movs r2, # 6
  293.         bl _lcdxianshi

  294.        
  295.         ldr r0, = caiyang270
  296.         movs r1, # 32
  297.         ldr r2, = caiyang270zhizhen
  298.         bl _lvboqi
  299.         movs r1, # 6
  300.         ldr r2, = asciimabiao
  301.         movs r3, # 0xff
  302.         bl _zhuanascii

  303.         movs r0, # 0xca
  304.         ldr r1, = asciimabiao
  305.         movs r2, # 6
  306.         bl _lcdxianshi
  307.        
  308.         b tingting

  309.        
  310. _jisuanfuzhi:                        @计算幅值
  311.                                 @R0=ADC90度采样
  312.         push {r1-r3,lr}
  313.         ldr r1, = 0x04                @实 Q15
  314.         ldr r2, = 0xffff8004    @虚 Q15
  315.         mov r3, r0
  316.         muls r0, r0, r3                @实
  317.         asrs r0, r0, # 0
  318.         muls r3, r3, r4                @虚
  319.         asrs r3, r3, # 0
  320. _shibushibushi0:                @检测实部是不是负数
  321.         movs r0, r0
  322.         bpl _fzbushifushu1
  323.         mvns r0, r0                @是负数转成正数
  324.         adds r0, r0, # 1
  325. _fzbushifushu1:                        @检测虚部是不是负数
  326.         movs  r3, r3
  327.         bpl _fzbushifushu
  328.         mvns r3, r3                @是负数转成正数
  329.         adds r3, r3, # 1
  330. _fzbushifushu:
  331.         adds r0, r3, r5                @相加得到副值
  332.         pop {r1-r3,pc}
  333.        
  334. _jianbo:                                @检波
  335.         push {r0-r4,lr}
  336.         ldr r0, = 0x4002005c
  337.         ldr r1, = 0x40012440
  338.         cpsid i
  339. _jianbo90du:
  340.         ldr r4, [r0]
  341.         cmp r4, # 25
  342.         bne _jianbo90du
  343.         ldr r5, [r1]                        @取出90度
  344. _jianbo270du:
  345.         ldr r4, [r0]
  346.         cmp r4, # 75
  347.         bne _jianbo270du
  348.         ldr r6, [r1]
  349.         cpsie i
  350.        
  351.         ldr r4, = 32
  352.         ldr r1, = caiyang90zhizhen
  353.         ldr r2, = caiyang90
  354.         ldr r0, = caiyang270zhizhen
  355.         ldr r7, = caiyang270
  356.         ldr r3, [r1]
  357.         lsls r4, r4, # 2
  358.         adds r3, r3, # 4
  359.         cmp r3, r4
  360.         bne _baocuncaiyang
  361.         movs r3, # 0
  362. _baocuncaiyang:       
  363.         str r5, [r2, r3]        @90度
  364.         str r6, [r7, r3]        @270度
  365.         str r3, [r1]
  366.         str r3, [r0]
  367.         pop {r0-r4,pc}

  368. _lvboqi:                                @滤波器
  369.                         @入R0=地址,R1=长度,r2=表指针地址
  370.                         @出R0=结果
  371.         push {r3-r7,lr}
  372.         lsls r6, r1, # 2
  373.         ldr r5, [r2]
  374.         mov r7, r6
  375. _lvboqixunhuan:
  376.         cmp r5, r6
  377.         bne _lvbozonghe
  378.         movs r5, # 0
  379. _lvbozonghe:
  380.         ldr r4, [r0, r5]
  381.         adds r5, r5, # 4
  382.         adds r7, r7, r4
  383.         subs r1, r1, # 1
  384.         bne _lvboqixunhuan
  385.         asrs r0, r7, # 5
  386.         pop {r3-r7,pc}
  387.        

  388. _lcdxianshi:                          @r0=LCD位置,r1=数据地址,r2=长度
  389.         push {r0-r4,lr}
  390.         mov r4, r1

  391.         movs r1, # 0
  392.         bl _xielcd

  393.         movs r1, # 1
  394.         movs r3, # 0
  395. _lcdxianshixunhuan:
  396.         ldrb r0, [r4,r3]
  397.         bl _xielcd
  398.         adds r3, r3, # 1
  399.         cmp r3, r2
  400.         bne _lcdxianshixunhuan
  401.         pop {r0-r4,pc}

  402. _lcdyanshi:
  403.         push {r5,lr}
  404.         ldr r5, = 0x2000
  405. _lcdyanshixunhuan:
  406.         subs r5, r5, # 1
  407.         bne _lcdyanshixunhuan
  408.         pop {r5,pc}

  409. _xielcd:                        @入R0=8位,r1=0命令,r1=1数据
  410.         push {r0-r7,lr}
  411.         lsrs r6, r0, # 4
  412.         lsls r0, r0, # 28
  413.         lsrs r0, r0, # 28
  414.         movs r2, # 0x80                @ RS
  415.         movs r3, # 0x40                @ E
  416.         movs r5, # 0x3c
  417.         ldr r4, = 0x48000000
  418.         cmp r1, # 0
  419.         beq _lcdmingling
  420.         str r2, [r4, # 0x18]        @RS=1
  421.         b _lcdshuju
  422. _lcdmingling:
  423.         str r2, [r4, # 0x28]        @RS=0
  424. _lcdshuju:
  425.         str r3, [r4, # 0x18]        @E=1
  426.         str r5, [r4, # 0x28]

  427.         lsls r7, r6, # 31
  428.         lsrs r7, r7, # 26
  429.         str r7, [r4, # 0x18]

  430.         lsrs r7, r6, # 1
  431.         lsls r7, r7, # 31
  432.         lsrs r7, r7, # 27
  433.         str r7, [r4, # 0x18]

  434.         lsrs r7, r6, # 2
  435.         lsls r7, r7, # 31
  436.         lsrs r7, r7, # 28
  437.         str r7, [r4, # 0x18]

  438.         lsrs r7, r6, # 3
  439.         lsls r7, r7, # 31
  440.         lsrs r7, r7, # 29
  441.         str r7, [r4, # 0x18]

  442.         bl _lcdyanshi
  443.         str r3, [r4, # 0x28]        @E=0


  444.         str r3, [r4, # 0x18]    @E=1
  445.         str r5, [r4, # 0x28]

  446.         lsls r7, r0, # 31
  447.         lsrs r7, r7, # 26
  448.         str r7, [r4, # 0x18]

  449.         lsrs r7, r0, # 1
  450.         lsls r7, r7, # 31
  451.         lsrs r7, r7, # 27
  452.         str r7, [r4, # 0x18]

  453.         lsrs r7, r0, # 2
  454.         lsls r7, r7, # 31
  455.         lsrs r7, r7, # 28
  456.         str r7, [r4, # 0x18]

  457.         lsrs r7, r0, # 3
  458.         lsls r7, r7, # 31
  459.         lsrs r7, r7, # 29
  460.         str r7, [r4, # 0x18]

  461.         bl _lcdyanshi
  462.         str r3, [r4, # 0x28]    @E=0

  463.         pop {r0-r7,pc}
  464.         .ltorg


  465. _zhuanascii:                                        @ 16进制转数码管码
  466.                 @ R0要转的数据, R1长度,R2结果表首地址, r3=小数点位置
  467.         push {r0-r7,lr}
  468.         mov r7, r3
  469.         mov r5, r0
  470.         mov r6, r1
  471.         movs r1, # 10
  472. _xunhuanqiuma:
  473.         bl _chufa
  474.         mov r4, r0
  475.         muls r4, r1
  476.         subs r3, r5, r4
  477.         adds r3, r3, # 0x30
  478.         mov r5, r0
  479.         subs r6, r6, # 1
  480.         beq _qiumafanhui
  481.         cmp r6, r7
  482.         bne _meidaoxiaoshudian
  483.         movs r4, # 0x2e                @小数点
  484.         strb r4, [r2,r6]        @插入小数点
  485.         subs r6, r6, # 1
  486. _meidaoxiaoshudian:
  487.         strb r3, [r2,r6]
  488.         movs r6, r6
  489.         bne _xunhuanqiuma
  490.         pop {r0-r7,pc}
  491. _qiumafanhui:
  492.         strb r3, [r2, r6]
  493.         pop {r0-r7,pc}

  494.        
  495. _chufa:                                @软件除法
  496.         @ r0 除以 r1 等于 商(r0)余数R1
  497.         push {r1-r4,lr}
  498.         cmp r0, # 0
  499.         beq _chufafanhui
  500.         cmp r1, # 0
  501.         beq _chufafanhui
  502.         mov r2, r0
  503.         movs r3, # 1
  504.         lsls r3, r3, # 31
  505.         movs r0, # 0
  506.         mov r4, r0
  507. _chufaxunhuan:
  508.         lsls r2, r2, # 1
  509.         adcs r4, r4, r4
  510.         cmp r4, r1
  511.         bcc _chufaweishubudao0
  512.         adds r0, r0, r3
  513.         subs r4, r4, r1
  514. _chufaweishubudao0:
  515.         lsrs r3, r3, # 1
  516.         bne _chufaxunhuan
  517. _chufafanhui:
  518.         pop {r1-r4,pc}
  519.         .ltorg


  520. _nmi_handler:
  521.         bx lr
  522. _hard_fault:
  523.         bx lr
  524. _svc_handler:
  525.         bx lr
  526. _pendsv_handler:
  527.         bx lr
  528. _systickzhongduan:
  529.         ldr r2, = jishu
  530.         ldr r0, = 0xe0000d04
  531.         ldr r3, [r2]
  532.         ldr r1, = 0x02000000
  533.         adds r3, r3, # 1
  534.         str r3, [r2]
  535.         str r1, [r0]                 @ 清除SYSTICK中断
  536. aaa:
  537.         bx lr
复制代码


程序:
lvdt11.tar.gz (68.85 KB, 下载次数: 61)
     
发表于 2018-3-5 16:29:08 | 显示全部楼层
又见汇编高手啦
回复 支持 反对

使用道具 举报

     
发表于 2018-3-5 17:05:13 | 显示全部楼层
大写的卧槽,这电路真是叹为观止
回复 支持 反对

使用道具 举报

     
发表于 2018-3-5 17:05:34 | 显示全部楼层
汇编用得好的都是高手,搭棚也搭得强大
回复 支持 反对

使用道具 举报

     
发表于 2018-3-5 19:54:08 | 显示全部楼层
不由得不从心里服气。
回复 支持 反对

使用道具 举报

     
发表于 2018-3-5 20:22:56 | 显示全部楼层
传感器制造的最大的难点就是解决漂移和非线性,相敏整流能够改善输出的非线性,电路中尽可能不要使用直流放大器,而采用交流放大。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-3-6 02:24:04 | 显示全部楼层
谢谢各位老师鼓励,我模电、数电、数学、物理都不懂,只会编点入门的小程序。
要是有最丑电路奖我肯定能得奖。
今天又改进了下程序,ADC采样到90和270度数据后分别计算出幅值,再判断相位和平均滤波器平滑,1602下面的左边是幅值右面是相位。这程序很简单,和显示数码管的程序差不多,就是要准估计不好弄。

  1.                 @ stm32f030f4p6 asm
  2.          .thumb
  3.                  .syntax unified
  4. .section .data
  5. zhengxian1k:
  6.         .short 0x30,0x33,0x36,0x38,0x3b,0x3e,0x41,0x44,0x47,0x49,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x59,0x5b,0x5c,0x5d,0x5e,0x5e,0x5f,0x5f,0x5f,0x5f,0x5f,0x5e,0x5d,0x5c,0x5b,0x5a,0x59,0x57,0x55,0x53,0x51,0x4f,0x4d,0x4a,0x48,0x45,0x43,0x40,0x3d,0x3a,0x37,0x34,0x31,0x2e,0x2b,0x28,0x25,0x22,0x1f,0x1c,0x1a,0x17,0x15,0x12,0x10,0xe,0xc,0xa,0x8,0x6,0x5,0x4,0x3,0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x2,0x3,0x4,0x6,0x7,0x9,0xb,0xd,0xf,0x11,0x13,0x16,0x18,0x1b,0x1e,0x21,0x24,0x27,0x29,0x2c,0x30
  7. lcdshuju:
  8.         .ascii  "yjmwxwx-20180306"
  9. dianhua:       
  10.         .ascii        "      15552208295"
  11. qq:
  12.         .ascii        "   QQ:3341656346"
  13.         .equ STACKINIT,                        0x20001000
  14.         .equ asciimabiao,                0x20000000
  15.         .equ jishu,                        0x20000010
  16.         .equ lvbozhizhen,                0x20000020
  17.         .equ lvbohuanchong,                0x20000024
  18.         .section .text
  19. vectors:
  20.         .word STACKINIT
  21.         .word _start + 1
  22.         .word _nmi_handler + 1
  23.         .word _hard_fault  + 1
  24.         .word 0
  25.         .word 0
  26.         .word 0
  27.         .word 0
  28.         .word 0
  29.         .word 0
  30.         .word 0
  31.         .word _svc_handler +1
  32.         .word 0
  33.         .word 0
  34.         .word _pendsv_handler +1
  35.         .word _systickzhongduan +1               @ 15
  36.         .word aaa +1     @ _wwdg +1          @ 0
  37.         .word aaa +1     @_pvd +1            @ 1
  38.         .word aaa +1     @_rtc +1            @ 2
  39.         .word aaa +1     @_flash +1          @ 3
  40.         .word aaa +1        @ _rcc + 1          @ 4
  41.         .word aaa +1      @_exti0_1  +1      @ 5
  42.         .word aaa +1      @ _exti2_3 +1      @ 6
  43.         .word aaa +1       @_exti4_15 +1     @ 7
  44.         .word aaa +1                         @ 8
  45.         .word aaa +1         @_dma1_1  +1    @ 9
  46.         .word aaa +1    @_dma1_2_3 +1        @ 10
  47.         .word aaa +1       @_dma1_4_5 +1     @ 11
  48.         .word aaa +1         @_adc1 +1          @ 12
  49.         .word aaa +1       @_tim1_brk_up +1  @ 13
  50.         .word aaa +1        @ _tim1_cc +1    @ 14
  51.         .word aaa +1         @_tim2 +1       @ 15
  52.         .word aaa +1          @_tim3 +1      @ 16
  53.         .word aaa +1                         @ 17
  54.         .word aaa +1                                @ 18
  55.         .word aaa +1        @_tim14 +1    @ 19
  56.         .word aaa +1                         @ 20
  57.         .word aaa +1         @_tim16 +1      @ 21
  58.         .word aaa +1         @_tim17 +1      @ 22
  59.         .word aaa +1          @_i2c   +1     @ 23
  60.         .word aaa +1                         @ 24
  61.         .word aaa +1           @_spi   +1    @ 25
  62.         .word aaa +1                         @ 26
  63.         .word aaa +1         @_usart1 +1     @ 27
  64.         .align 2

  65. _start:
  66. shizhong:
  67.         ldr r0, = 0x40021000 @ rcc
  68.         ldr r2, = 0x40022000   @FLASH访问控制
  69.         movs r1, # 0x32
  70.         str r1, [r2]           @FLASH缓冲 缓冲开启
  71.         ldr r0, = 0x40021000 @ rcc
  72.         ldr r1, = 0x100002
  73.         str r1, [r0, # 0x04]
  74.         ldr r1, = 0x1000001
  75.         str r1, [r0]
  76. dengrc:
  77.         ldr r1, [r0]
  78.         lsls r1, # 30
  79.         bpl dengrc
  80. dengpll:
  81.         ldr r1, [r0]
  82.         lsls r1, # 6
  83.         bpl dengpll
  84.         @0x34时钟控制寄存器 2 (RCC_CR2)
  85.         movs r1, # 0x01
  86.         str r1, [r0, # 0x34]  @ HSI开14M时钟
  87. dengdai14mshizhongwending:
  88.         ldr r1, [r0, # 0x34]
  89.         lsls r1, r1, # 30     @ 左移30位
  90.         bpl dengdai14mshizhongwending  @ 等待14M时钟稳定

  91. neicunqingling:
  92.         ldr r0, = 0x20000000
  93.         movs r1, # 0
  94.         ldr r3, = 0x1000
  95. neicunqinglingxunhuan:
  96.         subs r3, # 4
  97.         str r1, [r0, r3]
  98.         bne neicunqinglingxunhuan

  99. _waisheshizhong:                         @ 外设时钟
  100.         @+0x14=RCC_AHBENR
  101.         @0=DMA @2=SRAM @4=FLITF@6=CRC @17=PA @18=PB @19=PC @20=PD @22=PF
  102.         ldr r0, = 0x40021000
  103.         ldr r1, = 0x460005
  104.         str r1, [r0, # 0x14]

  105.         @+0x18外设时钟使能寄存器 (RCC_APB2ENR)
  106.         @0=SYSCFG @5=USART6EN @9=ADC @11=TIM1 @12=SPI1 @14=USART1 @16=TIM15 @17=TIM16 @18=TIM17 @22=DBGMCU
  107.         ldr r1, = 0xa00
  108.         str r1, [r0, # 0x18]
  109.         @+0X1C=RCC_APB1ENR
  110.         @1=TIM3 @4=TIM6 @5=TIM7 @8=TIM14 @11=WWDG @14=SPI @17=USRT2 @18=USART3 @20=USART5 @21=I2C1
  111.         @22=I2C2 @23=USB @28=PWR


  112. tim1chushiha:
  113.         ldr r0, = 0x40012c00 @ tim1_cr1
  114.         movs r1, # 0
  115.         str r1, [r0, # 0x28] @ psc
  116.         ldr r1, = 96
  117.         str r1, [r0, # 0x2c] @ ARR
  118.         ldr r1, = 0x68
  119.         str r1, [r0, # 0x1c] @ ccmr2  CC3
  120.         ldr r1, = 0x100    @  CC3
  121.         str r1, [r0, # 0x20] @ ccer
  122.         ldr r1, = 0x8000
  123.         str r1, [r0, # 0x44] @ BDTR
  124.         ldr r1, = 0x800 @ CC3 DMA
  125.         str r1, [r0, # 0x0c] @ DIER
  126.         ldr r1, = 0xe1
  127.         str r1, [r0]

  128.        
  129. _adcchushihua:
  130.         ldr r0, = 0x40012400  @ adc基地址
  131.         ldr r1, = 0x80000000
  132.         str r1, [r0, # 0x08]  @ ADC 控制寄存器 (ADC_CR)  @adc校准
  133. _dengadcjiaozhun:
  134.         ldr r1, [r0, # 0x08]
  135.          movs r1, r1
  136.         bmi _dengadcjiaozhun   @ 等ADC校准
  137. _kaiadc:
  138.         ldr r1, [r0, # 0x08]
  139.         movs r2, # 0x01
  140.         orrs r1, r1, r2
  141.         str r1, [r0, # 0x08]
  142. _dengdaiadcwending:
  143.         ldr r1, [r0]
  144.         lsls r1, r1, # 31
  145.         bpl _dengdaiadcwending @ 等ADC稳定
  146. _tongdaoxuanze:
  147.         ldr r1, = 0x01
  148.         str r1, [r0, # 0x28]    @ 通道选择寄存器 (ADC_CHSELR)
  149.         ldr r1, = 0x2000        @ 13 连续转换
  150.         str r1, [r0, # 0x0c]    @ 配置寄存器 1 (ADC_CFGR1)
  151.         movs r1, # 0x07         @
  152.         str r1, [r0, # 0x14]    @ ADC 采样时间寄存器 (ADC_SMPR)
  153.         ldr r1, [r0, # 0x08]
  154.         movs r2, # 0x04         @ 开始转换
  155.         orrs r1, r1, r2
  156.         str r1, [r0, # 0x08]    @ 控制寄存器 (ADC_CR)

  157. dmachushihua:
  158.         @+0=LSR,+4=IFCR,
  159.         @+8=CCR1,+c=CNDTR1,+10=CPAR1+14=CMAR1,
  160.         @+1c=CCR2,+20=CNDTR2,+24=CPAR2,+28=CMAR2
  161.         @+30=CCR3,+34=CNDTR3,+38=CPAR2,+3c=CMAR3
  162.         @+44=CCR4,+48=CNDTR4,+4c=CPAR4,+50=CMAR4
  163.         @+58=CCR5,+5c=CNDTR5,+60=CPAR5,+64=CMAR5
  164.         @+6C=CCR6,+70=CNDTR6,+74=CPAR6,+78=CMAR6
  165.         @+80=CCR7,+84=CNDTR7,+88=CPAR7,+8c=CMAR7


  166.         @tim1ch3DMA
  167.         ldr r0, = 0x40020000
  168.         ldr r1, = 0x40012c3c @ 外设地址
  169.         str r1, [r0, # 0x60]
  170.         ldr r1, = zhengxian1k @ 储存器地址
  171.         str r1, [r0, # 0x64]
  172.         ldr r1, = 100             @点数
  173.         str r1, [r0, # 0x5c]
  174.         ldr r1, = 0x25b1         @ 储存到外设
  175.         str r1, [r0, # 0x58]
  176.        
  177. _waishezhongduan:                                @外设中断
  178.         @0xE000E100    0-31  写1开,写0没效
  179.         @0XE000E180    0-31 写1关,写0没效
  180.         @0XE000E200    0-31 挂起,写0没效
  181.         @0XE000E280    0-31 清除, 写0没效

  182.        
  183.        
  184. _systick:                                @ systick定时器初始化

  185.         ldr r0, = 0xe000e010
  186.         ldr r1, = 0xffffff
  187.         str r1, [r0, # 4]
  188.         str r1, [r0, # 8]
  189.         movs r1, # 0x07
  190.         str r1, [r0]

  191.        
  192. io_she_zhi:
  193.         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  194.         @a(0x48000000)b(0x48000400)c(0x48000800)d(0x48000c00)f(0x48001400)
  195.         @ 输入(00),通用输出(01),复用功能(10),模拟(11)
  196.         @偏移0x4 = 端口输出类型 @ (0 推挽),( 1 开漏)
  197.         @偏移0x8 = 输出速度  00低速, 01中速, 11高速
  198.         @偏移0xC = 上拉下拉 (00无上下拉,  01 上拉, 10下拉)
  199.         @偏移0x10 = 输入数据寄存器
  200.         @偏移0x14 = 输出数据寄存器
  201.         @偏移0x18 = 端口开  0-15置位
  202.         @偏移0x28 = 端口关
  203.         @0X20 = 复用低
  204.         @GPIO口0(0-3位)每个IO口占用4位
  205.         @ AF0 = 0X0000, AF1 = 0X0001, AF2 = 0X0010 AF3 = 0X0011, AF4 = 0X0100
  206.         @ AF5 = 0X0101, AF6 = 0X0111, AF7 = 0X1000
  207.         @0x24 = 复用高
  208.         @GPIO口8 (0-3位)每个IO口占用4位
  209.         @ AF0 = 0X0000, AF1 = 0X0001, AF2 = 0X0010 AF3 = 0X0011, AF4 = 0X0100
  210.         @ AF5 = 0X0101, AF6 = 0X0111, AF7 = 0X1000
  211.         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

  212.         ldr r0, = 0x48000000
  213.         ldr r1, = 0x28205553
  214.         str r1, [r0]

  215.         ldr r1, = 0x200
  216.         str r1, [r0, # 0x24]

  217. _lcdchushihua:
  218.         movs r0, # 0x33
  219.         movs r1, # 0
  220.         bl _xielcd
  221.         bl _lcdyanshi
  222.         movs r0, # 0x32
  223.         movs r1, # 0
  224.         bl _xielcd
  225.         bl _lcdyanshi
  226.         movs r0, # 0x28
  227.         movs r1, # 0
  228.         bl _xielcd
  229.         bl _lcdyanshi
  230.         movs r0, # 0x0c
  231.         movs r1, # 0
  232.         bl _xielcd
  233.         bl _lcdyanshi
  234.         movs r0, # 0x01
  235.         movs r1, # 0
  236.         bl _xielcd
  237.         bl _lcdyanshi

  238.         movs r6, # 64
  239. _denglvboqihuanchongman:                @等滤波器缓冲区满
  240.         bl _lvdtfuzhi
  241.         subs r6, r6, # 1
  242.         bne _denglvboqihuanchongman
  243.        

  244. tingting:
  245.         ldr r0, = jishu
  246.         ldr r1, [r0]
  247.         cmp r1, # 2
  248.         beq _lcddi1
  249.         cmp r1, # 4
  250.         beq _lcddi2
  251.         cmp r1, # 6
  252.         beq _lcddi3
  253.         b _tiaoguolcdxunhuan
  254. _lcddi1:
  255.         movs r0, # 0x80
  256.         ldr r1, = lcdshuju
  257.         movs r2, # 16
  258.         movs r3, # 0xff
  259.         bl _lcdxianshi
  260.         ldr r0, = 0x40020000
  261.         ldr r1, = 0
  262.         str r1, [r0, # 0x08]
  263.         b _tiaoguolcdxunhuan
  264. _lcddi2:
  265.         movs r0, # 0x80
  266.         ldr r1, = dianhua
  267.         movs r2, # 16
  268.         movs r3, # 0xff
  269.         bl _lcdxianshi
  270.         b _tiaoguolcdxunhuan
  271. _lcddi3:
  272.        
  273.         movs r0, # 0x80
  274.         ldr r1, = qq
  275.         movs r2, # 16
  276.         movs r3, # 0xff
  277.         bl _lcdxianshi
  278.         ldr r0, = jishu
  279.         movs r1, # 0
  280.         str r1, [r0]
  281.        
  282. _tiaoguolcdxunhuan:
  283.         bl _lvdtfuzhi                @计算LVDT传感器幅值
  284.         mov r4, r1
  285.         movs r1, # 6
  286.         ldr r2, = asciimabiao
  287.         movs r3, # 0xff
  288.         bl _zhuanascii

  289.         movs r0, # 0xc0
  290.         ldr r1, = asciimabiao
  291.         movs r2, # 6
  292.         bl _lcdxianshi

  293.         mov r0, r4
  294.         bl _jisuanfuzhi
  295.         movs r1, # 6
  296.         ldr r2, = asciimabiao
  297.         movs r3, # 0xff
  298.         bl _zhuanascii

  299.         movs r0, # 0xca
  300.         ldr r1, = asciimabiao
  301.         movs r2, # 6
  302.         bl _lcdxianshi
  303.         b tingting
  304.        
  305. _lvdtfuzhi:                @出R0=幅值,R1=相位
  306.         push {r2-r7,lr}
  307.         bl _jianbo                        @检波90、270
  308.         bl _jisuanfuzhi                        @计算90幅度
  309.         mov r2, r0
  310.         mov r0, r1
  311.         bl _jisuanfuzhi                        @计算270幅度
  312.         mov r1, r0
  313.         mov r0, r2
  314.         bl _xiangweipanduan                @判断相位
  315.         mov r4, r1
  316.         mov r3, r0
  317.         ldr r0, = lvbohuanchong                @滤波器缓冲区
  318.         movs r1, # 64                        @级数
  319.         ldr r2, = lvbozhizhen                @滤波器指针
  320.         bl _lvboqi                        @平滑,平均滤波器
  321.         mov r1, r4       
  322.         pop {r2-r7,pc}

  323. _xiangweipanduan:                @相位判断
  324.                                 @入R0=90度,R1=270度
  325.                                 @出R0=相之间相差的数值,
  326.                                 @出R1=1,90度是正,R1=0,90度是负
  327.         push {r2}
  328.         subs r2, r0, r1
  329.         bpl _adc90shizheng
  330.         subs r2, r1, r0
  331.         bpl _adc90shifu
  332.         cmp r0, r1
  333.         bne _xiangweipanduanfanhui
  334. _adc90shizheng:
  335.         mov r0, r2
  336.         movs r1, # 1
  337.         pop {r2}
  338.         bx lr
  339. _adc90shifu:
  340.         mov r0, r2
  341.         movs r1, # 0
  342.         pop {r2}
  343.         bx lr
  344. _xiangweipanduanfanhui:
  345.         movs r0, # 0
  346.         movs r1, # 1
  347.         pop {r2}
  348.         bx lr
  349.        
  350.        
  351. _jisuanfuzhi:                        @计算幅值
  352.                                 @入R0出R0
  353.                                 @R0=ADC90度采样
  354.         push {r1-r3,lr}
  355.         cmp r0, # 0
  356.         beq _adcshi0fanhui
  357.         ldr r1, = 0x04                @实 Q15
  358.         ldr r2, = 0xffff8004    @虚 Q15
  359.         mov r3, r0
  360.         muls r0, r0, r1                @实
  361.         asrs r0, r0, # 15
  362.         muls r3, r3, r2                @虚
  363.         asrs r3, r3, # 15
  364. _shibushibushi0:                @检测实部是不是负数
  365.         movs r0, r0
  366.         bpl _fzbushifushu1
  367.         mvns r0, r0                @是负数转成正数
  368.         adds r0, r0, # 1
  369. _fzbushifushu1:                        @检测虚部是不是负数
  370.         movs  r3, r3
  371.         bpl _fzbushifushu
  372.         mvns r3, r3                @是负数转成正数
  373.         adds r3, r3, # 1
  374. _fzbushifushu:
  375.         adds r0, r0, r3                @相加得到副值
  376. _adcshi0fanhui:       
  377.         pop {r1-r3,pc}
  378.        
  379. _jianbo:                                @检波
  380.                                         @输出r0=90度,R1=270度
  381.         push {r2-r4,lr}
  382.         ldr r2, = 0x4002005c
  383.         ldr r3, = 0x40012440
  384.         cpsid i
  385. _jianbo90du:
  386.         ldr r4, [r2]
  387.         cmp r4, # 25
  388.         bne _jianbo90du
  389.         ldr r0, [r3]                        @取出90度
  390. _jianbo270du:
  391.         ldr r4, [r2]
  392.         cmp r4, # 75
  393.         bne _jianbo270du
  394.         ldr r1, [r3]
  395.         cpsie i
  396.         pop {r2-r4,pc}

  397. _lvboqi:                                @滤波器
  398.                         @R0=地址,R1=长度,r2=表指针地址,r3=ADC数值
  399.                         @出R0=结果
  400.         push {r1-r7,lr}       
  401.         ldr r5, [r2]                @读出表指针
  402.         lsls r6, r1, # 2       
  403.         str r3, [r0, r5]        @数值写到滤波器缓冲区
  404.         adds r5, r5, # 4
  405.         cmp r5, r6
  406.         bne _lvboqimeidaohuanchongquding
  407.         movs r5, # 0
  408. _lvboqimeidaohuanchongquding:
  409.         str r5, [r2]
  410.         movs r7, # 0
  411. _lvboqixunhuan:
  412.         cmp r5, r6
  413.         bne _lvbozonghe
  414.         movs r5, # 0
  415. _lvbozonghe:
  416.         ldr r4, [r0, r5]
  417.         adds r5, r5, # 4
  418.         adds r7, r7, r4
  419.         subs r1, r1, # 1
  420.         bne _lvboqixunhuan
  421.         asrs r0, r7, # 6
  422.         pop {r1-r7,pc}
  423.        

  424. _lcdxianshi:                          @r0=LCD位置,r1=数据地址,r2=长度
  425.         push {r0-r4,lr}
  426.         mov r4, r1

  427.         movs r1, # 0
  428.         bl _xielcd

  429.         movs r1, # 1
  430.         movs r3, # 0
  431. _lcdxianshixunhuan:
  432.         ldrb r0, [r4,r3]
  433.         bl _xielcd
  434.         adds r3, r3, # 1
  435.         cmp r3, r2
  436.         bne _lcdxianshixunhuan
  437.         pop {r0-r4,pc}

  438. _lcdyanshi:
  439.         push {r5,lr}
  440.         ldr r5, = 0x2000
  441. _lcdyanshixunhuan:
  442.         subs r5, r5, # 1
  443.         bne _lcdyanshixunhuan
  444.         pop {r5,pc}

  445. _xielcd:                        @入R0=8位,r1=0命令,r1=1数据
  446.         push {r0-r7,lr}
  447.         lsrs r6, r0, # 4
  448.         lsls r0, r0, # 28
  449.         lsrs r0, r0, # 28
  450.         movs r2, # 0x80                @ RS
  451.         movs r3, # 0x40                @ E
  452.         movs r5, # 0x3c
  453.         ldr r4, = 0x48000000
  454.         cmp r1, # 0
  455.         beq _lcdmingling
  456.         str r2, [r4, # 0x18]        @RS=1
  457.         b _lcdshuju
  458. _lcdmingling:
  459.         str r2, [r4, # 0x28]        @RS=0
  460. _lcdshuju:
  461.         str r3, [r4, # 0x18]        @E=1
  462.         str r5, [r4, # 0x28]

  463.         lsls r7, r6, # 31
  464.         lsrs r7, r7, # 26
  465.         str r7, [r4, # 0x18]

  466.         lsrs r7, r6, # 1
  467.         lsls r7, r7, # 31
  468.         lsrs r7, r7, # 27
  469.         str r7, [r4, # 0x18]

  470.         lsrs r7, r6, # 2
  471.         lsls r7, r7, # 31
  472.         lsrs r7, r7, # 28
  473.         str r7, [r4, # 0x18]

  474.         lsrs r7, r6, # 3
  475.         lsls r7, r7, # 31
  476.         lsrs r7, r7, # 29
  477.         str r7, [r4, # 0x18]

  478.         bl _lcdyanshi
  479.         str r3, [r4, # 0x28]        @E=0


  480.         str r3, [r4, # 0x18]    @E=1
  481.         str r5, [r4, # 0x28]

  482.         lsls r7, r0, # 31
  483.         lsrs r7, r7, # 26
  484.         str r7, [r4, # 0x18]

  485.         lsrs r7, r0, # 1
  486.         lsls r7, r7, # 31
  487.         lsrs r7, r7, # 27
  488.         str r7, [r4, # 0x18]

  489.         lsrs r7, r0, # 2
  490.         lsls r7, r7, # 31
  491.         lsrs r7, r7, # 28
  492.         str r7, [r4, # 0x18]

  493.         lsrs r7, r0, # 3
  494.         lsls r7, r7, # 31
  495.         lsrs r7, r7, # 29
  496.         str r7, [r4, # 0x18]

  497.         bl _lcdyanshi
  498.         str r3, [r4, # 0x28]    @E=0

  499.         pop {r0-r7,pc}
  500.         .ltorg


  501. _zhuanascii:                                        @ 16进制转数码管码
  502.                 @ R0要转的数据, R1长度,R2结果表首地址, r3=小数点位置
  503.         push {r0-r7,lr}
  504.         mov r7, r3
  505.         mov r5, r0
  506.         mov r6, r1
  507.         movs r1, # 10
  508. _xunhuanqiuma:
  509.         bl _chufa
  510.         mov r4, r0
  511.         muls r4, r1
  512.         subs r3, r5, r4
  513.         adds r3, r3, # 0x30
  514.         mov r5, r0
  515.         subs r6, r6, # 1
  516.         beq _qiumafanhui
  517.         cmp r6, r7
  518.         bne _meidaoxiaoshudian
  519.         movs r4, # 0x2e                @小数点
  520.         strb r4, [r2,r6]        @插入小数点
  521.         subs r6, r6, # 1
  522. _meidaoxiaoshudian:
  523.         strb r3, [r2,r6]
  524.         movs r6, r6
  525.         bne _xunhuanqiuma
  526.         pop {r0-r7,pc}
  527. _qiumafanhui:
  528.         strb r3, [r2, r6]
  529.         pop {r0-r7,pc}

  530.        
  531. _chufa:                                @软件除法
  532.         @ r0 除以 r1 等于 商(r0)余数R1
  533.         push {r1-r4,lr}
  534.         cmp r0, # 0
  535.         beq _chufafanhui
  536.         cmp r1, # 0
  537.         beq _chufafanhui
  538.         mov r2, r0
  539.         movs r3, # 1
  540.         lsls r3, r3, # 31
  541.         movs r0, # 0
  542.         mov r4, r0
  543. _chufaxunhuan:
  544.         lsls r2, r2, # 1
  545.         adcs r4, r4, r4
  546.         cmp r4, r1
  547.         bcc _chufaweishubudao0
  548.         adds r0, r0, r3
  549.         subs r4, r4, r1
  550. _chufaweishubudao0:
  551.         lsrs r3, r3, # 1
  552.         bne _chufaxunhuan
  553. _chufafanhui:
  554.         pop {r1-r4,pc}
  555.         .ltorg


  556. _nmi_handler:
  557.         bx lr
  558. _hard_fault:
  559.         bx lr
  560. _svc_handler:
  561.         bx lr
  562. _pendsv_handler:
  563.         bx lr
  564. _systickzhongduan:
  565.         ldr r2, = jishu
  566.         ldr r0, = 0xe0000d04
  567.         ldr r3, [r2]
  568.         ldr r1, = 0x02000000
  569.         adds r3, r3, # 1
  570.         str r3, [r2]
  571.         str r1, [r0]                 @ 清除SYSTICK中断
  572. aaa:
  573.         bx lr
复制代码

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-3-6 08:45:10 | 显示全部楼层
视频:
来回推拉筷子屏幕第二行左边显示幅值右边显示相位




回复 支持 反对

使用道具 举报

     
发表于 2018-3-8 13:54:55 | 显示全部楼层
我看的第一本相差的书<精密测量>中就有这个差动变压器,好像当时就是古董,大约5-6十年之前的书籍了,电路应该不复杂;
回复 支持 反对

使用道具 举报

     
发表于 2018-3-8 15:09:44 来自手机 | 显示全部楼层
大神,汇编玩到这样,对mcu硬件了解也算是门清了。
回复 支持 反对

使用道具 举报

     
发表于 2018-3-22 21:17:08 | 显示全部楼层
这真是吓人,哈哈
回复 支持 反对

使用道具 举报

     
发表于 2018-3-23 05:10:35 | 显示全部楼层
卧槽,Stm32你也拿汇编写,一点没发挥出St给你准备的库的优势啊。
回复 支持 反对

使用道具 举报

     
发表于 2018-3-26 09:20:06 | 显示全部楼层
您是大侠啊,汇编不懂,搭桥也看不懂
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-30 10:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表