帮忙看看这程序,为何不成功!


这是我打算用51机做一个类似家庭摇控器发射的信号的程序,不知为何不成功,请帮我看看。
程序是这样的,先等待3秒,然后发送引导码,再发送8位地址码与8位操作码。

;===============================red_FZ信号发射程序==========================================
;信号发射程序
;发射时先发射引导码,再发射地址码与操作码
;引导码由4.5ms的低电平与4.5ms高电平组成
;而地址码与操作码的0与1,用0.56ms的低电平与0.56ms高电平表示0,用0.56ms的低电平与1.685ms的高电平表示
;系统采用 AT89C51 进行编码实验, fosc = 12 MHz
;时间:2008-10-1
;作者:success
;=========================================================================================
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN: CLR P1.0
NOP
SETB P1.0
LOOP: LJMP DELAY_4 ;延时3秒
LJMP DELAY_4
LJMP DELAY_4
CLR P1.0 ;发送引导码
LJMP DELAY_1
SETB P1.0
LJMP DELAY_1

LJMP CODE0 ;发送8位地址码01010101
LJMP CODE1
LJMP CODE0
LJMP CODE1
LJMP CODE0
LJMP CODE1
LJMP CODE0
LJMP CODE1
LJMP CODE0 ;发送8位操作码00011101
LJMP CODE0
LJMP CODE0
LJMP CODE1
LJMP CODE1
LJMP CODE1
LJMP CODE0
LJMP CODE1
LJMP LOOP

;-----------0-------------------------------------
CODE0: CLR p1.0
LJMP DELAY_2
SETB P1.0
LJMP DELAY_2
RET
;-----------1-------------------------------------
CODE1: CLR P1.0
LJMP DELAY_2
SETB P1.0
LJMP DELAY_3
RET
;---------DELAY4500uS-----------------------------
DELAY_1: MOV R4,#10 ;延时子程序1,延时4500微秒
D1:  MOV R5,#225
     DJNZ R5,$
     DJNZ R4,D1
     RET
;---------DELAY0.56MS-----------------------------
DELAY_2: MOV R4,#10 ;延时子程序2,延时560微秒
D2:  MOV R5,#27
     DJNZ R5,$
     DJNZ R4,D2
    RET
;---------DELAY1685uS-----------------------------
DELAY_3: MOV R4,#10 ;延时子程序3,延时1685微秒
D3: MOV R5,#83
DJNZ R5,$
DJNZ R4,D3
RET
;---------DELAY1S---------------------------------
DELAY_4: MOV R4,#20 ;延时子程序4,延时10000微秒
D4: MOV R5,#250
DJNZ R5,$
DJNZ R4,D4
RET

        END

red_FZ.rar
(2008-09-29 15:46:55, Size: 673 B , Downloads: 0)


我也来说两句 查看全部回复

最新回复

  • budhy (2008-9-29 16:53:55)

    QUOTE:

    原帖由 cnsuccess 于 2008-9-29 15:46 发表
    这是我打算用51机做一个类似家庭摇控器发射的信号的程序,不知为何不成功,请帮我看看。
    程序是这样的,先等待3秒,然后发送引导码,再发送8位地址码与8位操作码。

    ;===============================red_FZ信号发射程序====== ...

    CODE:

    ORG 0000H
    SJMP MAIN
    ORG 0030H
    MAIN: CLR P1.0
    NOP
    SETB P1.0
    LOOP: LJMP DELAY_4 ;延时3秒
    LJMP DELAY_4
    LJMP DELAY_4
    CLR P1.0 ;发送引导码
    LJMP DELAY_1
    SETB P1.0
    LJMP DELAY_1
    你懂得 LJMP 是什么意思吗?
    你程序里的 LJMP 应该是 LCALL,不是 LJMP。
  • cnsuccess (2008-9-30 09:53:15)

    LCALL是用于调用子程序的。LJMP是主程序中用来跳转。LJMP不可以用作子程序的跳转,不然跳过去就回不来了。

    操都这把年纪了,还出现这样的错误。
  • budhy (2008-9-30 09:57:44)

    QUOTE:

    原帖由 cnsuccess 于 2008-9-30 09:53 发表
    LCALL是用于调用子程序的。LJMP是主程序中用来跳转。LJMP不可以用作子程序的跳转,不然跳过去就回不来了。

    操都这把年纪了,还出现这样的错误。
    回答的真好,那么就可以继续你得试验了。