📄 17khz150ms.asm
字号:
EOR PreAvailY1L,00H;
BNZ LOOKUPTABLE
LDA AvailY1H,00H;
EOR PreAvailY1H,00H;
BNZ LOOKUPTABLE
;******************************
JMP SYSINI
ENDIF
LOOKUPTABLE:
LDA AvailY1H,00H;如果只有一个有用数据则直接初始化
BA3 SYSINI
LDA AvailY0H,00H;
BA3 SYSINI
LDA AvailX1H,00H;
BA3 SYSINI
LDA AvailX0H,00H;
BA3 SYSINI
IF 0
LDA AvailX0L,00H;
STA PreAvailX0L,00H;
LDA AvailX0H,00H;
STA PreAvailX0H,00H;
LDA AvailX1L,00H;
STA PreAvailX1L,00H;
LDA AvailX1H,00H;
STA PreAvailX1H,00H;
LDA AvailY0L,00H;
STA PreAvailY0L,00H;
LDA AvailY0H,00H;
STA PreAvailY0H,00H;
LDA AvailY1L,00H;
STA PreAvailY1L,00H;
LDA AvailY1H,00H;
STA PreAvailY1H,00H;
ENDIF
LDI Tmp7,0001B;
LDI Tmp8,0001B;
GOMAINCHECK:;将x1的比较数据放如availx1l
LDI Tmp6,00H;
ADIM Tmp6,00H;
LDA AvailX1L,00H;
STA Tmp0,00H;存放路数的低四位
LDA AvailX1H,00H;
STA Tmp1,00H;存放路数的高四位
LDI Tmp3,00H;存放便移后的地址
LDI Tmp4,00H;
LDI Tmp5,00H;
LDI Tmp2,06H;
NOP
NOP
CALL GETOFFSET
NOP
LDI DPL,0000B
LDI DPM,0000B;基地址100h
LDI DPH,0010B;
LDA Tmp3,00H;
ADDM DPL,00H;这里由于存放的数据地址选的在100h-17FH,所以最高位不溢出
LDI Tmp6,00H;
LDA Tmp4,00H;
ADCM DPM,00H; 最高位没做处理
LDA Tmp8,00H;
BA0 CONTINUECMPx1
BA1 DPADD22
BA2 DPADD44
LDI SysInitFlg,02H;
JMP SYSINI
DPADD22:
ADIM DPL,02H;
LDI Tmp6,00H;
ADCM DPM,00H; 最高位没做处理
JMP CONTINUECMPx1
DPADD44:
ADIM DPL,04H;
LDI Tmp6,00H;
ADCM DPM,00H; 最高位没做处理
JMP CONTINUECMPx1
CONTINUECMPx1:
LDI Tmp6,00H;
ADIM Tmp6,00H;
LDA INX,00H;
STA LINEX1_0L,00H;
LDI Tmp6,00H;
ADIM DPL,01H;第一个数据放如linex1——0中
LDI Tmp6,00H;
ADCM DPM,00H;
LDA INX,00H;
STA LINEX1_0H,00H;
GOCHECK:
LDA AvailX0L,00H;
STA Tmp0,00H;存放路数的低四位
LDA AvailX0H,00H;
STA Tmp1,00H;存放路数的高四位
LDI Tmp3,00H;存放便移后的地址
LDI Tmp4,00H;
LDI Tmp5,00H;
LDI Tmp2,06H;
NOP
NOP
CALL GETOFFSET
NOP
LDI DPL,0000B
LDI DPM,0000B;基地址100h
LDI DPH,0010B;
LDA Tmp3,00H;
ADDM DPL,00H;这里由于存放的数据地址选的在100h-17FH,所以最高位不溢出
LDI Tmp6,00H;
LDA Tmp4,00H;
ADCM DPM,00H; 最高位没做处理
LDA Tmp7,00H;
BA0 CONTINUECMPx0
BA1 DPADD2
BA2 DPADD4
BA3 NEXTPOSITION
LDI SysInitFlg,03H;
JMP SYSINI
DPADD2: LDI Tmp6,00H;
ADIM Tmp6,00H;
LDI Tmp6,00H;
ADIM DPL,02H;
LDI Tmp6,00H;
ADCM DPM,00H; 最高位没做处理
JMP CONTINUECMPx0
DPADD4:
LDI Tmp6,00H;
ADIM Tmp6,00H;
LDI Tmp6,00H;
ADIM DPL,04H;
LDI Tmp6,00H;
ADCM DPM,00H; 最高位没做处理
JMP CONTINUECMPx0
CONTINUECMPx0:
LDA INX,00H;
STA LINEX0_0L,00H;
LDI Tmp6,00H;
ADIM DPL,01H;第一个数据放如linex0——0中
LDI Tmp6,00H;
ADCM DPM,00H;
LDI Tmp6,00H;
LDA INX,00H;
STA LINEX0_0H,00H;
CHOOSEY:
LDI Tmp0,00H;存放相减结果
LDI Tmp1,00H;
LDA LINEX0_0L,00H;
STA Tmp2,00H;
LDA LINEX0_0H,00H;
STA Tmp3,00H;
LDA LINEX1_0L,00H;
STA Tmp4,00H;
LDA LINEX1_0H,00H;
STA Tmp5,00H;
CHECKX0X1:
NOP
CALL SUB8BITS
NOP
LDA Tmp9,00H;
BAZ EXCHANGE
LDA Tmp1,00H;
BNZ NEXTPOSITION ;判断下一个数据去
LDI Tmp6,00H;
ADIM Tmp6,00H
LDI Tmp6,00H;
SBIM Tmp0,01H;如果是1的话
BAZ POSITIONOK ;完成判断
JMP NEXTPOSITION
EXCHANGE:
LDI Tmp0,00H;存放相减结果
LDI Tmp1,00H;
LDA LINEX1_0L,00H;
STA Tmp2,00H;
LDA LINEX1_0H,00H;
STA Tmp3,00H;
LDA LINEX0_0L,00H;
STA Tmp4,00H;
LDA LINEX0_0H,00H;
STA Tmp5,00H;
JMP CHECKX0X1
NEXTPOSITION:
LDA Tmp7,00H;
BA0 TOX0_1
BA1 TOX0_2
JMP TOX1
TOX0_1:
LDI Tmp7,0010B;
NOP
JMP GOCHECK
TOX0_2:
LDI Tmp7,0100B;
NOP
JMP GOCHECK
TOX1:
LDA Tmp8,00H;
BA0 TOY0_1
BA1 TOY0_2
NOP
LDI SysInitFlg,04H;
JMP SYSINI
TOY0_1:
LDI Tmp8,0010B;
LDI Tmp7,0001B;
NOP
JMP GOMAINCHECK
TOY0_2:
LDI Tmp8,0100B;
LDI Tmp7,0001B;
JMP GOMAINCHECK
POSITIONOK:
NOP
;******找出x线的线坐标***********************
LOOKUPTABLEXX:
LDI Tmp7,0001B;
LDI Tmp8,0001B;
GOMAINCHECKXX:;将x1的比较数据放如availx1l
LDI Tmp6,00H;
ADIM Tmp6,00H;
LDI Tmp6,00H;
SBI AvailY1L,0FH;
STA Tmp0,00H;存放路数的低四位
LDI Tmp6,00H;
SBC AvailY1H,00H;
STA Tmp1,00H;存放路数的高四位
LDI Tmp3,00H;存放便移后的地址
LDI Tmp4,00H;
LDI Tmp5,00H;
LDI Tmp2,04H;
NOP
NOP
CALL GETOFFSET
NOP
LDI DPL,1100B
LDI DPM,0101B;基地址15ch
LDI DPH,0010B;
LDA Tmp3,00H;
ADDM DPL,00H;这里由于存放的数据地址选的在100h-17FH,所以最高位不溢出
LDI Tmp6,00H;
LDA Tmp4,00H;
ADCM DPM,00H; 最高位没做处理
LDA Tmp8,00H;
BA0 CONTINUECMPx1XX
BA1 DPADD22XX
BA2 DPADD44XX
LDI SysInitFlg,05H;
JMP SYSINI
DPADD22XX:
ADIM DPL,02H;
LDI Tmp6,00H;
ADCM DPM,00H; 最高位没做处理
JMP CONTINUECMPx1XX
DPADD44XX:
ADIM DPL,04H;
LDI Tmp6,00H;
ADCM DPM,00H; 最高位没做处理
JMP CONTINUECMPx1XX
CONTINUECMPx1XX:
LDI Tmp6,00H;
ADIM Tmp6,00H;
LDA INX,00H;
STA LINEY1_0L,00H;
LDI Tmp6,00H;
ADIM DPL,01H;第一个数据放如linex1——0中
LDI Tmp6,00H;
ADCM DPM,00H;
LDA INX,00H;
STA LINEY1_0H,00H;
GOCHECKXX:
LDI Tmp6,00H;
ADIM Tmp6,00H;
LDI Tmp6,00H;
SBI AvailY0L,0FH;
STA Tmp0,00H;存放路数的低四位
LDI Tmp6,00H;
SBC AvailY0H,00H;
STA Tmp1,00H;存放路数的高四位
LDI Tmp6,00H;
ADIM Tmp6,00H;
LDI Tmp3,00H;存放便移后的地址
LDI Tmp4,00H;
LDI Tmp5,00H;
LDI Tmp2,04H;四个地址**
NOP
NOP
CALL GETOFFSET
NOP
LDI DPL,1100B
LDI DPM,0101B;基地址15Ch
LDI DPH,0010B;
LDA Tmp3,00H;
ADDM DPL,00H;这里由于存放的数据地址选的在100h-17FH,所以最高位不溢出
LDA Tmp4,00H;
ADCM DPM,00H; 最高位没做处理
LDA Tmp7,00H;
BA0 CONTINUECMPx0XX
BA1 DPADD2XX
BA2 DPADD4XX
BA3 NEXTPOSITIONXX
LDI SysInitFlg,06H;
JMP SYSINI
DPADD2XX: LDI Tmp6,00H;
ADIM Tmp6,00H;
LDI Tmp6,00H;
ADIM DPL,02H;
LDI Tmp6,00H;
ADCM DPM,00H; 最高位没做处理
JMP CONTINUECMPx0XX
DPADD4XX:
LDI Tmp6,00H;
ADIM Tmp6,00H;
LDI Tmp6,00H;
ADIM DPL,04H;
LDI Tmp6,00H;
ADCM DPM,00H; 最高位没做处理
JMP CONTINUECMPx0XX
CONTINUECMPx0XX:
LDA INX,00H;
STA LINEY0_0L,00H;
LDI Tmp6,00H;
ADIM DPL,01H;第一个数据放如linex0——0中
LDI Tmp6,00H;
ADCM DPM,00H;
LDI Tmp6,00H;
LDA INX,00H;
STA LINEY0_0H,00H;
CHOOSEYXX:
LDI Tmp0,00H;存放相减结果
LDI Tmp1,00H;
LDA LINEY0_0L,00H;
STA Tmp2,00H;
LDA LINEY0_0H,00H;
STA Tmp3,00H;
LDA LINEY1_0L,00H;
STA Tmp4,00H;
LDA LINEY1_0H,00H;
STA Tmp5,00H;
CHECKX0X1XX:
NOP
CALL SUB8BITS
NOP
LDA Tmp9,00H;
BAZ EXCHANGEXX
LDA Tmp1,00H;
BNZ NEXTPOSITIONXX ;判断下一个数据去
LDI Tmp6,00H;
ADIM Tmp6,00H
LDI Tmp6,00H;
SBIM Tmp0,01H;如果是1的话
BAZ ComputeCoordinate ;完成判断
JMP NEXTPOSITIONXX
EXCHANGEXX:
LDI Tmp0,00H;存放相减结果
LDI Tmp1,00H;
LDA LINEY1_0L,00H;
STA Tmp2,00H;
LDA LINEY1_0H,00H;
STA Tmp3,00H;
LDA LINEY0_0L,00H;
STA Tmp4,00H;
LDA LINEY0_0H,00H;
STA Tmp5,00H;
JMP CHECKX0X1XX
NEXTPOSITIONXX:
LDA Tmp7,00H;
BA0 TOX0_1XX
;BA1 TOX0_2XX
JMP TOX1XX
TOX0_1XX:
LDI Tmp7,0010B;
NOP
JMP GOCHECKXX
;TOX0_2XX:
;LDI Tmp7,0100B;
;NOP
;JMP GOCHECKXX
TOX1XX:
LDA Tmp8,00H;
BA0 TOY0_1XX
;BA1 TOY0_2XX
NOP
LDI SysInitFlg,07H;
JMP SYSINI
TOY0_1XX:
LDI Tmp8,0010B;
LDI Tmp7,0001B;
NOP
JMP GOMAINCHECKXX
;TOY0_2XX:
;LDI Tmp8,0100B;
; LDI Tmp7,0001B;
; JMP GOMAINCHECKXX
;*********计算坐标值**********
ComputeCoordinate:
LDI CoordYL,00H;
LDI CoordYH,08H;初始化y坐标
LDA LINEX0_0H,00H;
BNZ CoordYMain ;当接近0行的坐标为0的时候不去处理
LDA LINEX0_0L,00H;
BNZ JudgeNextData ;
LDI SysInitFlg,08H;
JMP SYSINI
JudgeNextData:
LDA LINEX0_0L,00H;判断是不是接近第一根线
STA Tmp0,00H;
SBI Tmp0,01H;
BAZ NextDataJudge
JMP CoordYMain
NextDataJudge:;判断是不是0和1相邻
LDA LINEX1_0H,00H;
BNZ CoordYMain ;
LDA LINEX1_0L,00H;
BAZ CoordYLoadZero;如果是和01相邻,则y坐标为0
JMP CoordYMain
CoordYLoadZero:
LDI CoordYL,00H;
LDI CoordYH,00H;
JMP ToCoordinateX
CoordYMain:
LDA LINEX0_0L,00H;
STA Tmp2,00H;相乘以后的结果
LDA LINEX0_0H,00H;
STA Tmp3,00H;
LDI Tmp4,00H;
LDI Tmp6,00H;
ADIM Tmp6,00H; 乘于2
LDA LINEX0_0L,00H;
ADDM Tmp2,00H;
LDA LINEX0_0H,00H;
ADCM Tmp3,00H;
LDI Tmp6,00H;
ADCM Tmp4,00H;
;***判断到底AvailX1H是不是有用数据
;如果一个数据的情况下,默认判为上面线上的***
;如果AvailX1H为8fh的话则直接去加载
LDA AvailX1H,00H;
BA3 LoadCoordY;
;*********判断到底是减1还是减1*******
LDI Tmp6,00H;
ADIM Tmp6,00H;
LDA LINEX0_0L,00H;
STA Tmp0,00H;
LDA LINEX0_0H,00H;
STA Tmp1,00H;
LDA LINEX1_0L,00H;
STA Tmp7,00H;
LDA LINEX1_0H,00H;
STA Tmp8,00H;
LDA Tmp0,00H;
SUB Tmp7,00H;判断相邻两根线的大小关系
LDA Tmp1,00H;
SBC Tmp8,00H;
BC LoadCoordY
LDI Tmp6,00H;
ADIM Tmp6,00H;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -