📄 ztsystem_normal.asm
字号:
include Ht46r24.inc
ORG 0000H
JMP MAIN
ORG 00CH
JMP TIM1
ORG 0100H
MAIN:
;***********定时器初始化********************
MOV A,0B0H
MOV TMR1L,A
MOV A,3CH
MOV TMR1H,A ;装载定时器初始值。
MOV A,80H
MOV TMR1C,A ;设置TIMER1为定时模式。
;************初始化结束**********************
;************显示部分计数值******************
jixu: MOV A,200
MOV [88H],A ;定时中断次数200次.
;***************结束*************************
;***************接收主程序*******************
receive:CLR PCC
set pc.2
call delay104
WAITF: set pcc
MOV A,Pc
AND A,04H ;取出接收到的位
MOV [45H],A ;45H保存接收到的数据
SZ [45H] ;判断接收到的数据是否为0
JMP WAITF ;不为0继续等待
CALL DELAY52 ;为0等待52us再判断确认
MOV A,Pc
AND A,04H
MOV [46H],A
SZ [46H] ;再次确认是否收到0
JMP WAITF
MOV A,07H
MOV [47H],A ;47h用于控制一共接收8次
CALL DELAY104 ;确实收到0继续接收数据
MOV A,Pc
AND A,04H
MOV [48H],A ;48H用于保存接收到的数据
NOP
NOP
F3: CALL DELAY100
RR [48H]
MOV A,PC
AND A,04H
ADDM A,[48H]
SDZ [47H]
JMP F3
CORRECT:RR [48H]
RR [48H]
rr [48h]
;********接收数据结束,置于48h单元***********
mov a,[48h]
mov [4fh],a
sz [4fh]
jmp right
jmp waitf
;************判断是否上下行是否符合**********
right: mov a,[48h]
and a,40h
mov [4bh],a
sz [4bh]
jmp waitf ;不是本站车,跳回接收主程序...1出错,0正确.
jmp dui ;是本站车
;****************奇偶校验******************
dui: mov a,[48h]
mov [49h],a
mov a,08h
mov [4ah],a ;循环计数值.
clr [50h] ;8位相加的值存放单元.
next0: mov a,01h
and a,[49h]
addm a,[50h]
rr [49h]
sdz [4ah]
jmp next0
mov a,01h
and a,[50h]
mov [51h],a
sz [51h]
jmp waitf ;不满足奇偶校验,返回继续接收.
jmp send ;校验无误,发送数据.
;************发送程序*************************
send: mov a,[48h]
mov [41h],a ;将接收到的数据存于41h
clr pcc
set pc.0 ;先将端口置1,除去干扰.
call delay104
step1: mov a,09h ;发送8次,要用9,先减1再判断是否为0.
mov [40h],a ;40h作为发送数据计数器.
clr pc.0 ;发送起始位.
call delay104
step2: mov a,[41h]
and a,01h
mov [42h],a
rr [41h]
sdz [40h]
jmp step3
jmp step4 ;数据发送完成.
step3: sz [42h]
jmp num1
jmp num0
num1: set pc.0
call delay97
jmp step2
num0: clr pc.0
call delay97
jmp step2
step4: set pc.0
call delay104
call delay104 ;少了这条指令会出错.
;********发送数据结束*******************
;*************路线查询******************
mov a,[48h]
and a,0fh
MOV [81H],A ;取出要显示的数值的低四位.
mov a,18
mov [70h],a ;循环次数为显示次数加2.显示部分....
mov a,00h
mov [85h],a ;从0开始查询.
STEP5: mov a,[85h]
xor a,[81h]
mov [82h],a
SDZ [70H]
jmp next
jmp done
next: SZ [82H]
JMP STEP7
mov a,[85h]
CALL TABLE
clr pbc
mov pb,a
SET EMI
SET ET1I
SET T1ON
jmp done
STEP7: INC [85h]
JMP STEP5
done: jmp jixu
;************延时104us子程序***************
DELAY104: MOV A,68
MOV [60H],A;
NOP;
LOOP2: SDZ [60H];
JMP LOOP2
RET
;************延时52ms子程序****************
DELAY52: MOV A,33
MOV [61H],A
NOP
NOP
LOOP1: SDZ [61H];
JMP LOOP1;
RET;
;************延时101us子程序***************
DELAY100: MOV A,66
MOV [62H],A;
NOP;
LOOP3: SDZ [62H];
JMP LOOP3
RET
;************延时97us子程序***************
DELAY97: MOV A,63
MOV [63H],A;
NOP;
LOOP4: SDZ [63H];
JMP LOOP4
RET
;************定时器1中断子程序**************
TIM1: SDZ [88H]
JMP OUT
MOV A,0FFH
MOV PB,A
OUT: RETI
;***********表格区********
TABLE: ADDM A,PCL
ret a,0c0h
RET A,0f9H
RET A,0a4H
RET A,0b0H
RET A,99H
RET A,92H
ret a,82h
ret a,0f8h
ret a,80h
ret a,90h
ret a,88h
ret a,83h
ret a,0c6h
ret a,0a1h
ret a,86h
ret a,8eh
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -