⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 17khz150ms.asm

📁 中颖单片机sh6613的一个坐标扫描程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:
        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 + -