打印

关于keil 编译的问题

[复制链接]
3294|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yl520|  楼主 | 2008-1-23 10:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这段时间做了一个时钟的程序。硬件什么的都准备好了。

软件写好了,上keil编译,出现点问题,不知道是KEIL本身的事,还是我的程序的问题。
主要现象是这样的,编译后发现错误,指示为第一条的EQU指令错误。但我实在发现不了是啥错误,没办法我就把EQU指令取消了。但再编译还是出现错误,还是指向第一条指令,这次是ORG指令,我就晕了。

后来我又拿了一个朋友的程序(此程序,已经在工作了)进行编译,也是第一条指令错误,所以就怀疑是不是KEIL本身有问题啊,但不敢肯定,所以求教各位大虾,给指点指点。

相关帖子

沙发
yl520|  楼主 | 2008-1-23 10:52 | 只看该作者

我把程序也粘过来,哪位高手有空指点指点.

        DIS0 EQU 30H
    DIS1 EQU 31H
    DIS2 EQU 32H
    DIS3 EQU 33H
    DIS4 EQU 34H
    DIS5 EQU 35H
    TIME1 EQU 36H
    TIME2 EQU 37H
    ORG    0000H
    LJMP ZHU
    ORG    001BH
    LJMP TT
    ORG 0030H
ZHU:MOV    SP,#6FH    ;堆栈指针
    MOV    TMOD,#10H    ;计数器工作方式
    MOV    TH1,#3CH    ;赋初值
    MOV    TL1,#B0H    
    SETB EA    ;开中断
    SETB ET1    ;开定时器T1中断
    SETB TR1    ;启动T1
    MOV    50H,#20    ;定时1秒循环次数
    MOV    51H,#60    ;定时一分循环次数    
    MOV    52H,#60    ;定时一小时循环次数    
    MOV    53H,#24    ;定时一天循环次数
    MOV    54H,#7    
    CLR    F0    ;清标志位
OO:    LCALL MOD    ;调显示子程序
    LCALL START    ;调整子程序
    LJMP OO
TT:    MOV    TH1,#3CH    ;重赋初值    
    MOV    TL1,#B0H
    DJNZ 50H,TT1    ;未到一秒继续循环
    MOV    50H,#20    
    INC    55H    ;到一秒,秒计数单元加1
    MOV    A,55H
    MOV    B,#10
    DIV    AB    ;分离秒计数单元个位十位
    MOV    DIS4,A    ;秒十位存储
    MOV    DIS5,B    ;秒个位存储
    MOV    A,51H    ;    
    CJNE A,55H,TT1    ;未到一分继续循环    
    INC    56H    ;到一分,分计数单元加1
    MOV    A,56H
    MOV    B,#10
    DIV    AB    ;分离分计数单元个十们
    MOV    DIS2,A    ;分十位存储
    MOV    DIS3,B    ;分个位存储
    MOV    55H,#00H    ;到一分秒计数单元清0    
    MOV    A,52H    
    CJNE A,56H,TT1    ;未到一小时继续循环    
    INC    57H    ;到一小时小时计数单元加1
    MOV    A,57H
    MOV    B,#10
    DIV    AB    ;分离小时计数单元个位十位
    MOV    DIS0,A    ;存小时高十位
    MOV     DIS1,B    ;存小时个位    
    MOV    56H,#00H    ;到一小时分计数单元清0    
    MOV    A,53H    
    CJNE A,57H,TT1    ;未到一天继续循环
    MOV    57H,#00H    ;一天,小时清0    
TT1:RETI
MOD:PUSH ACC    ;保护现场
    PUSH DPH
    PUSH DPL
    MOV    R0,#DIS0    ;指向显示缓冲区首单元
    MOV    R6,20H    ;选中最左数码管
    MOV    R7,00H    ;显示延时值
    MOV    A,#00H    ;位选口清0
    MOV    P2,A
DIR:MOV    A,R0    ;取要显示的数    
    MOV    DPTR,#WEI    ;指向字形表首址
    MOVC A,@A+DPTR    ;查表得字形码
    MOV    P0,A    ;送字形码
    MOV    A,R6    ;取位选字    
    MOV    P2,A    ;送位选字
YAN:DJNE R7,YAN    ;显示延时
    INC    R0    ;更新显示单元
    CLR    C
    MOV    A,R6    ;取位选字
    RRC    A    ;位选字右移
    MOV    R6,A    ;更新位选单元
    JNZ    DIR    ;A不等于0继续循环    
    POP    DPL    ;恢复现场
    POP    DPH
    POP    ACC
    RET
START:  CLR     C
        MOV A,#0FFH    ;置输入方式
    MOV    P1,A
    MOV    A,P1    ;键状态输入
    MOV    R4,#0    ;初始键号
LP:    RRC     A
        JNC    N1    ;C等于0,有键按下
    INC    R4
    DJNZ 54H,LP1
    MOV    R4,#00H    ;过7清0
    MOV    54H,#7
LP1:SJMP LP
N1:    LCALL DLY-6MS
    JC NEXT
    JB F0,GAI    ;叛别是第几次按下功能键,第一次顺序执行
    CJNE R4,#00H,NEXT    ;叛别是否第一功能键按下,IF否则转
    MOV    DIS0,#00H    ;清秒计数单元为0
    SETB F0    ;置标志位
    CLR    ET1    ;关中断
    CLR    TR1    ;关定时
    LJMP NEXT
GAI:CJNE R4,#00H,L1    ;第二次按键转到此,如不是功能键则转
    LJMP RES
L1:    CJNE R4,#01H,L2    ;如按键为分加一键,则顺序执行
    INC    56H    ;分计数单元加1
    MOV    A,56H
    CJNE A,#60,NEXT
    MOV    56H,#00H
    LJMP NEXT
L2:    CJNE R4,#02H,NEXT
    INC    57H
    MOV    A,57H
    CJNE A,#24,NEXT
    MOV    57H,#00H
    LJMP NEXT
RES:CLR    F0
    SETB TR1
    SETB ET1
NEXT:RET
DLY-6MS:MOV    TIME1,#10
L3:    MOV    TIME2,#120
L4:    NOP
    NOP
    DJNZ TIME2,L4
    DJNZ TIME1,L3
    RET
WEI:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH    ;0,1,2,3,4,5,6,7,8,9,    
    END

使用特权

评论回复
板凳
yl520|  楼主 | 2008-1-23 10:59 | 只看该作者

硬件部分

使用特权

评论回复
地板
yl520|  楼主 | 2008-1-23 15:02 | 只看该作者

怎么没有人来指点呢

使用特权

评论回复
5
dai_weis| | 2008-1-23 20:49 | 只看该作者

我用keil只是写过C程序,汇编不清楚

也许需要某些类似C的头文件的一些预定义文件 

使用特权

评论回复
6
yl520|  楼主 | 2008-1-24 07:46 | 只看该作者

还是一样的

改了还是不行啊

那附近的错误也没有什么啊

我还特意的找了一个可以运行的程序编译,但还是一样.

使用特权

评论回复
7
yl520|  楼主 | 2008-1-24 10:47 | 只看该作者

硬件部分

这是本程序的硬件部分.https://bbs.21ic.com/upfiles/img/20081/2008124104629575.jpg[img][img]https://bbs.21ic.com/upfiles/img/20081/2008124104629575.jpg[img][/img]

使用特权

评论回复
8
yl520|  楼主 | 2008-1-24 10:49 | 只看该作者

看下这个行不行

https://bbs.21ic.com/upfiles/img/20081/2008124104629575.jpg

使用特权

评论回复
9
yl520|  楼主 | 2008-2-28 17:09 | 只看该作者

高手啊.

帮我一下啊.

使用特权

评论回复
10
后学| | 2008-2-28 22:18 | 只看该作者

re

1、标号和程序不要写在一起,分开成两行;
2、不要定义可能与系统保留的标号冲突的变量或常量,如TIME等;
3、先把程序尽量注释掉,保留能通过编译的版本;
4、直接拷贝程序可能有问题,试着把.asm和.uv3也拷贝过来;
5、从网上下载一个可靠的keil安装;

不好意思,家里电脑没有keil,没法帮你试验了;

使用特权

评论回复
11
ayb_ice| | 2008-2-29 14:10 | 只看该作者

测试一下KEIL自带的例子就清楚了

使用特权

评论回复
12
xwj| | 2008-2-29 18:59 | 只看该作者

一定要把扩展名改成.ASM或.A51或.SRC

;否则不会默认用汇编编译器来编译,而你又肯定不会设置它
;
;帮你修改了一些语法错误,主要是
;变量名和系统保留的标号冲突
;DJNZ打成DJNE
;
;DLY-6MS:MOV    TIME1,#10
;改为 DLY_6MS:
;因为 - 是减号
;
;等...


    DIS0 EQU 30H
    DIS1 EQU 31H
    DIS2 EQU 32H
    DIS3 EQU 33H
    DIS4 EQU 34H
    DIS5 EQU 35H
    TIME1 EQU 36H
    TIME2 EQU 37H
    ORG    0000H
    LJMP ZHU
    ORG    001BH
    LJMP TT
    ORG 0030H
ZHU:MOV    SP,#6FH    ;堆栈指针
    MOV    TMOD,#10H    ;计数器工作方式
    MOV    TH1,#3CH    ;赋初值
    MOV    TL1,#0B0H    
    SETB EA    ;开中断
    SETB ET1    ;开定时器T1中断
    SETB TR1    ;启动T1
    MOV    50H,#20    ;定时1秒循环次数
    MOV    51H,#60    ;定时一分循环次数    
    MOV    52H,#60    ;定时一小时循环次数    
    MOV    53H,#24    ;定时一天循环次数
    MOV    54H,#7    
    CLR    F0    ;清标志位
OO:
    LCALL MOD1    ;调显示子程序
    LCALL START    ;调整子程序
    LJMP OO
TT: 
    MOV    TH1,#3CH    ;重赋初值    
    MOV    TL1,#0B0H
    DJNZ 50H,TT1    ;未到一秒继续循环
    MOV    50H,#20    
    INC    55H    ;到一秒,秒计数单元加1
    MOV    A,55H
    MOV    B,#10
    DIV    AB    ;分离秒计数单元个位十位
    MOV    DIS4,A    ;秒十位存储
    MOV    DIS5,B    ;秒个位存储
    MOV    A,51H    ;    
    CJNE A,55H,TT1    ;未到一分继续循环    
    INC    56H    ;到一分,分计数单元加1
    MOV    A,56H
    MOV    B,#10
    DIV    AB    ;分离分计数单元个十们
    MOV    DIS2,A    ;分十位存储
    MOV    DIS3,B    ;分个位存储
    MOV    55H,#00H    ;到一分秒计数单元清0    
    MOV    A,52H    
    CJNE A,56H,TT1    ;未到一小时继续循环    
    INC    57H    ;到一小时小时计数单元加1
    MOV    A,57H
    MOV    B,#10
    DIV    AB    ;分离小时计数单元个位十位
    MOV    DIS0,A    ;存小时高十位
    MOV     DIS1,B    ;存小时个位    
    MOV    56H,#00H    ;到一小时分计数单元清0    
    MOV    A,53H    
    CJNE A,57H,TT1    ;未到一天继续循环
    MOV    57H,#00H    ;一天,小时清0    
TT1:RETI
MOD1:PUSH ACC    ;保护现场
    PUSH DPH
    PUSH DPL
    MOV    R0,#DIS0    ;指向显示缓冲区首单元
    MOV    R6,20H    ;选中最左数码管
    MOV    R7,00H    ;显示延时值
    MOV    A,#00H    ;位选口清0
    MOV    P2,A
DIR:MOV    A,R0    ;取要显示的数    
    MOV    DPTR,#WEI    ;指向字形表首址
    MOVC A,@A+DPTR    ;查表得字形码
    MOV    P0,A    ;送字形码
    MOV    A,R6    ;取位选字    
    MOV    P2,A    ;送位选字
YAN:
    DJNZ R7,YAN    ;显示延时
    INC    R0    ;更新显示单元
    CLR    C
    MOV    A,R6    ;取位选字
    RRC    A    ;位选字右移
    MOV    R6,A    ;更新位选单元
    JNZ    DIR    ;A不等于0继续循环    
    POP    DPL    ;恢复现场
    POP    DPH
    POP    ACC
    RET
START:  CLR     C
    MOV A,#0FFH    ;置输入方式
    MOV    P1,A
    MOV    A,P1    ;键状态输入
    MOV    R4,#0    ;初始键号
LP2:
    RRC     A
    JNC    N1    ;C等于0,有键按下
    INC    R4
    DJNZ 54H,LP1
    MOV    R4,#00H    ;过7清0
    MOV    54H,#7
LP1:
    SJMP LP2
N1:
    LCALL DLY_6MS
    JC NEXT
    JB F0,GAI    ;叛别是第几次按下功能键,第一次顺序执行
    CJNE R4,#00H,NEXT    ;叛别是否第一功能键按下,IF否则转
    MOV    DIS0,#00H    ;清秒计数单元为0
    SETB F0    ;置标志位
    CLR    ET1    ;关中断
    CLR    TR1    ;关定时
    LJMP NEXT
GAI:CJNE R4,#00H,L1    ;第二次按键转到此,如不是功能键则转
    LJMP RES
L1:    CJNE R4,#01H,L2    ;如按键为分加一键,则顺序执行
    INC    56H    ;分计数单元加1
    MOV    A,56H
    CJNE A,#60,NEXT
    MOV    56H,#00H
    LJMP NEXT
L2:    CJNE R4,#02H,NEXT
    INC    57H
    MOV    A,57H
    CJNE A,#24,NEXT
    MOV    57H,#00H
    LJMP NEXT
RES:CLR    F0
    SETB TR1
    SETB ET1
NEXT:RET
DLY_6MS:
    MOV    TIME1,#10
L3:    MOV    TIME2,#120
L4:    NOP
    NOP
    DJNZ TIME2,L4
    DJNZ TIME1,L3
    RET
WEI:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH    ;0,1,2,3,4,5,6,7,8,9,    
    END

;本程序由xwj设计的UltraEdit脚本加亮显示,如需要脚本请访问我的Blog或联系xwjfile@21cn.com

使用特权

评论回复
13
ligaoyang| | 2008-2-29 23:22 | 只看该作者

程序扩展名对否?

楼上说的不错,虽然还有很多其它的语法错误,但第一条就出错,应该是汇编程序取错了扩展名吧!

使用特权

评论回复
14
杨工| | 2008-3-1 00:40 | 只看该作者

错误可能出在.h文件

从你贴的程序看,前面应该有#include语句。
否则不可能通过编译。错误可能出在.h文件
检查报错之前的#include文件

使用特权

评论回复
15
oahzhao| | 2008-3-1 16:24 | 只看该作者

汇编一般不需要加#include语句的吧

汇编一般不需要加#include语句的吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

55

帖子

1

粉丝