导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→帮我看看,在用KEIL编译中出现的问题[xiongfoolboy]

 *第27122篇: 帮我看看,在用KEIL编译中出现的问题

  
楼 主:xiongfoolboy 2004年10月27日13:24
 帮我看看,在用KEIL编译中出现的问题
我从书上抄了一个LED的静态显示程序,在编译的时候有这样的错误信息:
Build target 'Target 1 '
assembling disp.asm...
disp.asm(11): error A9 : SYNTAX ERROR
Target not created
各位高手给我看看吧,是出什么问题了,程序如下:
ORG 8000H
DISP : MOV R1, 30H
       MOV R0, #31H
       MOV R2, #04H
       MOV DPTR , #4000H
LOOP : MOV A , @R0
       PUSH DPH
       PUSH DPL
       MOV DPTR ,#SEG
       MOVC A, @A+DPTR
       BIT 3,R1 (错误提示在这一行)
       JZ L1
       ANL A,#7FH
L1 :   POP DPL
       POP DPH
       MOVX @DPTR ,A
       INC R0
       INC DPTR
       MOV A , R1
       RL A
       MOV R1 ,A
       DJNZ R2 , LOOP
       RET
SEG :  DB 0C0H,0F9H,0A4H;
       DB 0B0H,99H,92H;
       DB 82H,0F8H,80H;
       DB 90H,0FFH,0BFH;
       END
   
   
  
2楼:zdfwyh 2004年10月27日14:59
 BIT 的用法错误,在此处不应该使用BI
BIT 的用法错误,在此处不应该使用BIT(伪操作指令),请再仔细核对原处程序,我认为可能是SUB指令.
  
3楼:xiongfoolboy 2004年10月27日15:35
 bit 3,R1 这条指令的意思是在R1
bit 3,R1 这条指令的意思是在R1这个寄存器中取出第3位的值,难道不可以这样用吗?请再帮忙看看吧
  
4楼:lichuanfa 2004年10月28日10:50
 用移位指令把第三位移移出来不就可以了,如
用移位指令把第三位移移出来不就可以了,如果还要用r1,可以保存r1
  
5楼:xiongfoolboy 2004年10月28日13:11
 怎样用移位指令把它移出来,能写一下吗
怎样用移位指令把它移出来,能写一下吗
  
6楼:lichuanfa 2004年10月28日17:30
 org 000h
main:
 mo

org 000h
main:
 mov a,r1
  mov a,#0fh
  mov c,0
  rrc a
  rrc a
  rrc a
  mov 20h,c
  nop
  end

这样将r1的第3位移出保存在20h的地址中,结合你的程序,自己试试

  
7楼:xiongfoolboy 2004年10月29日10:25
 LED静态显示程序,编译通过了,可是不能调试
我对程序做了如下的修改,能够编译通过了,可是不能调试,再帮忙看看吧
       MOV R3 ,A
       MOV A , R1
       CLR C
       RLC A
       MOV A ,R3
       JC  L1
整个程序如下:(就是不能调试,高人看看吧,运行的结果大家拷到keil上运行就可以看到了,太多复杂的,我写不下来)
ORG 8000H
DISP : MOV R1, 30H
       MOV R0, #31H
       MOV R2, #04H
       MOV DPTR , #4000H
LOOP : MOV A , @R0
       PUSH DPH
       PUSH DPL
       MOV DPTR ,#SEG
       MOVC A, @A+DPTR
       MOV R3 ,A
       MOV A , R1
       CLR C
       RLC A
       MOV A ,R3
       JC  L1
       ANL A,#7FH
L1 :   POP DPL
       POP DPH
       MOVX @DPTR ,A
       INC R0
       INC DPTR
       MOV A , R1
       RL A
       MOV R1 ,A
       DJNZ R2 , LOOP
       RET
SEG :  DB 0C0H,0F9H,0A4H;
       DB 0B0H,99H,92H;
       DB 82H,0F8H,80H;
       DB 90H,0FFH,0BFH;
       END
   
   

  
8楼:xiaodao35 2004年10月27日19:47
 [quote][b]以下是引用[i]xi
以下是引用xiongfoolboy在2004-10-27 15:35:53的发言:
bit 3,R1 这条指令的意思是在R1这个寄存器中取出第3位的值,难道不可以这样用吗?请再帮忙看看吧


同学,bit是用来定义位变量的伪指令,伪指令就是假指令,程序运行时不会执行的。
  
9楼:xiongfoolboy 2004年10月28日08:47
 那还有哪条指令是可以把R1中的第3位取出
那还有哪条指令是可以把R1中的第3位取出来的吗?好象没有这样的指令吧,不过这个程序是书上我照抄的,难道也不对
  
10楼:guest 2004年10月28日10:28
 mov c,r1.3
好像是这样。

mov c,r1.3
好像是这样。
  
11楼:xiongfoolboy 2004年10月28日13:07
 刚刚试过,还是不行,怎么办呀,大家来帮忙
刚刚试过,还是不行,怎么办呀,大家来帮忙看看呀
  
12楼:xiaodao35 2004年10月28日15:38
 你把R1寄存器换成可位寻址的地址。然后把
你把R1寄存器换成可位寻址的地址。然后把第3位定义一个可位寻址的变量名。
  
13楼:bilborn258 2004年10月29日10:59
 有这么麻烦吗?
看我的:
mov b

有这么麻烦吗?
看我的:
mov b,r1
mov c,b.3
这样很简单吧
  
14楼:bilborn258 2004年10月29日11:18
 其中:
       MOV DPTR

其中:
       MOV DPTR ,#SEG
       MOVC A, @A+DPTR
       BIT 3,R1 (错误提示在这一行)
       JZ L1
       ANL A,#7FH

这小段是用来控制是否显示小数点的。

MOV R1, 30H
……
 MOV A , R1
       RL A
       MOV R1 ,A
在30H低4位里纪录的是小数点所在的位置。
我估计 BIT 3,R1 (错误提示在这一行)
       JZ L1
应该改为MOV B,R1
            MOV C,B.3
            JC L1或JNC L1

  
15楼:xiongfoolboy 2004年11月1日10:16
 谢谢bilborn258的帮助
我对程

谢谢bilborn258的帮助
我对程序做了如下的修改,能够编译通过了,可是不能调试,再帮忙看看吧
       MOV R3 ,A
       MOV A , R1
       CLR C
       RLC A
       MOV A ,R3
       JC  L1
整个程序如下:(就是不能调试,高人看看吧,运行的结果大家拷到keil上运行就可以看到了,太多复杂的,我写不下来,会不会是我用到了DPTR还需要设置些别的什么地方呀?)
ORG 8000H
DISP : MOV R1, 30H
       MOV R0, #31H
       MOV R2, #04H
       MOV DPTR , #4000H
LOOP : MOV A , @R0
       PUSH DPH
       PUSH DPL
       MOV DPTR ,#SEG
       MOVC A, @A+DPTR
       MOV R3 ,A
       MOV A , R1
       CLR C
       RLC A
       MOV A ,R3
       JC  L1
       ANL A,#7FH
L1 :   POP DPL
       POP DPH
       MOVX @DPTR ,A
       INC R0
       INC DPTR
       MOV A , R1
       RL A
       MOV R1 ,A
       DJNZ R2 , LOOP
       RET
SEG :  DB 0C0H,0F9H,0A4H;
       DB 0B0H,99H,92H;
       DB 82H,0F8H,80H;
       DB 90H,0FFH,0BFH;
       END
  
16楼:xiongfoolboy 2004年11月1日10:34
 我又做了些修改如下,可是还是不能调试呀,
我又做了些修改如下,可是还是不能调试呀,请高手看看吧
ORG 8000H
       MOV 30H , #1
       MOV 31H , #10
       MOV 32H , #2
       MOV 33H , #4
       MOV 34H , #6
DISP : MOV R1, 30H
       MOV R0, #31H
       MOV R2, #04H
       MOV DPTR , #4000H
LOOP : MOV A , @R0
       PUSH DPH
       PUSH DPL
       MOV DPTR ,#SEG
       MOVC A, @A+DPTR
       MOV R3 ,A
       MOV A , R1
       CLR C
       RLC A
       MOV A ,R3
       JC  L1
       ANL A,#7FH
L1 :   POP DPL
       POP DPH
       MOVX @DPTR ,A
       INC R0
       INC DPTR
       MOV A , R1
       RL A
       MOV R1 ,A
       DJNZ R2 , LOOP
       RET
SEG :  DB 0C0H,0F9H,0A4H;
       DB 0B0H,99H,92H;
       DB 82H,0F8H,80H;
       DB 90H,0FFH,0BFH;
       END


  
17楼:hendy_CPU 2004年11月1日11:40
 你程序里的MOV A , R1
   

你程序里的MOV A , R1
               CLR C
               RLC A
应该是:mov a, @r1
          clr c 
          rlc a 
          mov @r1,a
----------------------------------------------
下面的:MOV A , R1
          RL A
          MOV R1 ,A
可以删除!
  
18楼:xiongfoolboy 2004年11月1日11:57
 我再补充一些,在调试的时候KEIL出现以
我再补充一些,在调试的时候KEIL出现以下的信息:
C: 0X0000     00         NOP
...
...

C: 0XFFF1      00         NOP
这样的信息从0X0000一直到0XFFF1,请帮我看看呀

  
19楼:hendy_CPU 2004年11月1日12:12
 ???????
建议你先确定是否其它子程序没有错误!或是抛开其它程序只调试你上面发的子程序看是否是你要的结果!!!
  
20楼:xiongfoolboy 2004年11月5日10:43
 关于INC DPTR 指令
又发现了个新问题,我这个程序的INC DPTR是要实现从4000H加到4300H的变化,   但是我的程序中的INC DPTR却在调试中实现的却是从4000H加到4003H的操作,

我要实现从4000H加到4300H的操作,通过INC DPTR能实现吗?
  请高手支招呀


>>>>>>对该主题发表你的看法

本主题贴数20,分页: [第1页]


[上一篇主题]:哪位大侠上传mentor graphics seamless

[下一篇主题]:[求助]