谁能帮我检查下,这个C51单片机的汇编语言有什么错误!
是一个电子密码锁。ORG0000HAJMPSTARTORG0030HSTART:ACALLBPMOVR0,#31HMOVR2,#8SET:MOVP1,#0FFHMOVA,...
是一个 电子密码锁。
ORG 0000H
AJMP START
ORG 0030H
START:ACALL BP
MOV R0,#31H
MOV R2,#8
SET: MOV P1,#0FFH
MOV A,P1
CJNE A,#0FFH,L8
AJMP SET
L8: ACALL DELAY
CJNE A,#0FFH,SAVE
AJMP SET
SAVE: ACALL BP
MOV @R0�A
INC R0
DJNZ R2,SET
MOV R5,#16
D2S: ACALL BP
DJNZ R5,D2S
MOV R0,#31H
MOV R3,#3
AA1: MOV R2,#8
AA2: MOV P1,#0FFH
MOV A,P1
CJNE A,#0FFH, L9
AJMP AA2
L9� ACALL DELAY
CJNE A,#0FFH,AA3
AJMP AA2
AA3: ACALL BP
CLR C
SUBB A, @R0
INC R0
CJNE A,#00H,AA4
AJMP AA5
AA4: SETB 00H
AA5: DJNZ R2,AA2
JB 00H�AA6
CLR P3.5
L3� MOV R5,#8
ACALL BP
DJNZ R4,L3
MOV R3,#3
SETB P3.5
AJMP AA1
AA6: DJNZ R3,AA7
MOV R5,#24
L5: MOV R4,#200
L4: ACALL BP
DJNZ R4,L4
DJNZ R5,L5
MOV R3,#3
AA7: MOV R5,#40
ACALL BP
DJNZ R5,AA7
AA8: CLR 00H
AJMP AA1
BP: CLR P3.7
MOV R7,#250
L2: MOV R6,#124
L1: DJNZ R6,L1
CPL P3.7
DJNZ R7,L2
SETB P3.7
RET
DELAY�MOV R7,#20
L7: MOV R6,#125
L6: DJNZ R6,L6
DJNZ R7,L7
RET
END 展开
ORG 0000H
AJMP START
ORG 0030H
START:ACALL BP
MOV R0,#31H
MOV R2,#8
SET: MOV P1,#0FFH
MOV A,P1
CJNE A,#0FFH,L8
AJMP SET
L8: ACALL DELAY
CJNE A,#0FFH,SAVE
AJMP SET
SAVE: ACALL BP
MOV @R0�A
INC R0
DJNZ R2,SET
MOV R5,#16
D2S: ACALL BP
DJNZ R5,D2S
MOV R0,#31H
MOV R3,#3
AA1: MOV R2,#8
AA2: MOV P1,#0FFH
MOV A,P1
CJNE A,#0FFH, L9
AJMP AA2
L9� ACALL DELAY
CJNE A,#0FFH,AA3
AJMP AA2
AA3: ACALL BP
CLR C
SUBB A, @R0
INC R0
CJNE A,#00H,AA4
AJMP AA5
AA4: SETB 00H
AA5: DJNZ R2,AA2
JB 00H�AA6
CLR P3.5
L3� MOV R5,#8
ACALL BP
DJNZ R4,L3
MOV R3,#3
SETB P3.5
AJMP AA1
AA6: DJNZ R3,AA7
MOV R5,#24
L5: MOV R4,#200
L4: ACALL BP
DJNZ R4,L4
DJNZ R5,L5
MOV R3,#3
AA7: MOV R5,#40
ACALL BP
DJNZ R5,AA7
AA8: CLR 00H
AJMP AA1
BP: CLR P3.7
MOV R7,#250
L2: MOV R6,#124
L1: DJNZ R6,L1
CPL P3.7
DJNZ R7,L2
SETB P3.7
RET
DELAY�MOV R7,#20
L7: MOV R6,#125
L6: DJNZ R6,L6
DJNZ R7,L7
RET
END 展开
展开全部
存在以下几个问题:
1. 在按键的延时去抖动后,没有重新读取按键键值,即:
L8: ACALL DELAY
CJNE A,#0FFH,SAVE
这两条指令中间应插入:MOV A, P1,否则你用来比较的A还是第一次读到的A
2. 你在检测到按键按下后,没有等待键释放再去检测下一个按键。从你的程序中看,检测到按键按下后,蜂鸣器会响,除非你能很好的控制你按键按下的时间,不能超过蜂鸣器鸣叫的时间。所以这里建议你增加等待键释放,即:
INC R0
DJNZ R2,SET
这两条指令中插入:
RELEASE: MOV A, P1
CJNE A, #0FFH, RELEASE ; 检测到键仍按下则继续检测直至松开
ACALL DELAY ; 继续延时去抖动
MOV A, P1
CJNE A, #0FFH, RELEASE ; 去抖动后再确认一次按键已释放
你后面的代码看上去很混乱,我大致的理解是:你开始读了8次键值,存入31H开始的单元,然后后面的循环中有执行了3次 再读8次键值的事情,并且只要这8次中有一次按对了(分别与开始的第1、2、3个键值相同),就将00H这位置为有效,然后蜂鸣器响一响,没有什么实质性的工作。
另外,你的原理图中P3.2是控制线,程序中没有看到P3.2,却有P3.5。
希望你具体说明你的需求,以及你自己的编程思路,才能让别人帮到你,只会贴贴程序是没有意义的。
1. 在按键的延时去抖动后,没有重新读取按键键值,即:
L8: ACALL DELAY
CJNE A,#0FFH,SAVE
这两条指令中间应插入:MOV A, P1,否则你用来比较的A还是第一次读到的A
2. 你在检测到按键按下后,没有等待键释放再去检测下一个按键。从你的程序中看,检测到按键按下后,蜂鸣器会响,除非你能很好的控制你按键按下的时间,不能超过蜂鸣器鸣叫的时间。所以这里建议你增加等待键释放,即:
INC R0
DJNZ R2,SET
这两条指令中插入:
RELEASE: MOV A, P1
CJNE A, #0FFH, RELEASE ; 检测到键仍按下则继续检测直至松开
ACALL DELAY ; 继续延时去抖动
MOV A, P1
CJNE A, #0FFH, RELEASE ; 去抖动后再确认一次按键已释放
你后面的代码看上去很混乱,我大致的理解是:你开始读了8次键值,存入31H开始的单元,然后后面的循环中有执行了3次 再读8次键值的事情,并且只要这8次中有一次按对了(分别与开始的第1、2、3个键值相同),就将00H这位置为有效,然后蜂鸣器响一响,没有什么实质性的工作。
另外,你的原理图中P3.2是控制线,程序中没有看到P3.2,却有P3.5。
希望你具体说明你的需求,以及你自己的编程思路,才能让别人帮到你,只会贴贴程序是没有意义的。
浙江启扬智能科技有限公司
2019-05-20 广告
2019-05-20 广告
目前,ARM开发板已经逐渐替代单片机。虽然它们在应用领域上很类似,但是单片机能够完成的ARM开发板可以完成的更好,ARM开发板能够完成的单片机未必能够完成。ARM开发板每个部分分工明确,多功能处理问题,稳定性非常高,整体运行效率高,当然成本...
点击进入详情页
本回答由浙江启扬智能科技有限公司提供
展开全部
ORG 0000H
AJMP START
ORG 0030H
START: ACALL BP
MOV R0,#31H
MOV R2,#8
SEET: MOV P1,#0FFH
MOV A,P1
CJNE A,#0FFH,L8
AJMP SEET
L8: ACALL DELAY
CJNE A,#0FFH,SAVE
AJMP SEET
SAVE: ACALL BP
MOV @R0,A
INC R0
DJNZ R2,SEET
MOV R5,#16
D2S: ACALL BP
DJNZ R5,D2S
MOV R0,#31H
MOV R3,#3
AA1: MOV R2,#8
AA2: MOV P1,#0FFH
MOV A,P1
CJNE A,#0FFH, L9
AJMP AA2
L9: ACALL DELAY
CJNE A,#0FFH,AA3
AJMP AA2
AA3: ACALL BP
CLR C
SUBB A, @R0
INC R0
CJNE A,#00H,AA4
AJMP AA5
AA4: SETB 00H
AA5: DJNZ R2,AA2
JB 00H,AA6
CLR P3.5
L3: MOV R5,#8
ACALL BP
DJNZ R4,L3
MOV R3,#3
SETB P3.5
AJMP AA1
AA6: DJNZ R3,AA7
MOV R5,#24
L5: MOV R4,#200
L4: ACALL BP
DJNZ R4,L4
DJNZ R5,L5
MOV R3,#3
AA7: MOV R5,#40
ACALL BP
DJNZ R5,AA7
AA8: CLR 00H
AJMP AA1
BP: CLR P3.7
MOV R7,#250
L2: MOV R6,#124
L1: DJNZ R6,L1
CPL P3.7
DJNZ R7,L2
SETB P3.7
RET
DELAY: MOV R7,#20
L7: MOV R6,#125
L6: DJNZ R6,L6
DJNZ R7,L7
RET
END
AJMP START
ORG 0030H
START: ACALL BP
MOV R0,#31H
MOV R2,#8
SEET: MOV P1,#0FFH
MOV A,P1
CJNE A,#0FFH,L8
AJMP SEET
L8: ACALL DELAY
CJNE A,#0FFH,SAVE
AJMP SEET
SAVE: ACALL BP
MOV @R0,A
INC R0
DJNZ R2,SEET
MOV R5,#16
D2S: ACALL BP
DJNZ R5,D2S
MOV R0,#31H
MOV R3,#3
AA1: MOV R2,#8
AA2: MOV P1,#0FFH
MOV A,P1
CJNE A,#0FFH, L9
AJMP AA2
L9: ACALL DELAY
CJNE A,#0FFH,AA3
AJMP AA2
AA3: ACALL BP
CLR C
SUBB A, @R0
INC R0
CJNE A,#00H,AA4
AJMP AA5
AA4: SETB 00H
AA5: DJNZ R2,AA2
JB 00H,AA6
CLR P3.5
L3: MOV R5,#8
ACALL BP
DJNZ R4,L3
MOV R3,#3
SETB P3.5
AJMP AA1
AA6: DJNZ R3,AA7
MOV R5,#24
L5: MOV R4,#200
L4: ACALL BP
DJNZ R4,L4
DJNZ R5,L5
MOV R3,#3
AA7: MOV R5,#40
ACALL BP
DJNZ R5,AA7
AA8: CLR 00H
AJMP AA1
BP: CLR P3.7
MOV R7,#250
L2: MOV R6,#124
L1: DJNZ R6,L1
CPL P3.7
DJNZ R7,L2
SETB P3.7
RET
DELAY: MOV R7,#20
L7: MOV R6,#125
L6: DJNZ R6,L6
DJNZ R7,L7
RET
END
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
子程序L9和L3后面少了冒号。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询