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

📄 chip cam open&short test3_b(20pin).asm

📁 这个代码是我本人写的一个通断测试仪
💻 ASM
📖 第 1 页 / 共 3 页
字号:
LED_OPEN        BIT        P0.0                                 ;断路指示LED
LED_SHORT       BIT        P0.1                                 ;短路指示LED
BUZZER          BIT        P0.2                                 ;蜂鸣器
LED_CONTROL     BIT        P0.3                                 ;LED总电源控制
KEYSTROKE       BIT        P0.4                                 ;短路与断路切换按键
SYNC_SIGNAL     BIT        P0.6                                 ;U1发送过来的同步信号(高有效)

P1CARRY_MARK       BIT     51H                                  ;P1口数据存储区索引进位标志
P2CARRY_MARK       BIT     52H                                  ;P2口数据存储区索引进位标志
P3CARRY_MARK       BIT     53H                                  ;P3口数据存储区索引进位标志
P1DATA_INDEX       BIT     54H                                  ;P1口数据存储区索引
P2DATA_INDEX       BIT     55H                                  ;P2口数据存储区索引
P3DATA_INDEX       BIT     56H                                  ;P3口数据存储区索引
P1_BUFFER          BIT     57H                                  ;P1口数据缓存
P2_BUFFER          BIT     58H                                  ;P2口数据缓存
P3_BUFFER          BIT     59H                                  ;P3口数据缓存
SYNC_WORD          BIT     5AH                                  ;同步字,用来记录扫描的次数(8次为满)
SHORT_MARK         BIT     5BH                                  ;短路标志,用来供程序判断有没有短路
RAWDATA            BIT     5CH                                  ;原始字,用来存储还原的发送位
OPEN_BUFFER        BIT     5DH                                  ;开路测试缓存,测试地线有无短路时先将发送位除掉

ORG  0000H
AJMP PROG_MAIN
ORG  0030H

PROG_MAIN:      CLR         EA                                  ;初始化
                MOV         SP,               #70H

LED_TEST:
                MOV         P0,               #14H              ;测试所有的LED
                MOV         P1,               #00H
                MOV         P2,               #00H
                MOV         P3,               #00H
                LCALL       D02S
                LCALL       D02S
                LCALL       D02S
                LCALL       D02S
                LCALL       D02S
                LCALL       D02S
                MOV         A,                #0FFH             ;将所有I/O口恢复HIGH, 测试完成
                MOV         P0,               A
                MOV         P1,               A
                MOV         P2,               A
                MOV         P3,               #0FH

                                                                ;以下为所有用到的寄存器
START:          MOV         P1_BUFFER,        #00H              ;P1口数据缓存
                MOV         P2_BUFFER,        #00H              ;P2口数据缓存
                MOV         P3_BUFFER,        #00H              ;P3口数据缓存
                MOV         P1CARRY_MARK,     #00H              ;P1口数据存储区索引进位标志
                MOV         P2CARRY_MARK,     #00H              ;P2口数据存储区索引进位标志
                MOV         P3CARRY_MARK,     #00H              ;P3口数据存储区索引进位标志
                MOV         P1DATA_INDEX,     #10H              ;P1口数据存储区索引
                MOV         P2DATA_INDEX,     #20H              ;P2口数据存储区索引
                MOV         P3DATA_INDEX,     #30H              ;P3口数据存储区索引
                MOV         RAWDATA,          #00H              ;原始字,用来存储发送位
                MOV         SYNC_WORD,        #7FH              ;同步字,用来记录扫描的次数(8次为满)
                MOV         SHORT_MARK,       #00H              ;短路标志,用来供程序判断有没有短路(FF表示有短路)
                MOV         R1,               #00H              ;数据存储区映射
                MOV         R2,               #00H              ;定时器缓存
                MOV         R3,               #00H              ;定时器缓存
                MOV         A,                #00H
                MOV         10H,              A                 ;P1口数据存储区
                MOV         11H,              A
                MOV         12H,              A
                MOV         13H,              A
                MOV         14H,              A
                MOV         15H,              A
                MOV         16H,              A
                MOV         17H,              A
                MOV         18H,              A
                MOV         19H,              A
                MOV         1AH,              A
                MOV         1BH,              A
                MOV         20H,              A                 ;P2口数据存储区
                MOV         21H,              A
                MOV         22H,              A
                MOV         23H,              A
                MOV         24H,              A
                MOV         25H,              A
                MOV         26H,              A
                MOV         27H,              A
                MOV         28H,              A
                MOV         29H,              A
                MOV         2AH,              A
                MOV         2BH,              A
                MOV         30H,              A                 ;P3口数据存储区
                MOV         31H,              A
                MOV         32H,              A
                MOV         33H,              A
                MOV         34H,              A
                MOV         35H,              A
                MOV         36H,              A
                MOV         37H,              A
                MOV         38H,              A
                MOV         39H,              A
                MOV         3AH,              A
                MOV         3BH,              A


P1_RECEIVE:     JB          SYNC_SIGNAL,      P1_RECEIVE                  ;检测同步信号
                NOP
                NOP
                JB          SYNC_SIGNAL,      P1_RECEIVE
                MOV         P1,               #0FFH
                MOV         P1CARRY_MARK,     #00H                        ;三个进位标志清0
                MOV         P2CARRY_MARK,     #00H
                MOV         P3CARRY_MARK,     #00H
                MOV         A,                SYNC_WORD                   ;同步字进行同步动作(左移,模拟输入端)
                RL          A
                MOV         SYNC_WORD,        A
                MOV         P1_BUFFER,        P1                          ;数据读进缓存
                MOV         P2_BUFFER,        P2
                MOV         P3_BUFFER,        P3
                ANL         P1_BUFFER,        A                           ;将P1口数据中的发送位去掉并将发送位保存在RAWDATA中
                CPL         A
                MOV         RAWDATA,          A

