|
按照你的代码 1、第一组密码不匹配的时候,B寄存器没有被设置;到第二组判断密码的时候,如果匹配,其后从B寄存器取值,那么这个值是什么值? 2、如果第一组密码匹配了,输出到8100H后,会继续执行第二组的密码判断。此时A寄存器中是0xFE,第二组密码不匹配,转LOOP。事实上,第一组密码如果匹配了,就没有必要执行第二组密码的判断。当第一组不匹配,执行第二组密码判断的时候,没有必要去做0xFE的判断,因为能走到第二组,第一组铁定不匹配。所以第二组如果匹配,可以直接输出0xFD到8100H。 修改如下 DATA_IN EQU 8000H DATA_OUT EQU 8100H ORG 0100H MOV A,#0FFH MOV DPTR,#DATA_OUT MOVX @DPTR,A LOOP: MOV DPTR,#DATA_IN MOVX A,@DPTR CJNE A,#10101010B,LOOP1 ;匹配第一组密码,点亮Bit0对应的LED MOV DPTR,#DATA_OUT MOV A,#0FEH MOVX @DPTR,A SJMP LOOP LOOP1: CJNE A,#11110000B,LOOP2 ;匹配第一组密码,点亮Bit1对应的LED MOV A,#0FDH MOV DPTR,#DATA_OUT MOVX @DPTR,A SJMP LOOP LOOP2: ;第一、二租密码都不匹配,点亮所有LED MOV A,#00H MOV DPTR,#DATA_OUT MOVX @DPTR,A SJMP LOOP |