;------------------------------------------------------------------------------
main ORG 01600h ; Program Start
;------------------------------------------------------------------------------
RESET mov #0A00h,SP ; Initialize stackpointer
StopWDT mov #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog
call #init_xt2 ;初始化xt2,XT2=mclk=smclk
call #init_ram ;清RAM
;初始化定时器A 显示
mov.w #TASSEL1+TACLR+MC0,&TACTL ; ACLK, clear TAR
mov.w #CCIE,&TACCTL0 ; CCR0 interrupt enabled
mov.w #3200,&TACCR0
;初始化端口
SetupP1 bis.b #0f8h,&P1DIR ; 键盘,高5位输出,低3位输入
bis.b #0c0h,&P2DIR ; 分合输出
bis.b #0c0h,&P2OUT
bis.b #1fh,&P3DIR ; 4个指示灯及收发控制
bis.b #07h,&P3OUT
bis.b #BIT6+BIT7,&P3SEL ; 串口
bis.b #0ffh,&P4DIR ; 液晶数据线
bis.b #0ffh,&P4OUT
bis.b #0F0h,&P5DIR ; 液晶控制及I2c
bis.b #0f0h,&P5OUT
call #xscs
eint ; Enable interrupts
mainloop nop
jmp mainloop
yans5 cmp #6,r6
jhs yans52
inc r6
yans53 mov.b #00h,cs1
ret
yans52 clr r6
mov.b #01h,cs1
ret
;------------------------------------------------------------------------------
key1; 行扫描
;------------------------------------------------------------------------------
mov.b &P1IN,al
;mov.b al,R5
and.b #07h,al
cmp.b #06h,al
jne qw1
mov.b #01h,ch
call #key2
jmp qwf
qw1 cmp.b #05h,al
jne qw2
mov.b #02h,ch
call #key2
add.b #05h,jx
jmp qwf
qw2 cmp.b #03h,al
jne qwf
mov.b #04h,ch
call #key2
add.b #10h,jx
qwf ret
;------------------------------------------------------------------------------
key2; 列扫描
;------------------------------------------------------------------------------
clr jx
clr.b cl
mov.b #08h,bh
qe2 bis.b #0f8h,xl
mov.b bh,bl
xor.b #0ffh,bl
and.b bl,xl
mov.b xl,&P1OUT
mov.b &P1IN,al
and.b ch,al
cmp.b #00h,al
jne qe1
mov.b cl,jx
jmp qef
qe1 inc.b cl
rla.b bh
cmp.b #06h,cl
jlo qe2
qef ret
;------------------------------------------------------------------------------
TA0_ISR dint ; 定时器中断程序
cmp.b #01h,qs2
jeq ycu1
bic.b #BIT3+BIT4+BIT5+BIT6+BIT7,&P1OUT
mov.b &P1IN,dll
bic.b #BIT3+BIT4+BIT5+BIT6+BIT7,dll
cmp.b #07h,dll
jeq ycu1
call #keys ;有按键按下
kef1 mov.b #01h,qs2
jmp keee
ycu1 clr.b qs2
bit.b #01h,cs3
jz keef
jmp keee
keef mov.b #080h,yl ;显示主界面
call #dizhi
mov.b #08h,yl
call #suju1
mov.b #08h,yl
call #suju1
mov.b #08h,yl
call #suju1
keee eint
reti
keys push r5 ;键盘操作
push ax
push bx
push dx
clr r5
bic.b #04h,&P3OUT
bic.b #02h,&P3OUT
bis.b #01h,cs3
call #key1 ;键盘扫描
cmp.b #08h,cs1
jhs ke3
mov.b #01h,cs1
cmp.b #03h,cs1
jhs ke1
cmp.b #01h,cs1
jne uio2
cmp.b #01h,jx
jne ke2
call #xsi1 ;键盘设置界面
uio21 mov.b #0c5h,yl ;输入密码
call #dizhi
mov.b jx,yl
call #suju1
mov.b #02h,cs1
br #kef
uio2 cmp.b #02h,cs1
jne ke2
cmp.b #01h,jx
jne ke2
mov.b #0c6h,yl
call #dizhi
mov.b jx,yl
call #suju1
mov.b #03h,cs1
k22 br #kef
ke2 br #kee
ke1 cmp.b #04h,cs1
jhs ke3
cmp.b #05h,jx
jne ke2
mov.b #0c7h,yl
call #dizhi
mov.b jx,yl
call #suju1
mov.b #04h,cs1
clr.b cs9
clr.b csa
br #kef
ke3 mov.b #08h,cs1
cmp.b #00h,cs9
jeq ke5
jmp keb
ke5 cmp.b #01h,csa
jeq ke6
cmp.b #11h,jx
jeq ke7 ;是功能键则进入设置界面
br #kef
ke7 mov.b #01h,csa ;csa function sign
call #xsi1
clr.b cs9
br #kef
ke6 cmp.b #12h,jx
jeq kea ;第一次确认键后输入的数据送到QS3中
cmp.b #00h,qs3 ;two times data input sign
jne kea1
cmp.b #11h,jx
jeq kea3
cmp.b #10h,jx
jeq kea3 ;是功能键或小数点键则返回
mov jx,ix
mov.b jx,yl
mov.b #85h,yl
call #dizhi
mov.b jx,yl
call #suju1
mov.b #01h,qs3
kea3 br #kef
kea1 cmp.b #01h,qs3
jne kea2
cmp.b #11h,jx
jeq kea4
cmp.b #10h,jx
jeq kea4
mov.b #02h,qs3
rla ix
rla ix
rla ix
rla ix
add jx,ix
mov.b jx,yl
call #suju1
kea4 br #kef
kea2 clr.b qs3
mov.b #85h,yl ;进入具体设置项
call #dizhi
mov.b #20h,yl
call #suju
call #suju
br #kef
kea mov.b il,cs9
br #kef
keb cmp.b #01h,cs9 ;close
jne kk1
br #kef ;11
kk1 cmp.b #02h,cs9 ;open
jne kk2
br #kef ;21
kk2 cmp.b #03h,cs9 ;t1
jne kec
br #kef ;31
kec cmp.b #04h,cs9 ;t2
jne ked
br #kef ;41
ked cmp.b #05h,cs9 ;t3
jne keg
br #kef ;51
keg cmp.b #06h,cs9 ;n(1-20)
jne keh
br #kef ;61
keh cmp.b #07h,cs9 ;n(1-3)
jne kei
br #kef ;71
kei cmp.b #08h,cs9 ;td
jne kej
br #kef ;81
kej cmp.b #09h,cs9 ;gd1
jne kek
br #kef ;91
kek cmp.b #10h,cs9 ;gd2
jne kexdl
br #kef ;seta1
kexdl cmp.b #11h,cs9 ;小电流
jne keday
br #kef ;111
keday cmp.b #12h,cs9 ;YY-MM-DD
jne ketime
br #kef ;121
ketime cmp.b #13h,cs9 ;HH-MM-SS
jne kegzd
br #kef ;131
kegzd cmp.b #14h,cs9 ;合闸到故障点
jne kexssd
br #kef ;141
kexssd cmp.b #15h,cs9 ;限时速断
jne ke16
br #kef ;151
ke16 cmp.b #16h,cs9 ;单侧加压延时合闸时间
jne ke17
br #kef ;161
ke17 cmp.b #17h,cs9 ;失压分闸时间
jne ke18
br #kef ;171
ke18 cmp.b #18h,cs9 ;电源侧设置00 01 10 11
jne ke19
br #kef ;181
ke19 cmp.b #19h,cs9 ;重合后加速投切
jne ke20
br #kef ;191
ke20 cmp.b #20h,cs9 ;故障脉冲监测投切
jne kea21
br #kef ;201
kea21 cmp.b #21h,cs9 ;子站号
jne ke22
br #kef ;211
ke22 cmp.b #22h,cs9 ;波特率
jne ke23
br #kef ;221
ke23 cmp.b #23h,cs9 ;显示故障记录
jne ke25
br #kef ;231
ke25 cmp.b #25h,cs9 ;环网投切
jne ke26
br #kef ;251
ke26 cmp.b #26h,cs9 ;关机设置
jne ke35
br #kef ;261
ke35 cmp.b #35h,cs9 ;生产日期
jne kel
br #kef ;351
kel cmp.b #55h,cs9 ;55,66,77,88,99退出
jne keu
jmp kez
keu cmp.b #66h,cs9
jne kev
jmp kez
kev cmp.b #77h,cs9
jne kew
jmp kez
kew cmp.b #88h,cs9
jne kex
jmp kez
kex cmp.b #99h,cs9
jeq kez
br #kef
kez br #kee
kee clr.b cs1
clr r5
clr.b cs3
clr.b cs4
clr.b cs5
clr.b cs6
clr.b cs9
clr.b csa
clr ix
clr hx
call #qping
bis.b #04h,&P3OUT
bis.b #02h,&P3OUT
jmp kef
kec1 call #xsi1
clr.b qs3
clr.b csa
clr.b cs4
clr.b cs5
clr.b cs6
clr.b cs9
clr ix
clr hx
kef pop dx
pop bx
pop ax
pop r5
ret