P1_COMP1:       MOV         A,                P1_BUFFER                   ;判断每个口有无短路点
                JNZ         SAVEP1_1
P2_COMP1:       MOV         A,                P2_BUFFER
                JNZ         SAVEP2_1
P3_COMP1:       MOV         A,                P3_BUFFER
                JNZ         SAVEP3_1

P1CARRY_SYNC1:  MOV         A,                P1CARRY_MARK                ;检测三组缓存是否进位同步(标志是否一致)
                JZ          P1_STEPCONTROL                                ;若P1口同步标志有进位则检查另外两个进位标志
P2CARRY_SYNC1:  MOV         A,                P2CARRY_MARK                ;检查并使之进位同步
                JNZ         P3CARRY_SYNC1
                MOV         A,                P2DATA_INDEX
                INC         A
                MOV         P2DATA_INDEX,     A
P3CARRY_SYNC1:  MOV         A,                P3CARRY_MARK
                JNZ         P1_STEPCONTROL
                MOV         A,                P3DATA_INDEX
                INC         A
                MOV         P3DATA_INDEX,     A

P1_STEPCONTROL: MOV         A,                SYNC_WORD
                CJNE        A,                #7FH,         P1_RECEIVE    ;检查是否8个口全部有扫描完成
                AJMP        P2_RECEIVE


SAVEP1_1:       MOV         SHORT_MARK,       #0FFH                       ;置短路标志位为1
                MOV         P1CARRY_MARK,     #0FFH                       ;置P1口进位标志位为1
                MOV         R1,               P1DATA_INDEX                ;索引入R1
                MOV         A,                RAWDATA                     ;恢复发送位
                ORL         A,                P1_BUFFER                   ;数据存入存储区
                MOV         @R1,              A
                MOV         A,                P1DATA_INDEX                ;P1口数据区索引加1
                INC         A
                MOV         P1DATA_INDEX,     A
                AJMP        P2_COMP1

SAVEP2_1:       MOV         SHORT_MARK,       #0FFH                       ;置短路标志位为1
                MOV         P2CARRY_MARK,     #0FFH                       ;置P2口进位标志位为1
                MOV         R1,               P2DATA_INDEX                ;索引入R1
                MOV         @R1,              P2_BUFFER                   ;数据存入存储区
                MOV         A,                P2DATA_INDEX                ;P2口数据区索引加1
                INC         A
                MOV         P2DATA_INDEX,     A

                MOV         A,                P1CARRY_MARK                ;判断发送位有无存入
                CJNE        A,                #00H,        P3_COMP1
                MOV         R1,               P1DATA_INDEX                ;无则存入发送位
                MOV         @R1,              RAWDATA
                MOV         A,                P1DATA_INDEX
                INC         A
                MOV         P1DATA_INDEX,     A
                MOV         P1CARRY_MARK,     #0FFH                       ;置P1口进位标志位为1
                AJMP        P3_COMP1

SAVEP3_1:       MOV         SHORT_MARK,       #0FFH                       ;置短路标志位为1
                MOV         P3CARRY_MARK,     #0FFH                       ;置P3口进位标志位为1
                MOV         R1,               P3DATA_INDEX                ;索引入R1
                MOV         @R1,              P3_BUFFER                   ;数据存入存储区
                MOV         A,                P3DATA_INDEX                ;P3口数据区索引加1
                INC         A
                MOV         P3DATA_INDEX,     A

                MOV         A,                P1CARRY_MARK                ;判断发送位有无存入
                CJNE        A,                #00H,        P1CARRY_SYNC1
                MOV         R1,               P1DATA_INDEX                ;无则存入发送位
                MOV         @R1,              RAWDATA
                MOV         A,                P1DATA_INDEX
                INC         A
                MOV         P1DATA_INDEX,     A
                MOV         P1CARRY_MARK,     #0FFH                       ;置P1口进位标志位为1
                AJMP        P1CARRY_SYNC1                                 ;回去判断存储区进位是否一置


P2_RECEIVE:     JB          SYNC_SIGNAL,      P2_RECEIVE                  ;检测同步信号
                NOP
                NOP
                JB          SYNC_SIGNAL,      P2_RECEIVE
                MOV         P2,               #0FFH
                MOV         P1CARRY_MARK,     #00H                        ;三个进位标志清0
                MOV         P2CARRY_MARK,     #00H
                MOV         P3CARRY_MARK,     #00H
                MOV         A,                SYNC_WORD                   ;同步字进行同步动作(左移,模拟输入端)
                RL          A
                MOV         SYNC_WORD,        A
                MOV         P1_BUFFER,        P1                          ;数据读进缓存
                MOV         P2_BUFFER,        P2
                MOV         P3_BUFFER,        P3
                ANL         P2_BUFFER,        A                           ;将P2口数据中的发送位去掉并将发送位保存在RAWDATA中
                CPL         A
                MOV         RAWDATA,          A

P2_COMP2:       MOV         A,                P2_BUFFER                   ;判断每个口有无短路点
                JNZ         SAVEP2_2
P1_COMP2:       MOV         A,                P1_BUFFER
                JNZ         SAVEP1_2
P3_COMP2:       MOV         A,                P3_BUFFER
                JNZ         SAVEP3_2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -