前些天25号,早上起来非要想出去找工作,关注这家做试验仪器的公司两年了,于是下定决心一定要去看看。
上午调试了我做的涡流探伤仪,铁皮一个小裂缝都能探测到了。去年做的LVDT传感器调整了下放大倍数,也可以正常演示了,我又把几块电池焊接起来做电源好给他们演示。
上午在QQ上联系了Y副总,我问他可不可以去看看,他说可以,还问我什么时候去,我说下午,说好后我下QQ了。做了一些出去的准备,比如剪胡子、洗脸、梳头,上午还吃了不点饭,给我哥打电话让他在城里某个地方等我,因为我哥是开出租车的,这个厂子在城南农村,交通不太方便。
终于等到了下午,心情很紧张,我穿上了我平时出去弄草时候穿的迷彩服,鞋是解放鞋的棉鞋版,头发扎起来戴了个帽子。1点到家门外公路边等客车,还把我做的两个小制作放在了快递用的纸盒里面,电池装在口袋里面,等了很长时间才来了客车,2016年出去找过工作,失败后再也没进过城。 我上了客车,客车上就我一个人和司机,我从口袋里拿出了9元给了司机,说了在哪个地方下车,我们这到城里25公里,一路上就我一个乘客,我抱着我的纸盒,帕给我颠坏了。到了城里我哥在那已经等了很长时间了,上了我哥的车,给了他地址,又开了3公里才到这个公司,我哥还以为我真要去找工作。
我和我哥来到了这家公司门前,公司也算占地不小,我给Y副总打了电话说我已经到了,Y副总和热情说在南门等我,去了后看到他在门口等我,见了面打了个招呼,还是很热情,我拿着我的纸盒跟着他走进了他们公司,到了他的办公室。 在办公室里面他先问我哪里的,我说了哪里的原来还是一个镇的,接着他又说了他们厂子的情况,他们厂子是做仪器的,还说比我以前干活的刹车片厂强多了,还是山东科学院产学研基地,经常有博士生来实习,公司技术实力很强,是Y台市高新技术企业。我有点自卑,因为我是小学学历,于是我拿出我做的两个小制作让他看看,他说他不懂技术让他们工程师来看看,他说他这个工程师有好几个专利,看过我反汇编的帖子,说我搞的太底层了,说现在都是搞应用,反正越说我越不爱听,也不能和人家反驳。
过了一会他们的工程师来了,Y副总让他们工程师和我聊,他去忙别的了,和他们工程师聊天知道比我大三岁。我拿出了我做的小制作和电池,我和他说我这两个东西原理是一样的,但是里面放大倍数不一样,第一个给他演示的是去年做的LVDT位移传感器,问了我一些原理,比如电路哪个地方是干什么的,我都给他解释了,因为这东西从线圈传感器到电路再到程序都是自己做的,对原理比较熟,我说这东西就是三个线圈,正弦波信号通中间线圈,其他两个差分,输出电压通过单片机ADC采集,程序里面数字信号处理滤波和计算幅值显示到LCD1602上面。 然后他又问了我单片机型号,我说是STM32,他说哦是ARM,还问我这个芯片是不是美国生产的,我说是意法半导体,他还自己抽拉了位置传感器看读数变化,第一个演示完了我又拿出我做的简易涡流探伤仪,和一块有小裂痕的铁皮,把电池从第一个小制作拿下来,给这个探伤的接通了电源,然后给他演示探测这个小裂痕,同时我说别看这两个功能不一样,其实电路和程序区别很小都很简单,只是探伤的放大倍数大一点,放大了上万倍才用单片机ADC采集的,他又问我探头什么原理,我说和第一个也是一样的原理。
给他演示完了他又和我说他们那的情况,通过聊天知道这是一个塌实的人,他是公司的顶梁柱,电路和程序方面全靠他,老板是靠做金相试验配套仪器起家的,要用显微镜看要先用切割机切割再研磨,他说什么我答应什么,其实这些我早到了解了,我们从温控聊到PID,然后是数字信号处理,我说我不管什么都先学原理再自己写程序,还说我会反汇编可以仿制别人设备,聊的很投机。 这个时候Y副总回来了,他说我在家自学的基础技术都没用,他们这是做应用的,要我放弃自己学的基础技术根他们工程师学做应用,说看重我肯自学的精神,要我把以前学的都忘了,从新学应用,我也没说什么就听他说,接着他说他们老板很少再公司,今天回来了说带我去见老板,进了老板办公室老板正在和别人说话,Y副总让我先坐下等等,过了一会老板过来了,看样子很憨厚,问了我一些问题,问我多大结没结婚,老板还说电比较复杂,听他意思不相信我样子的也能搞电,他也没看过我做的东西,以为我什么也不会。然后无奈的口气让Y副总自己安排,然后我们就出了总经理办公室,还是Y副总给我开的门,到了Y副总办公室又聊了一会,和我哥说这孩子再在家就废了,还问我会不会焊接电路板,所到他们这可以焊接电路版,说他们老板喜欢做慈善,还从柜子里面拿出个奖牌,看完了后我们握手告别,出厂门有种解脱的感觉,可能晚上调试到2点比较累没休息好。 出来那一刻我决定再也不会来这里,Y副总人不错,给了我一次重新踏上社会的机会,他顶着别人的压力招一个穿着如此不堪的人,在这里感谢这位Y副总。
我这次出来就没想要出来找工作,只是出来看看了了解下行情,要是三年前遇到Y副总我就在这工作了,而三年前遇到的都是不愿意要我的,我非常想出来工作的时候没人要我,我不想出来的时候又有人愿意接受我。 我妈66岁了,我出来前给她保证我不会出来工作,就是出来看看,让她别担心。
再加上我一开始心很大,想要到他们那给他们搞研发,但是去了后感觉是让我干组装给他们工程师找个帮手,应用就是组装别人的模块,而我要都自己开发,心里期望出现偏差,公司也不需要破解别人产品或者模块,需要的可能就是把模块组装起来,自己开发个人机接口板子,所以最后还是绝定放弃这次机会了,自己坐车回来,看到那么多人都有自己的位置,为啥自己没这样的位置。 感觉自己就像从地狱上来到人间转了一圈,像做梦一样,这可能最后一次努力出去,真的放弃了,各种条件导致这样的结果。
我蹲了11年本来出来就要克服很大心里障碍,从来没在外面住宿过,吃穿等生活和别人不一样,我出去到工厂住宿我妈肯定会很难受,去公司的干的工作内容不是自己心里预期的,每一样都不容易克服,真的没希望改变什么了。
我语文不好,分享下自己最近的经历,蹲子社会上的废物到哪里人们都躲着,自己的亲戚都不愿意和我说话,去年我90多岁的奶奶去世了,我四叔家儿子从江苏回来了,他是北京传媒大学研究生毕业,亲戚们对他非常热情,对我却没人愿意提我,我这位哥是搞WEB开发的,一个月2万工资,比我大三岁,找媳妇很挑剔。我五叔家的的儿子快40了,总做梦发财做老板,但是家里钱都赔光了,现在也是光棍,我们家这三个光棍在一块,村里人肯定很笑话,我奶奶有5个儿子,现在只有我亲哥有一个女儿,一大家的人就这一个独苗,真是让人难受,最小的五叔都64岁了,曾经在村里也算人强马壮。
我虽然是失败者,但是都是我自己的原因,别人就是给我机会我都不愿意用,活该落到今天这样。
下面这个是DIY的涡流探伤仪,手里可以说根本没什么材料,连探头都是自己做的。
演示视频
程序也是自己写的,功能很简单,就是显示个ADC的数值。
@@单片机stm32f030f4p6
@@功能涡流探伤
@作者:yjmwxwx
@时间:2019-02-21
@编译器:GNU AS(ARM-NONE-EABI-AS)
.thumb
.syntax unified
.section .data
zheng_xian_biao:
.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
jia:
.ascii "++++++++++"
jian:
.ascii "----------"
lcdshuju:
.ascii "yjmwxwx-20190221"
dianhua:
.ascii " 15552208295"
qq:
.ascii " QQ:3341656346"
.equ STACKINIT, 0x20001000
.equ asciimabiao, 0x20000000
.equ jishu, 0x20000010
.equ lvbozhizhen, 0x20000020
.equ lvbohuanchong, 0x20000024
.equ adccaiyang, 0x20000100
.section .text
vectors:
.word STACKINIT
.word _start + 1
.word _nmi_handler + 1
.word _hard_fault + 1
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word 0
.word _svc_handler +1
.word 0
.word 0
.word _pendsv_handler +1
.word _systickzhongduan +1 @ 15
.word aaa +1 @ _wwdg +1 @ 0
.word aaa +1 @_pvd +1 @ 1
.word aaa +1 @_rtc +1 @ 2
.word aaa +1 @_flash +1 @ 3
.word aaa +1 @ _rcc + 1 @ 4
.word aaa +1 @_exti0_1 +1 @ 5
.word aaa +1 @ _exti2_3 +1 @ 6
.word aaa +1 @_exti4_15 +1 @ 7
.word aaa +1 @ 8
.word aaa +1 @_dma1_1 +1 @ 9
.word aaa +1 @_dma1_2_3 +1 @ 10
.word aaa +1 @_dma1_4_5 +1 @ 11
.word aaa +1 @_adc1 +1 @ 12
.word aaa +1 @_tim1_brk_up +1 @ 13
.word aaa +1 @ _tim1_cc +1 @ 14
.word aaa +1 @_tim2 +1 @ 15
.word aaa +1 @_tim3 +1 @ 16
.word aaa +1 @ 17
.word aaa +1 @ 18
.word aaa +1 @_tim14 +1 @ 19
.word aaa +1 @ 20
.word aaa +1 @_tim16 +1 @ 21
.word aaa +1 @_tim17 +1 @ 22
.word aaa +1 @_i2c +1 @ 23
.word aaa +1 @ 24
.word aaa +1 @_spi +1 @ 25
.word aaa +1 @ 26
.word aaa +1 @_usart1 +1 @ 27
.align 2
_start:
__shi_zhong_chu_shi_hua:
ldr r0, = 0x40021000 @ rcc
ldr r2, = 0x40022000 @FLASH访问控制
movs r1, # 0x32
str r1, [r2] @FLASH缓冲 缓冲开启
ldr r0, = 0x40021000 @ rcc
ldr r1, = 0x01
str r1, [r0, # 0x04]
ldr r1, = 0x10000
str r1, [r0]
__deng_hse_jiu_xu:
ldr r1, [r0]
lsls r1, # 14
bpl __deng_hse_jiu_xu
@0x34时钟控制寄存器 2 (RCC_CR2)
movs r1, # 0x01
str r1, [r0, # 0x34] @ HSI开14M时钟
__deng_dai_14m_shi_zhong_wen_ding:
ldr r1, [r0, # 0x34]
lsls r1, r1, # 30 @ 左移30位
bpl __deng_dai_14m_shi_zhong_wen_ding @ 等待14M时钟稳定
__nei_cun_qing_ling:
ldr r0, = 0x20000000
movs r1, # 0
ldr r3, = 0x1000
__nei_cun_qing_ling_xun_huan:
subs r3, # 4
str r1, [r0, r3]
bne __nei_cun_qing_ling_xun_huan
_waisheshizhong: @ 外设时钟
@+0x14=RCC_AHBENR
@0=DMA @2=SRAM @4=FLITF@6=CRC @17=PA @18=PB @19=PC @20=PD @22=PF
ldr r0, = 0x40021000
ldr r1, = 0x460005
str r1, [r0, # 0x14]
@+0x18外设时钟使能寄存器 (RCC_APB2ENR)
@0=SYSCFG @5=USART6EN @9=ADC @11=TIM1 @12=SPI1 @14=USART1 @16=TIM15 @17=TIM16 @18=TIM17 @22=DBGMCU
ldr r1, = 0xa00
str r1, [r0, # 0x18]
@+0X1C=RCC_APB1ENR
@1=TIM3 @4=TIM6 @5=TIM7 @8=TIM14 @11=WWDG @14=SPI @17=USRT2 @18=USART3 @20=USART5 @21=I2C1
@22=I2C2 @23=USB @28=PWR
tim1chushiha:
ldr r0, = 0x40012c00 @ tim1_cr1
movs r1, # 0
str r1, [r0, # 0x28] @ psc
ldr r1, = 96
str r1, [r0, # 0x2c] @ ARR
ldr r1, = 0x68
str r1, [r0, # 0x1c] @ ccmr2 CC3
ldr r1, = 0x100 @ CC3
str r1, [r0, # 0x20] @ ccer
ldr r1, = 0x8000
str r1, [r0, # 0x44] @ BDTR
ldr r1, = 0x800 @ CC3 DMA
str r1, [r0, # 0x0c] @ DIER
ldr r1, = 0xe1
str r1, [r0]
_adcchushihua:
ldr r0, = 0x40012400 @ adc基地址
ldr r1, = 0x80000000
str r1, [r0, # 0x08] @ ADC 控制寄存器 (ADC_CR) @adc校准
_dengadcjiaozhun:
ldr r1, [r0, # 0x08]
movs r1, r1
bmi _dengadcjiaozhun @ 等ADC校准
_kaiadc:
ldr r1, [r0, # 0x08]
movs r2, # 0x01
orrs r1, r1, r2
str r1, [r0, # 0x08]
_dengdaiadcwending:
ldr r1, [r0]
lsls r1, r1, # 31
bpl _dengdaiadcwending @ 等ADC稳定
_tongdaoxuanze:
ldr r1, = 0x01
str r1, [r0, # 0x28] @ 通道选择寄存器 (ADC_CHSELR)
ldr r1, = 0x3000 @ 13 连续转换
str r1, [r0, # 0x0c] @ 配置寄存器 1 (ADC_CFGR1)
movs r1, # 0 @
str r1, [r0, # 0x14] @ ADC 采样时间寄存器 (ADC_SMPR)
ldr r1, [r0, # 0x08]
movs r2, # 0x04 @ 开始转换
orrs r1, r1, r2
str r1, [r0, # 0x08] @ 控制寄存器 (ADC_CR)
dmachushihua:
@+0=LSR,+4=IFCR,
@+8=CCR1,+c=CNDTR1,+10=CPAR1+14=CMAR1,
@+1c=CCR2,+20=CNDTR2,+24=CPAR2,+28=CMAR2
@+30=CCR3,+34=CNDTR3,+38=CPAR2,+3c=CMAR3
@+44=CCR4,+48=CNDTR4,+4c=CPAR4,+50=CMAR4
@+58=CCR5,+5c=CNDTR5,+60=CPAR5,+64=CMAR5
@+6C=CCR6,+70=CNDTR6,+74=CPAR6,+78=CMAR6
@+80=CCR7,+84=CNDTR7,+88=CPAR7,+8c=CMAR7
@tim1ch3DMA
ldr r0, = 0x40020000
ldr r1, = 0x40012c3c @ 外设地址
str r1, [r0, # 0x60]
ldr r1, = zheng_xian_biao @ 储存器地址
str r1, [r0, # 0x64]
ldr r1, = 100 @点数
str r1, [r0, # 0x5c]
ldr r1, = 0x25b1 @ 储存到外设
str r1, [r0, # 0x58]
_waishezhongduan: @外设中断
@0xE000E100 0-31 写1开,写0没效
@0XE000E180 0-31 写1关,写0没效
@0XE000E200 0-31 挂起,写0没效
@0XE000E280 0-31 清除, 写0没效
_systick: @ systick定时器初始化
ldr r0, = 0xe000e010
ldr r1, = 0xffffff
str r1, [r0, # 4]
str r1, [r0, # 8]
movs r1, # 0x07
str r1, [r0]
io_she_zhi:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@a(0x48000000)b(0x48000400)c(0x48000800)d(0x48000c00)f(0x48001400)
@ 输入(00),通用输出(01),复用功能(10),模拟(11)
@偏移0x4 = 端口输出类型 @ (0 推挽),( 1 开漏)
@偏移0x8 = 输出速度 00低速, 01中速, 11高速
@偏移0xC = 上拉下拉 (00无上下拉, 01 上拉, 10下拉)
@偏移0x10 = 输入数据寄存器
@偏移0x14 = 输出数据寄存器
@偏移0x18 = 端口开 0-15置位
@偏移0x28 = 端口关
@0X20 = 复用低
@GPIO口0(0-3位)每个IO口占用4位
@ AF0 = 0X0000, AF1 = 0X0001, AF2 = 0X0010 AF3 = 0X0011, AF4 = 0X0100
@ AF5 = 0X0101, AF6 = 0X0111, AF7 = 0X1000
@0x24 = 复用高
@GPIO口8 (0-3位)每个IO口占用4位
@ AF0 = 0X0000, AF1 = 0X0001, AF2 = 0X0010 AF3 = 0X0011, AF4 = 0X0100
@ AF5 = 0X0101, AF6 = 0X0111, AF7 = 0X1000
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ldr r0, = 0x48000000
ldr r1, = 0x28205553
str r1, [r0]
movs r1, # 0xfc @ pa2-pa7开漏输出
str r1, [r0, # 0x04]
ldr r1, = 0x200
str r1, [r0, # 0x24]
_lcdchushihua:
movs r0, # 0x33
movs r1, # 0
bl _xielcd
bl _lcdyanshi
movs r0, # 0x32
movs r1, # 0
bl _xielcd
bl _lcdyanshi
movs r0, # 0x28
movs r1, # 0
bl _xielcd
bl _lcdyanshi
movs r0, # 0x0c
movs r1, # 0
bl _xielcd
bl _lcdyanshi
movs r0, # 0x01
movs r1, # 0
bl _xielcd
bl _lcdyanshi
__zhuang_man_lv_bo_qi_huan_chong_qu:
movs r6, # 16
__deng_lv_bo_qi_huan_chong_man: @等滤波器缓冲区满
bl _lvdtfuzhi
subs r6, r6, # 1
bne __deng_lv_bo_qi_huan_chong_man
tingting:
ldr r0, = jishu
ldr r1, [r0]
cmp r1, # 2
beq _lcddi1
cmp r1, # 4
beq _lcddi2
cmp r1, # 6
beq _lcddi3
b _tiaoguolcdxunhuan
_lcddi1:
movs r0, # 0x80
ldr r1, = lcdshuju
movs r2, # 16
movs r3, # 0xff
bl _lcdxianshi
ldr r0, = 0x40020000
ldr r1, = 0
str r1, [r0, # 0x08]
b _tiaoguolcdxunhuan
_lcddi2:
movs r0, # 0x80
ldr r1, = dianhua
movs r2, # 16
movs r3, # 0xff
bl _lcdxianshi
b _tiaoguolcdxunhuan
_lcddi3:
movs r0, # 0x80
ldr r1, = qq
movs r2, # 16
movs r3, # 0xff
bl _lcdxianshi
ldr r0, = jishu
movs r1, # 0
str r1, [r0]
_tiaoguolcdxunhuan:
bl _lvdtfuzhi @计算LVDT传感器幅值
mov r4, r0
cmp r1, # 1
beq _lvdtzheng
ldr r1, = jian
b _lvdtzhengfuxianshi
_lvdtzheng:
ldr r1, = jia
_lvdtzhengfuxianshi:
movs r0, # 0xc6 @LCD位置
movs r2, # 10 @长度
movs r3, # 0xff @没小数点
bl _lcdxianshi
mov r0, r4
movs r1, # 4
ldr r2, = asciimabiao
movs r3, # 0xff
bl _zhuanascii
movs r0, # 0xc1
ldr r1, = asciimabiao
movs r2, # 4
bl _lcdxianshi
b tingting
_lvdtfuzhi: @出
@R0=幅值,R1=相位
push {r2-r7,lr}
ldr r0, = 0x40012400
movs r1, # 0x01
str r1, [r0, # 0x28]
bl _jianbo @检波90、270
bl _jisuanfuzhi @计算90幅度
mov r2, r0
mov r0, r1
bl _jisuanfuzhi @计算270幅度
mov r1, r0
mov r0, r2
bl _xiangweipanduan @判断相位
mov r4, r1
mov r3, r0
ldr r0, = lvbohuanchong @滤波器缓冲区
movs r1, # 16 @级数
ldr r2, = lvbozhizhen @滤波器指针
bl _lvboqi @平滑,平均滤波器
mov r1, r4
pop {r2-r7,pc}
_xiangweipanduan: @相位判断
@入R0=90度,R1=270度
@出R0=相之间相差的数值,
@出R1=1,90度是正,R1=0,90度是负
push {r2,lr}
lsrs r1, r1, # 1 @ 校准0点
subs r2, r0, r1
bpl _adc90shizheng
subs r2, r1, r0
bpl _adc90shifu
cmp r0, r1
bne _xiangweipanduanfanhui
_adc90shizheng:
mov r0, r2
movs r1, # 1
pop {r2,pc}
_adc90shifu:
mov r0, r2
movs r1, # 0
pop {r2,pc}
_xiangweipanduanfanhui:
movs r0, # 0
movs r1, # 1
pop {r2,pc}
_jisuanfuzhi: @计算幅值
@入R0出R0
@R0=ADC90度采样
push {r1-r3,lr}
cmp r0, # 0
beq _adcshi0fanhui
ldr r1, = 0x04 @实 Q15
ldr r2, = 0xffff8004 @虚 Q15
mov r3, r0
muls r0, r0, r1 @实
asrs r0, r0, # 15
muls r3, r3, r2 @虚
asrs r3, r3, # 15
_shibushibushi0: @检测实部是不是负数
movs r0, r0
bpl _fzbushifushu1
mvns r0, r0 @是负数转成正数
adds r0, r0, # 1
_fzbushifushu1: @检测虚部是不是负数
movs r3, r3
bpl _fzbushifushu
mvns r3, r3 @是负数转成正数
adds r3, r3, # 1
_fzbushifushu:
adds r0, r0, r3 @相加得到副值
_adcshi0fanhui:
pop {r1-r3,pc}
_jianbo: @检波
@输出r0=90度,R1=270度
push {r2-r4,lr}
ldr r2, = 0x4002005c
ldr r3, = 0x40012440
cpsid i
_jianbo90du:
ldr r4, [r2]
cmp r4, # 25
bne _jianbo90du
ldr r0, [r3] @取出90度
_jianbo270du:
ldr r4, [r2]
cmp r4, # 75
bne _jianbo270du
ldr r1, [r3]
cpsie i
pop {r2-r4,pc}
_lvboqi: @滤波器
@R0=地址,R1=长度,r2=表指针地址,r3=ADC数值
@出R0=结果
push {r1-r7,lr}
ldr r5, [r2] @读出表指针
lsls r6, r1, # 2
str r3, [r0, r5] @数值写到滤波器缓冲区
adds r5, r5, # 4
cmp r5, r6
bne _lvboqimeidaohuanchongquding
movs r5, # 0
_lvboqimeidaohuanchongquding:
str r5, [r2]
movs r7, # 0
_lvboqixunhuan:
cmp r5, r6
bne _lvbozonghe
movs r5, # 0
_lvbozonghe:
ldr r4, [r0, r5]
adds r5, r5, # 4
adds r7, r7, r4
subs r1, r1, # 1
bne _lvboqixunhuan
asrs r0, r7, # 4 @修改
pop {r1-r7,pc}
_lcdxianshi: @r0=LCD位置,r1=数据地址,r2=长度
push {r0-r4,lr}
mov r4, r1
movs r1, # 0
bl _xielcd
movs r1, # 1
movs r3, # 0
_lcdxianshixunhuan:
ldrb r0, [r4,r3]
bl _xielcd
adds r3, r3, # 1
cmp r3, r2
bne _lcdxianshixunhuan
pop {r0-r4,pc}
_lcdyanshi:
push {r5,lr}
ldr r5, = 0x2000
_lcdyanshixunhuan:
subs r5, r5, # 1
bne _lcdyanshixunhuan
pop {r5,pc}
_xielcd: @入R0=8位,r1=0命令,r1=1数据
push {r0-r7,lr}
lsrs r6, r0, # 4
lsls r0, r0, # 28
lsrs r0, r0, # 28
movs r2, # 0x80 @ RS
movs r3, # 0x40 @ E
movs r5, # 0x3c
ldr r4, = 0x48000000
cmp r1, # 0
beq _lcdmingling
str r2, [r4, # 0x18] @RS=1
b _lcdshuju
_lcdmingling:
str r2, [r4, # 0x28] @RS=0
_lcdshuju:
str r3, [r4, # 0x18] @E=1
str r5, [r4, # 0x28]
lsls r7, r6, # 31
lsrs r7, r7, # 26
str r7, [r4, # 0x18]
lsrs r7, r6, # 1
lsls r7, r7, # 31
lsrs r7, r7, # 27
str r7, [r4, # 0x18]
lsrs r7, r6, # 2
lsls r7, r7, # 31
lsrs r7, r7, # 28
str r7, [r4, # 0x18]
lsrs r7, r6, # 3
lsls r7, r7, # 31
lsrs r7, r7, # 29
str r7, [r4, # 0x18]
bl _lcdyanshi
str r3, [r4, # 0x28] @E=0
str r3, [r4, # 0x18] @E=1
str r5, [r4, # 0x28]
lsls r7, r0, # 31
lsrs r7, r7, # 26
str r7, [r4, # 0x18]
lsrs r7, r0, # 1
lsls r7, r7, # 31
lsrs r7, r7, # 27
str r7, [r4, # 0x18]
lsrs r7, r0, # 2
lsls r7, r7, # 31
lsrs r7, r7, # 28
str r7, [r4, # 0x18]
lsrs r7, r0, # 3
lsls r7, r7, # 31
lsrs r7, r7, # 29
str r7, [r4, # 0x18]
bl _lcdyanshi
str r3, [r4, # 0x28] @E=0
pop {r0-r7,pc}
.ltorg
_zhuanascii: @ 16进制转数码管码
@ R0要转的数据, R1长度,R2结果表首地址, r3=小数点位置
push {r0-r7,lr}
mov r7, r3
mov r5, r0
mov r6, r1
movs r1, # 10
_xunhuanqiuma:
bl _chufa
mov r4, r0
muls r4, r1
subs r3, r5, r4
adds r3, r3, # 0x30
mov r5, r0
subs r6, r6, # 1
beq _qiumafanhui
cmp r6, r7
bne _meidaoxiaoshudian
movs r4, # 0x2e @小数点
strb r4, [r2,r6] @插入小数点
subs r6, r6, # 1
_meidaoxiaoshudian:
strb r3, [r2,r6]
movs r6, r6
bne _xunhuanqiuma
pop {r0-r7,pc}
_qiumafanhui:
strb r3, [r2, r6]
pop {r0-r7,pc}
_chufa: @软件除法
@ r0 除以 r1 等于 商(r0)余数R1
push {r1-r4,lr}
cmp r0, # 0
beq _chufafanhui
cmp r1, # 0
beq _chufafanhui
mov r2, r0
movs r3, # 1
lsls r3, r3, # 31
movs r0, # 0
mov r4, r0
_chufaxunhuan:
lsls r2, r2, # 1
adcs r4, r4, r4
cmp r4, r1
bcc _chufaweishubudao0
adds r0, r0, r3
subs r4, r4, r1
_chufaweishubudao0:
lsrs r3, r3, # 1
bne _chufaxunhuan
_chufafanhui:
pop {r1-r4,pc}
.ltorg
_nmi_handler:
bx lr
_hard_fault:
bx lr
_svc_handler:
bx lr
_pendsv_handler:
bx lr
_systickzhongduan:
ldr r2, = jishu
ldr r0, = 0xe0000d04
ldr r3, [r2]
ldr r1, = 0x02000000
adds r3, r3, # 1
str r3, [r2]
str r1, [r0] @ 清除SYSTICK中断
aaa:
bx lr
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2019-3-12 18:55
被CCkicker编辑
,原因: