📄 chip cam open&short test3_b(20pin).asm
字号:
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 + -