标题: 各位大神出来看看这个程序那里出错? [打印本页]

作者: 打杂的    时间: 2018-1-27 13:12
标题: 各位大神出来看看这个程序那里出错?
  我在学习汇编语言,照着51单片机视频的例子来写的程序,烧录后出现程序有时候会自己跑飞,这个是那里问题?请各位大神指点下?
代码如下:
ORG 000H
SJMP MAIN
ORG 030H
        MAIN:MOV R0,#0FFH
                 MOV R2,#16
                 MOV DPTR, #TAB
        LOOP:INC R0
                 MOV A ,R0
                 MOVC A,@A+DPTR
        SHOW:MOV P0,A
                 LCALL DEY
                 DJNZ R2,LOOP
                 SJMP MAIN
        DEY:MOV R7,#20
        D1: MOV R6,#240
        D2: MOV R5,#160
            DJNZ R5,$
                DJNZ R6,D2
                DJNZ R7,D1
                RET
                TAB:DB 001H,003H,007H,00FH,01FH,03FH,07FH,0FFH
                        DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,000H
                        END


作者: perfect_co    时间: 2018-1-27 17:54
现在都不用汇编了,改用C语言吧
作者: qmf    时间: 2018-1-27 21:59

MAIN:MOV R0,#0FFH    ;r0中是11111111是吧?  

  LOOP:INC R0                ;这时r0中是00000000对吧
                 MOV A ,R0      ;a中是0
                 MOVC A,@A+DPTR  ;表中没0这一项对吧? 所以应该为mov  r0  #000h

TAB:DB 001H,003H,007H,00FH,01FH,03FH,07FH,0FFH
                        DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,000H
                        END
我学的也不好,



作者: KawhiL    时间: 2018-1-28 09:04
楼上说的不对。 MOVC A,@A+DPTR 这一句是没问题的 DPTR的值是表的首地址,偏移量为0的时候就是表中的第一个数据。
不知道楼主说的跑飞是什么意思? 这个程序是数码管的一位显示0 1 2 3  4 5  6 7 8 9吧。
你SJMP跳转到MAIN的话 它总是显示表中的第一个数据。如果想显示0~9,你需要SJMP跳转到LOOP
作者: 宇智波罩    时间: 2018-1-28 11:13
用C语言吧,这个语言用的少
作者: qmf    时间: 2018-1-28 21:01
KawhiL 发表于 2018-1-28 09:04
楼上说的不对。 MOVC A,@A+DPTR 这一句是没问题的 DPTR的值是表的首地址,偏移量为0的时候就是表中的第一个 ...

好像不是数码管,像是先点亮一个灯,2个,3个------8个,7个-------0个,16个循环。不知楼主高低电位怎样定义




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1