求大神修改一下51单片机的按键计数器程序!在线等急!!!

ORG0000HLJMPSTARTORG000BHLJMPT_0ORG0030HSTART:MOVDPTR,#TABLEMOVSP,#60HMOVTH0,#0FFHMOV... ORG 0000H
LJMP START
ORG 000BH
LJMP T_0
ORG 0030H
START:

MOV DPTR,#TABLE
MOV SP,#60H

MOV TH0,#0FFH
MOV TL0,#0F0H
SETB EA
SETB ET0
MOV TMOD,#05H
SETB TR0
LOOP:
MOV A,TL0
SUBB A,#0F0H
CJNZ A,#100,OVER
MOV B,#100
DIV AB
MOVC A,@A+DPTR
MOV P2,#00001101B
MOV P1,A
LCALL DELAY4MS
MOV A,B
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV P2,#00001011B
MOV P1,A
LCALL DELAY4MS
MOV A,B
MOVC A,@A+DPTR
MOV P2,#00000111B
MOV P1,A
LCALL DELAY4MS
LJMP LOOP

T_0:
PUSH ACC
PUSH DPH
PUSH DPL
CPL P3.0
MOV TH0,#0FFH
MOV TL0,#0F0H
POP DPL
POP DPH
POP ACC
RETI

DELAY4MS:
MOV R5,#10
DELAY_LOOP1:
MOV R4,#200
DELAY_LOOP2:DJNZ R4,DELAY_LOOP2
DJNZ R5,DELAY_LOOP1
RET

TABLE:DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
源程序是从0计数到15.我想修改一下,让他从0计数到3然后再按下去的时候显示1, 然后再这样循环(01231 01231 01231。。。)其他功能不变,求大神指点怎么修改。
展开
 我来答
lycdl
高粉答主

2015-11-05 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4936万
展开全部
你能确定发上来的程序是对的吗?你的仿真图确实是运行了这个程序的吗?
不是吧,这个程序有错误,编译不通过的,那仿真图的结果是怎么出来的,是从别人那拍照下来的吧。
这行:
CJNZ A,#100,OVER
CJNZ 指令是错误的,后面的标号OVER,程序中并没有,不知转向何处,这程序怎么可能编译通过呢?
另外问一句,这样循环(01231 01231 01231。。。)有什么意思吗?为什么要这样?
追问
把CJNZ A,#100,OVER这删了,就对了。我就是想在SUBB A,#0F0H后面加个几行来实现这个功能
追答
可为什么非要(01231 01231 01231。。。)循环,而不是(01234 01234 01234。。。)循环呢?
还有一个问题,原程序是计16个数,那个发光二极管D1取反一次,即亮/灭转换一次,你这样计数循环后,还是计16个数,那个发光二极管D1取反一次?还是计5个数取反一次?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

推荐于2016-11-26 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部

如下即可:

    ORG   0000H
    JMP   START
    ORG   000BH
    CPL   P3.0
    RETI
START:
    MOV   TMOD, #06H
    MOV   TH0, #0FCH
    MOV   TL0, #0FCH
    MOV   IE, #82H
    SETB  TR0
    MOV   DPTR, #TABLE
LOOP:
    MOV   A, TL0
    CLR   C
    SUBB  A, #0FCH
    MOV   B, #100
    DIV   AB
    MOV   P2, #00001101B
    CALL  DELAY4MS
    MOV   A, B
    MOV   B, #10
    DIV   AB
    MOV   P2, #00001011B
    CALL  DELAY4MS
    MOV   A, B
    MOV   P2, #00000111B
    CALL  DELAY4MS
    LJMP  LOOP
    
DELAY4MS:
    MOVC  A, @A + DPTR
    MOV   P1, A
    MOV   R5, #20
    DJNZ  R4, $
    DJNZ  R5, $ - 2
    RET
    
TABLE:
    DB   3FH, 06H, 5BH, 4FH, 66H
    DB   6DH, 7DH, 07H, 7FH, 6FH

END
追问
这个是0123 0123   我想要的效果是 01231 01231 01231.应该是源程序不变,加几行代码就能实现吧?
追答

哦, 0123 后面,还要有个 1 ?

没有注意。


改好了:

    ORG   0000H
    JMP   START
    ORG   000BH
    CPL   P3.0
    RETI
START:
    MOV   TMOD, #06H
    MOV   TH0, #0FBH
    MOV   TL0, #0FBH
    MOV   IE, #82H
    SETB  TR0
    MOV   DPTR, #TABLE
LOOP:
    MOV   A, TL0
    CLR   C
    SUBB  A, #0FBH
    MOV   B, #100
    DIV   AB
    MOV   P2, #00001101B
    CALL  DELAY4MS
    MOV   A, B
    MOV   B, #10
    DIV   AB
    MOV   P2, #00001011B
    CALL  DELAY4MS
    MOV   A, B
    MOV   P2, #00000111B
    CALL  DELAY4MS
    LJMP  LOOP
     
DELAY4MS:
    MOVC  A, @A + DPTR
    MOV   P1, A
    MOV   R5, #20
    DJNZ  R4, $
    DJNZ  R5, $ - 2
    RET
     
TABLE:
    DB   3FH, 06H, 5BH, 4FH, 06H
    DB   6DH, 7DH, 07H, 7FH, 6FH
 
END
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式