📄 车载终端汇编程序.asm
字号:
movx @dptr,a
vector:mov dpl,r1
mov dph,r2
inc dptr
inc dptr
do_vector:mov r0,#00h
movx a,@dptr
inc dptr
cjne a,#2ch,do_vector ;找到速度段
vector0:movx a,@dptr
clr c ;判断是不是逗号
subb a,#2ch
jz vector11
clr c ;把ascii码变成数字
movx a,@dptr
subb a,#30h
jz vector11
mov r0,a ;数据第1位不是零
mov 73h,a ;把数据放入(73h),以便进行校验码的计算
inc dptr
movx a,@dptr
clr c ;判断是不是句号
subb a,#2eh
jz vector1
clr c ;把ascii码变成数字
movx a,@dptr
mov 74h,a ;把数据放入(74h),以便进行校验码的计算
subb a,#30h
mov b,a ;数据第2位进行加法
clr a
mov a,r0
mov r0,b
mov b,#0ah
mul ab
add a,r0
mov r0,a
inc dptr
movx a,@dptr
clr c ;判断是不是句号
subb a,#2eh
jz vector1
clr c ;把ascii码变成数字
movx a,@dptr
mov 75h,a ;把数据放入(75h),以便进行校验码的计算
subb a,#30h
mov b,a ;数据第3位进行加法
clr a
mov a,r0
mov r0,b
mov b,#0ah
mul ab
add a,r0
mov r0,a
inc dptr ;将速度的小数位数据放入(76h),以便进行校验码的计算
inc dptr
movx a,@dptr
mov 76h,a
dec dpl
dec dpl
sjmp vector1
vector11:mov 73h,#00h ;把数据放入(73h),以便进行校验码的计算
mov 74h,#00h ;把数据放入(74h),以便进行校验码的计算
vector1:mov a,r0
cjne a,#80h,vector2
mov r1,dpl ;结果为80h时,赋值#7eh,80h对Hbit的影响
mov r2,dph
mov dptr,#0107h
movx a,@dptr
add a,#01h
movx @dptr,a
mov dpl,r1
mov dph,r2
mov a ,#7eh
vector2:jnz vector3
mov r1,dpl ;结果为00h时,赋值#7fh,80h对Hbit的影响
mov r2,dph
mov dptr,#0107h
movx a,@dptr
add a,#01h
movx @dptr,a
mov dpl,r1
mov dph,r2
mov a ,#7fh
vector3:mov r1,dpl
mov r2,dph
mov dptr,#0110h
movx @dptr,a
direct:mov dpl,r1
mov dph,r2
do_direct:movx a,@dptr
inc dptr
cjne a,#2ch,do_direct ;找到方向段
direct0:mov r0,#00h
mov r3,#00h
movx a,@dptr
clr c ;判断是不是逗号
subb a,#2ch
jz direct1
clr c ;把ascii码变成数字
movx a,@dptr
subb a,#30h
jz direct1
mov r0,a ;数据第1位不是零
inc dptr
movx a,@dptr
clr c ;判断是不是句号
subb a,#2eh
jz direct1
clr c ;把ascii码变成数字
movx a,@dptr
subb a,#30h
mov b,a ;数据第2位进行加法
clr a
mov a,r0
mov r0,b
mov b,#0ah
mul ab
add a,r0
mov r0,a
inc dptr
movx a,@dptr
clr c ;判断是不是句号
subb a,#2eh
jz direct1
clr c ;把ascii码变成数字
movx a,@dptr
subb a,#30h
mov b,a ;数据第3位进行加法
clr a
mov a,r0
mov r0,b
mov b,#0ah
mul ab
add a,r0
mov r0,a
mov a,b
jz direct1
mov r3,#55h
mov a,r0
inc a
mov r0,a
direct1:mov a,r0
mov b,#03h
div ab
inc a
add a,r3
mov r1,dpl
mov r2,dph
mov dptr,#0111h
movx @dptr,a
day:mov dpl,r1
mov dph,r2
do_day:movx a,@dptr
inc dptr
cjne a,#2ch,do_day ;找到日期段
mov r0,#00h
date:movx a,@dptr
clr c
subb a,#30h ;把十位ascii码变成数字
mov b,#0ah ;十位乘以10
mul ab
mov r0,a ;把结果放入r0
inc dptr
movx a,@dptr
clr c
subb a,#30h ;把个位ascii码变成数字
add a,r0
mov r1,dpl
mov r2,dph
mov dptr, #0103h
movx @dptr,a
month:mov dpl,r1
mov dph,r2
inc dptr
movx a,@dptr
clr c
subb a,#30h ;把十位ascii码变成数字
mov b,#0ah ;十位乘以10
mul ab
mov r0,a ;把结果放入r0
inc dptr
movx a,@dptr
clr c
subb a,#30h ;把个位ascii码变成数字
add a,r0
mov r1,dpl
mov r2,dph
mov dptr, #0102h
movx @dptr,a
years:mov dpl,r1
mov dph,r2
inc dptr
movx a,@dptr
clr c
subb a,#30h ;把十位ascii码变成数字
mov b,#0ah ;十位乘以10
mul ab
mov r0,a ;把结果放入r0
inc dptr
movx a,@dptr
clr c
subb a,#30h ;把个位ascii码变成数字
add a,r0
mov r1,dpl
mov r2,dph
mov dptr, #0101h
movx @dptr,a
number_ver:mov a,#42h
mov dptr,#0100h
movx @dptr,a
check_code:mov r0,#62h
mov r1,#13h
clr a
check_code1:add a,@r0
inc r0
djnz r1,check_code1
mov dptr,#0112h
movx @dptr,a
mov dptr,#0110h
movx a,@dptr
inc a
jz check_code2
mov dptr,#0112h
movx a,@dptr
add a,75h
add a,76h
movx@dptr,a
check_code2:ret
time:mov r0,#064h ;准许读取gps信息一百次
mov ie,#90h
mov ip,#10h
time1:mov r1,#0c8h ;每半个小时读取gps信息一次
time2:mov r2,#0b4h
time3:jnb tf0,time3
clr tf0
djnz r1,time3
djnz r2,time2
mov 60h,r0 ;将r0的数据进行堆栈保护
push 60h
lcall r_gps
lcall do_gps
pop 60h
mov r0,60h
djnz r0,time1
sjmp $
save_sm:mov r0,#00h
mov r1,#00h
save_sm1:mov dptr,#00b0h
mov a,dpl
add a,r0
mov dpl,a
movx a,@dptr
mov b,a
inc r0
mov dptr,#0150h
mov a,dpl
add a,r1
inc r1
mov dpl,a
mov a,b
movx @dptr,a
cjne a,#0dh,save_sm1
do_sm0:mov dptr,#00b0h ;将收到的短信进行解码
clr c
do_sm01:movx a,@dptr
cjne a,#0dh,do_sm02 ;判断是否为回车键
sjmp do_sm1
do_sm02:cjne a,#2ch,do_sm03
mov a,#3eh ;为逗号进行处理
sjmp trans0
do_sm03:cjne a,#2eh,do_sm04
mov a,#3fh ;为句号进行处理
sjmp trans0
do_sm04:cjne a,#3ah,do_sm05
do_sm05:jnc do_sm06
clr c
subb a,#30h ;为数字进行处理
sjmp trans0
do_sm06:cjne a,#5bh,do_sm07
do_sm07:jnc do_sm08
clr c
subb a,#37h ;为大写字母进行处理
sjmp trans0
do_sm08:subb a,#3dh ;为小写字母进行处理
trans0:movx @dptr,a
inc dptr
sjmp do_sm01
do_sm1:mov a,dpl
subb a,#0b1h
mov r0,a ;字节数
mov dptr,#00b0h
do_sm11:movx a,@dptr ;将字节的低三位和高三位交换
rl a
mov r1,#61h
mov 61h,#00h
xchd a,@r1
swap a
mov b,a
mov a,@r1
rl a
rl a
add a,b
movx @dptr,a
inc dptr
djnz r0,do_sm11
do_sm2:mov a,dpl
subb a,#0b0h
mov dptr,#00b0h
mov r0,a ;字节数
mov r1,a
do_sm21:movx a,@dptr ; 6 to 7 转换
rl a
movx @dptr,a
inc dptr
movx a,@dptr
mov c,acc.5
clr acc.5
movx @dptr,a
dec dpl
movx a,@dptr
mov acc.0,c
movx @dptr,a
inc dptr
djnz r0,do_sm21
dec r1
mov a,r1
mov r0,a
mov a,dpl
clr c
subb a,r0
mov dpl,a
cjne r1,#01h,do_sm21
;以下只是初步的程序,功能需要进一步完善和添加
judge_tpye:mov dptr,#00b4h
movx a,@dptr
tpye1:cjne a,#01h,tpye2 ;对要求类型进行判断
inc dptr
movx a,@dptr
cjne a,#11h,tpye2
sjmp tran_type0151
tpye2:reti
tran_type0151:mov a,#51h
mov dptr,#00b5h
movx @dptr,a
link_data0:mov dptr,#00b0h ;将(00b0)到(00c1)的数据和(0010)的数据通过(00ff)连接
mov r1,#11h
mov r0,#3eh
link_data1:movx a,@dptr
mov b,a
mov a,dpl
add a,r0
mov dpl,a
mov a,b
movx @dptr,a
mov a,dpl
clr c
subb a,r0
mov dpl,a
inc dptr
djnz r1,link_data1
link_data2:mov dptr,#00ffh
mov a,#01h
movx @dptr,a
mov r0,#00h
mov r1,#24h
mov dptr,#00eeh ;求校验码
movx a,@dptr
link_data3:mov b,a
inc dptr
movx a,@dptr
add a,b
jnc link_data4
inc r0
link_data4:djnz r1,link_data3
add a,r0
jbc acc.7,link_data5
link_data5:cjne a,#00h,link_data6
mov a,#0ffh
link_data6:mov dptr,#0113h
movx @dptr,a
do_7_6_0:mov dptr,#00eeh ;7/6编码
mov r0,#2dh
mov r1,#2dh
mov r2,#00h
mov r3,#00h
do_7_6_10:clr c ;把七位ascii变成六位代码
do_7_6_11:movx a,@dptr
rl a
rrc a
rrc a
movx @dptr,a
inc dptr
djnz r0,do_7_6_11
mov a,r1
mov r0,a
inc r2
mov a,r2
mov r3,a
mov dptr,#00eeh
do_7_6_12:inc dptr
djnz r3,do_7_6_12
djnz r1,do_7_6_10
do_7_6_20:mov a,dpl
add a,#12h
mov r0,a
mov dptr,#00eeh
do_7_6_21:movx a,@dptr ;将字节的低三位和高三位交换
rl a
mov r1,#61h
mov 61h,#00h
xchd a,@r1
swap a
mov b,a
mov a,@r1
rl a
rl a
add a,b
movx @dptr,a
inc dptr
djnz r0,do_7_6_21
do_7_6_3:mov a,dpl
add a,#12h
mov r0,a
mov dptr,#00eeh
do_7_6_30:movx a,@dptr
clr c
cjne a,#09,do_7_6_31
add a,#30h
sjmp end_7_6
do_7_6_31:jnc do_7_6_32
add a,#30h
sjmp end_7_6
do_7_6_32:cjne a,#23h,do_7_6_33
add a,#37h
sjmp end_7_6
do_7_6_33:jnc do_7_6_34
add a,#37h
sjmp end_7_6
do_7_6_34:cjne a,#3dh,do_7_6_35
add a,#3dh
sjmp end_7_6
do_7_6_35:jnc do_7_6_36
add a,#3dh
sjmp end_7_6
do_7_6_36:cjne a,#3eh,do_7_6_37
subb a,#12h
sjmp end_7_6
do_7_6_37:cjne a,#3fh,end_7_6
add a,#11h
end_7_6:movx @dptr,a
inc dptr
djnz r0,do_7_6_30
trans_sm0:mov dptr,#00bch ;将at+cmgs="和电话号码连接
mov a,#61h
movx @dptr,a
inc dptr
mov a,#74h
movx @dptr,a
inc dptr
mov a,#2bh
movx @dptr,a
inc dptr
mov a,#63h
movx @dptr,a
inc dptr
mov a,#6dh
movx @dptr,a
inc dptr
mov a,#67h
movx @dptr,a
inc dptr
mov a,#73h
movx @dptr,a
inc dptr
mov a,#3dh
movx @dptr,a
inc dptr
mov a,#22h
movx @dptr,a
mov dptr,#00d0h
mov a,#22h
movx @dptr,a
inc dptr
mov a,#0dh
movx @dptr,a
trans_sm1:mov dptr,#00bch ;发送at+cmgs=" "
movx a,@dptr
mov sbuf,a
mov r0,#16h
trans_sm2:jnb ti,trans_sm2
inc dptr
clr ti
movx a,@dptr
mov sbuf,a
djnz r0,trans_sm2
trans_sm3:jnb ti,trans_sm3
clr ti
mov ie,#90h
reti
trans_sm4:mov r0,#64h
mov r1,#20h
trans_sm40:djnz r0,trans_sm40 ;发送短信内容
mov r0,#64h
djnz r1,trans_sm40
clr ri
trans_sm41:mov dptr,#00eeh
movx a,@dptr
mov sbuf,a
mov r0,#2dh
trans_sm42:jnb ti,trans_sm42
inc dptr
clr ti
movx a,@dptr
mov sbuf,a
djnz r0,trans_sm42
trans_sm43:jnb ti,trans_sm43
clr ti
mov a,#1ah
mov sbuf,a
trans_sm44:jnb ti,trans_sm44
clr ti
mov ie,#90h
reti
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -