📄 yalibiao18.s43
字号:
jeq shangx_H
cmp.b #2,flag4
jeq xiax_L
cmp.b #3,flag4
jne shed_no
shed_ok clr.b flag ;设定后确定
clr.b stlim
call #clrLCD1
jmp set_ok
shangx_H mov.b #02h,index ;上限
mov.b #1,flag
mov.b #55,stlim ;55为修改上下限,0则相反04/10/9
jmp EndP2x
xiax_L mov.b #04h,index ;下限
mov.b #5,flag
jmp EndP2x
shed_no clr.b flag4
clr.b index ;04/10/9
clr.b stlim
jmp EndP2x
;;------------------------------------------------
set_ok clr.b index ;设置ok
mov #01080h,R13 ;如果FLASH没有使用过,则直接把CN1-7转换成16进制存入FLAHS
cmp #0FFFFh,0(R13)
jeq cunflash
;mov 0(R13),TEMP1
;mov 2(R13),TEMP2
call #BCDtoBIN ;存入内部flash前比较CN1-7里的数是否被改动过,如果没有被改动过则放弃存入
cmp TMPF1,0(R13)
jne E_cflash
cmp TMPF2,2(R13)
jne E_cflash
jmp EndP2x
cunflash call #BCDtoBIN ;这一段与上面一段是一样的,以后可以简化
mov TEMP1,R6
cmp TMPF1,R6 ;判断上下限是否被改动过
jne cunflash1
mov TEMP2,R6
cmp TMPF2,R6
jne cunflash1
jmp EndP2x
E_cflash call #Eflash
cunflash1 mov TMPF1,R18
call #Wflash
incd R13
mov TMPF2,R18
call #Wflash
mov TMPF1,TEMP1
mov TMPF2,TEMP2
jmp EndP2x
;;----------校准-------------------------
P21_ISR bic.b #02h,&P2IFG ;jiao zhu
mov #2500,R16
call #Delay
bit.b 02h,&P2IN
jnz EndP2x
mov #01000h,R13 ;
cmp #0FFFFh,0(R13) ;因为只准修一次,所以先得判断地址1000H里是否有数
jne EndP2x ;如果有数则将结束P2.1中断
inc.b flag3 ;flag=1----进入0校准 flag=2----进入最大值校准 flag=3----校准OK
cmp.b #01h,flag3
jeq jiu_f1
cmp.b #02h,flag3
jeq jiu_f2
cmp.b #03h,flag3
jeq jiu_f3
clr.b index
clr.b flag3
clr.b &P2IFG
reti
jiu_f3
clr.b index ;校准OK,把校准值存入内部flash
clr.b flag3
mov #01000h,R13
cmp #0FFFFh,0(R13)
jeq cunjiaozh
call #Eflash1
cunjiaozh mov jiaozh,R18 ;;记住 地址1000H存入的是4.5V校准值
call #Wflash
incd R13
mov jzhun,R18
call #Wflash
jmp EndP2x
jiu_f1
mov.b #06h,index
jmp EndP2x
jiu_f2 mov jiaozh,jzhun
mov.b #08h,index
jmp EndP2x
;;-------------------------------------------------
P23_ISR bic.b #08h,&P2IFG ;P2.3中断作用是左右移动要修改的上下限某一位数
cmp.b #02h,index
jne pd_index1
inc.b flag
cmp.b #4,flag
jlo EndP2x
mov.b #1,flag
jmp EndP2x
pd_index1 cmp.b #04h,index
jne EndP2x
inc.b flag
cmp.b #8,flag
jlo EndP2x
mov.b #5,flag
jmp EndP2x ;;end P23_ISR
EndP2x clr.b &P2IFG ;结束P2口中断
reti
;--------------------------------------------------------------------------------
;------------------------------------------------------------------
; P1X_ISR 没用到
;-------------------------------------------------------------------
P1x_ISR bic.b #LPM3,0(SP)
bit.b #02h,&P1IFG
jz EndP1x
P11_ISR bic.b #02h,&P1IFG
jmp EndP1x
EndP1x reti
;--------------------------------------------------------------------------
; BT_ISR_XX没用到
;--------------------------------------------------------------------------
BT_ISR bic #LPM3,0(SP)
EndBT reti
;-----------------------------------------
; 看门狗中断
;-----------------------------------------
WDTInt bic #LPM3,0(SP)
bis #ENC,&ADC12CTL0 ;04/10/8
cmp.b #55,stlim ;55为修改上下限标志,0为通常状态
jne EndWDT
inc.b limCN ;这一段是修改上下限时屏幕一闪一灭有关
cmp.b #01Eh,limCN ;因为16ms中断一次,闪得太快,所以要累积50次=50x16=800ms
jlo EndWDT
clr.b limCN
cmp.b #00h,limIFG ;
jeq set_1
clr.b limIFG
jmp EndWDT
set_1 mov.b #01h,limIFG
EndWDT reti
;-------------------------------------------
; ADC interrupt AD中断
;----------------------------------
ADC_ISR bic #LPM3,0(SP)
add &ADC12IV,PC
reti ;no
reti ;no
reti ;no
jmp ISR_A0 ;no
reti ;no
reti ;no
reti ;no
reti ;no
reti ;no
reti ;no
reti ;no
reti ;no
reti ;no
reti ;no
reti ;no
reti ;no
reti ;no
reti ;no
reti ;no
ISR_A0
Loop bit #ADC12BUSY,&ADC12CTL1
jnz Loop
bic #ENC,&ADC12CTL0
inc.b ADcount
cmp.b #1,ADcount
jeq END_ADC
cmp.b #12,ADcount ;AD每进行11次才被计算,而且第一次AD转换值将被去掉
;cmp.b #6,ADcount
jlo Loop1
clr.b ADcount
call #DISADC
clr ADCvalue
jmp END_ADC
Loop1 add &ADC12MEM0,ADCvalue
END_ADC reti
;---------------------------------------------------------------------------
TAX_ISR ;ISR for CCR1 没用到
;---------------------------------------------------------------------------
CCR1_ISR bic #LPM0,0(SP) ;exit LPM0 on reti
add &TAIV,PC ;
reti ;no interrupt
reti ;CCIFG1
reti ;CCIFG2
reti ;no used
reti ;no used
mov.b #0AAh,&TOVES
;reti ;jmp TAIFG
reti ;no used
reti ;no used
;-----------------------------------------------------------------------------------------------
;已经转换完为BCD码后存于R8,R9里(5位十进制,R9只用到低字节的低4位,低字节的高4位和高字节以后再用)
;------------------------------------------------------------------------------------------------
outLCD mov R8,R11
and #000Fh,R11
mov.b LCD_Tab(R11),LCDM11
mov R8,R11
rra.b R11
rra.b R11
rra.b R11
rra.b R11
and #000Fh,R11
mov.b LCD_Tab(R11),LCDM12
swpb R8
mov R8,R11 ;
and #000Fh,R11
mov.b LCD_Tab(R11),LCDM13
mov R8,R11
rra.b R11
rra.b R11
rra.b R11
rra.b R11
and #000Fh,R11
mov.b LCD_Tab(R11),LCDM14
bis.b #080h,LCDM14
;mov R9,R11
;and #000Fh,R11
;mov.b LCD_Tab(R11),LCDM15
ret
;-----------------------------------------------------------------
;BCD-convBIN 3位BCD码 转换CN1,2,3,5,6,7 这几个变量 结果放入TMPF1和TMPF2
;------------------------------------------------------------------
BCDtoBIN clr TMPF1
clr TMPF2
mov.b CN3,R11
mov.b #100,R12
call #D_MUL8
mov R14,TMPF1 ;CN3x100
mov.b CN2,R11
mov.b #10,R12
call #D_MUL8 ;CN2x10
add TMPF1,R14 ;
mov.b CN1,R12
add R12,R14
mov R14,TMPF1 ;(下错,应该为上限)限保存在TMPF1里
mov.b CN7,R11
mov.b #100,R12
call #D_MUL8
mov R14,TMPF2 ;CN3x100
mov.b CN6,R11
mov.b #10,R12
call #D_MUL8 ;CN2x10
add TMPF2,R14
mov.b CN5,R12
add R12,R14
mov R14,TMPF2 ;(上错)下限保存在TMPF2里
ret
;---------------------------------------------------
;BIN-convBCD R5为待转换的二进制数 INPUT R5
;--------------------------------------------------
BINtoBCD mov #16,R10
clr R8
clr R9
xiaoyu rla R5
dadd R8,R8
dadd R9,R9
dec R10
jnz xiaoyu
ret
;---------------------------------------------------------------
;入口:R11xR12(16x16) 出口:R15(H字),R14(L字) yi jing OK!
;===============================================================================
D_MUL16 clr R14
clr R15
MACU clr R9
mov #1,R10
MPY2 bit R10,R11
jz MPY1
add R12,R14
addc R9,R15
MPY1 rla R12
rlc R9
rla R10
jnc MPY2
ret
;-------------------------------------------------------------------------------
; 入口:R11 x 12(8x8) 结果:R14 ,需要用到的R10 yi jing OK!
;-------------------------------------------------------------------------------
D_MUL8
MPYU8 clr R14
MACU8 mov #1,R10
L$002 bit R10,R11
jz L$01
add R12,R14
L$01 rla R12
rla.b R10
jnc L$002
ret
;---------------------------------------------------------------------------------
;入口参数(32位/16位):R13和R12为除数,R11为被除数,出口参数:R14为商
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -