用c51出现的问题

jswx15   2008-6-5 17:43 楼主
我编写了个光电转速测量程序,但是用keil51调试时老是出现说是code-address expected或者是data-address expexted,不知道这到底是什么问题,下面是我的程序:         BUF EQU  5AH
         spcoun EQU 59H
         COUNT  EQU   57H
         SPCALC   bit  00H
         ORG 0000H
         AJMP  START
         ORG  1BH
         JMP  TL1
START:   mov sp,#5FH
         MOV P2,#0FFH
         MOV P0,#0FFH
         MOV TMOD,#25h
         MOV TH1, #9CH
         MOV TL1, #9CH
         SETB  TR1
         SETB  ET1
         SETB  EA
         MOV   COUNT,#0H
LOOP:    JNB SPCALC,LOOP
         mov A, spcoun+1
         mov B,#10      ;当有6个叶轮时
         mul AB
                 MOV A,B
         MOV R5,#5
         SUBB A,R5
         JC   TCL1
         MOV  P2.0,#0
         JMP   CHAGN
TCL1:    MOV   P2.1,#0
CHAGN:   MOV A,SPCOUN
         MOV B,#10
         DIV AB
         MOV DPTR,#DISPTAB
         MOVC A, @A+DPTR
         MOV BUF,A
         MOV A,B
         MOVC A,@A+DPTR
         MOV BUF+1,A
DISP:    MOV R0,#BUF
         MOV R2,#2
         MOV ACC,#01111111H
S1:      PUSH ACC
         MOV A,@R0
         MOV P0,A
         POP ACC
         MOV P2,ACC
         RR  A
         INC  R0
         DJNZ R2,S1
         Jmp   LOOP
TL1:     PUSH ACC
         PUSH PSW
         CLR  ET0
         CLR  ET1
         MOV   TL0,#00H
         MOV  TH0,#00H
         MOV TL1,#9CH
         MOV  TH1,#9CH
         MOV  R5,#10000
         CLR TF1
         SETB  TR0
         SETB  TR1
FWAIT:   JNB  TF0,FWAIT0
FWAIT1:  DJNZ R5,FWAIT2
         CLR TR0
         CLR TR1
         MOV spcoun,TH0
         MOV spcoun,TL0
         CLR  A
         MOV  TH0,A
         MOV  TL0,A
         SETB  SPCOUN
         MOV COUNT,#0
         JMP  INTEND
FWAIT2: CLR TF0
FWAIT0: SJMP FWAIT
        POP PSW
        POP ACC
INTEND: RETI
DISPTAB        :DB 0CH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
RET
END                       

回复评论 (8)

初学者,请各位大侠不要见怪
点赞  2008-6-5 17:49
我自己找到错误了
点赞  2008-6-5 23:46
在KEIL里写ASM先把生成工程时自带的那个A51文件去掉

其它的看看还有啥?
点赞  2008-6-6 11:59
引用: 引用 2 楼 xyckucky 的回复:
我自己找到错误了


??
点赞  2008-6-6 13:52
又出现了问题,好不容易拼拼凑凑出来的程序,然后又是有些错误,请大侠帮忙看一下,这是我修改后的程序,没有错误,但是得不出结果,不知道是什么原因
   BUF EQU  30h
         spcoun EQU 33h
         SPCALC   bit  00H;运算标志位
            ORG 0000H
             JMP  START
             ORG  000BH   ;定时中断0入口
             JMP  TLL1     
         ORG 30H
START:   MOV R4,#0H
         mov sp,#5FH
         MOV P2,#0FFH
             MOV P1,#0FFH
         MOV TMOD,#01010001b;T0定时,T1计数,都为方式1
         MOV TH0, #HIGH(65536-5000) ;装入计数初值
         MOV TL0, #LOW(65536-5000 )
                 MOV TH1,#00H
                 MOV TL1,#00H
         SETB  TR0      
         SETB  ET0      ;T0开中断
         SETB  EA
LOOP:    JNB SPCALC,LOOP   
         mov A, spcoun
         mov B,#10      ;当有6个叶轮时
         mul AB
         MOV R1,A       ;将低8位数字保存在R1中
         MOV R5,#5
         SUBB A,R5        ;判断转的圈数
         JC   TCL1       ;不超过5时,绿灯亮
              CLR  P1.7   ;当超过五时,红灯亮
         JMP   CHAGN
TCL1:    CLR P1.6    ;不超过5时,绿灯亮
CHAGN:   MOV A,R1    ;计数器
         MOV B,#10   ;16进制转化成10进制
             DIV AB      ;十位数保存在A中,个位数字在B中
         MOV DPTR,#DISPTAB
             MOVC A, @A+DPTR
             MOV BUF,A
             MOV A,B
             MOVC A,@A+DPTR
             MOV BUF+1,A
         CLR SPCALC   ;清除运算标志运算   
         Jmp  $  ;等待中断
TLL1:     PUSH ACC   ;ACC入栈
         PUSH PSW    ;PSW入栈
         SETB RS1       ;启动工作区1
                 SETB ET1                 ;T1开中断
         JNB TR1,STR0
         JMP G1
STR0:    SETB TR1
G1:      INC R4       ;每过5ms,寄存器计数加1
         MOV A,R4
         CJNE A,#201,GO2
         CLR TR1
         MOV spcoun,TL1
         CLR A
         MOV TL1,A
                 MOV TH1,A
         SETB SPCALC
         MOV R4,#0H
GO2:     MOV R0,#BUF     ;数码显示程序
         MOV A,@R0         
             MOV P2,A
         SETB P1.1
             CLR P1.0
               
         INC R0
         MOV A,@R0
         SETB P1.0
         CLR P1.1
         MOV P2,A
          MOV TH0, #HIGH(65536-5000) ;装入计数初值
         MOV TL0, #LOW(65536-5000 )
         POP PSW
         POP ACC
         RETI

DISPTAB        :DB 0CH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
RET
END       
点赞  2008-6-7 01:02
***************************************************************************

思想决定行动,行动决定习惯,习惯决定命运.
程序员在深圳QQ群,交流产生思想碰撞.

部份专业群:
程序员在深圳c++群15195967
程序员在深圳英语学习群:23864353
程序员在深圳c++Ⅱ17409451
程序员在深圳嵌入式开发群37489763
程序员在深圳移动开发群31501597
程序员在深圳创业群33653422

部份高级程序员群:
高级群I:17538442
高级群II:7120862

部份初、中级程序员群:
第三群:2650485
第五群:29537639
第四群:28702746
第六群:10590618
第七群:10543585
第八群:12006492
第九群:19063074
第十群:2883885
第十一群:25460595
第十二群:9663807

深圳程序员QQ群联盟成立三年多,拥有三十个以上的QQ群,人数超二千多人,大量经验丰富的老手,成员从业于大公司(如微软、IBM,SUN,华为

)、来自国内著名高校和研究院成员,和有丰富实践经验的高级程序员、系统分析员(包括参加过上亿元的项目的架构师),有很热爱技术的成员

(包括自己写操作系统),还有少数女程序员。推荐:深程高级群I:17538442 深程高级群II:7120862 (深程高级群不欢迎新手,如果在深圳,月薪

6K以下的别加入) c++:15195967  mobile:31501597嵌入式:37489763  
——————————————————————————————————————————
如果你不是第一次看到此广告,说明我们最近T了一些人,因为我们要不断提升群的质量,保证名副其实.
-------------------------------------------------------------------------------------
在通过电邮、新闻组或者聊天室提出技术问题前,检查你有没有做到:
      1. 通读手册,试着自己找答案。
      2. 在FAQ里找答案(一份维护得好的FAQ可以包罗万象:)。
      3. 在网上搜索(个人推荐google~)。
      4. 向你身边精于此道的朋友打听。
我想我们首先应该靠自己解决问题,然后才是问!

*****************************************************************************
点赞  2008-6-12 08:13
T1中断入口没写,001BH.t1中断和t0中断是两个入口地址
点赞  2008-6-14 12:49
把出错信息贴上来。。。
点赞  2008-6-15 00:59
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复