佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 2749|回复: 53

【讨论】我写的Aasembly有问题,但我抓不到虫。。。

[复制链接]
发表于 5-12-2004 11:38 PM | 显示全部楼层 |阅读模式
我写的8051 - Aasembly有问题,但我抓不到虫。。。有谁可以指点指点。。。。。
(只怪平时不努力。。。。)

[ Last edited by louiektc on 21-12-2004 at 10:54 AM ]
回复

使用道具 举报


ADVERTISEMENT

simonloo 该用户已被删除
发表于 6-12-2004 08:19 AM | 显示全部楼层
pkl0001 于 5-12-2004 23:38  说 :
我写的8051 - Aasembly有问题,但我抓不到虫。。。有谁可以指点指点。。。。。
(只怪平时不努力。。。。)


放上來看看吧?
回复

使用道具 举报

 楼主| 发表于 6-12-2004 09:09 PM | 显示全部楼层
simonloo 于 6-12-2004 08:19 AM  说 :

放上來看看吧?



那就献丑了。。。。
回复

使用道具 举报

simonloo 该用户已被删除
发表于 6-12-2004 09:12 PM | 显示全部楼层
pkl0001 于 6-12-2004 21:09  说 :



那就献丑了。。。。


要就快囉, 因為明天一早就要出差,所以.....不過應該還有很多大俠會幫你的。
回复

使用道具 举报

 楼主| 发表于 6-12-2004 09:14 PM | 显示全部楼层
;==============================================
; 89C2051 RS232 VIA PC <9600 N 8 1 >
;==============================================
SENSOR_1_BIT     EQU     20H.0
SENSOR_2_BIT     EQU     20H.1
SENSOR_3_BIT     EQU     20H.2
SENSOR_4_BIT     EQU     20H.3
SENSOR_5_BIT     EQU     20H.4

; Input
SENSOR_1     EQU     P3.7     ; MOTOR_1 Home Sensor
SENSOR_2     EQU     P3.4     ; Sensor_2
SENSOR_3     EQU     P3.5     ; Sensor_3
SENSOR_4     EQU     P3.3     ; Sensor_4
SENSOR_5     EQU     P3.2     ; Sensor_5
SENSOR_6     EQU     P1.7     ; Sensor_6

; Output
LAMP_1     EQU     P1.0     ; LAMP_1 Relay Card
LAMP_2     EQU     P1.2     ; LAMP_2 Relay Card
LAMP_3     EQU     P1.3     ; LAMP_3 Light Relay Card
MOTOR_1    EQU     P1.1     ; MOTOR_1 Relay Card
MOTOR_2    EQU     P1.4     ; MOTOR_2 Relay Card
LED        EQU     P1.5     ; Power LED

;===============START PROGRAM===================
           ORG     0H
           CLR     LED                      ; On LED
           CALL    CLEAR_SENSOR_ALL_BIT     ; Clear Sensor All Bit
           CALL    RS232                    ; Open ComPort 9600 N 8 1

;-----------------------------------------------
START:
; Scan RS232 Comport
          JNB     RI,$               ; Wait Until RI=1
          CLR     RI                 ; Clear RI=0, Then Receive Next Byte
          MOV     A,SBUF             ; Read Data Form PC

          CJNE    A,#'A',CHECK_B     ; If PC Data = "A"
          CALL    A_TABLE            ; Then Jump To A_TABLE - LAMP_1
          JMP     CHECK_B

CHECK_B:  CJNE    A,#'B',CHECK_C     ; If PC Data = "B"
          CALL    B_TABLE            ; Then Jump To B_TABLE - LAMP_2
          JMP     CHECK_C

CHECK_C:  CJNE    A,#'C',CHECK_D     ; If PC Data = "C"
          CALL    C_TABLE            ; Then Jump To C_TABLE - LAMP_3
          JMP     CHECK_D

CHECK_D:  CJNE    A,#'D',CHECK_E     ; If PC Data = "D"
          CALL    D_TABLE            ; Then Jump To D_TABLE - SENSOR_1_BIT
          JMP     CHECK_E

CHECK_E:  CJNE    A,#'E',CHECK_F     ; If PC Data = "E"
          CALL    E_TABLE            ; Then Jump To E_TABLE - SENSOR_2_BIT
          JMP     CHECK_F

CHECK_F:  CJNE    A,#'F',CHECK_G     ; If PC Data = "F"
          CALL    F_TABLE            ; Then Jump To F_TABLE - SENSOR_3_BIT
          JMP     CHECK_G

CHECK_G:  CJNE    A,#'G',CHECK_H     ; If PC Data = "G"
          CALL    G_TABLE            ; Then Jump To G_TABLE - SENSOR_4_BIT
          JMP     CHECK_H

CHECK_H:  CJNE    A,#'H',CHECK_I     ; If PC Data = "H"
          CALL    H_TABLE            ; Then Jump To H_TABLE - SENSOR_5_BIT
          JMP     CHECK_I

CHECK_I:  CJNE    A,#'I',CHECK_J     ; If PC Data = "I"
          CALL    I_TABLE            ; Then Jump To I_TABLE - MOTOR_2
          JMP     CHECK_J

CHECK_J:  CJNE    A,#'J',START       ; If PC Data = "K"
          CALL    J_TABLE            ; Then Jump To K_TABLE - MOTOR_1
          CALL    SHORT_DELAY
          JMP     START

;==================================================================
A_TABLE:
; LAMP_1
          CLR     LAMP_1             ; On LAMP_1 Relay Card
          RET

;------------------------------------------------------------------
B_TABLE:
; LAMP_2
          CLR     LAMP_2             ; On LAMP_2 Relay Card
          RET

;------------------------------------------------------------------
C_TABLE:
; LAMP_3
          CLR     LAMP_3             ; On LAMP_3 Relay Card
          RET

;-----------------------------------------------------------------
D_TABLE:
; SENSOR_1_BIT
          SETB    SENSOR_1_BIT       ; On SENSOR_1_BIT
          RET

;----------------------------------------------------------------
E_TABLE:
; SENSOR_2_BIT
          SETB    SENSOR_2_BIT       ; On SENSOR_2_BIT
          RET

;------------------------------------------------------------------
F_TABLE:
; SENSOR_3_BIT
          SETB    SENSOR_3_BIT       ; On SENSOR_3_BIT
          RET

;------------------------------------------------------------------------
G_TABLE:
; SENSOR_4_BIT
          SETB    SENSOR_4_BIT       ; On SENSOR_4_BIT
          RET

;------------------------------------------------------------------------
H_TABLE:
; SENSOR_5_BIT
          SETB    SENSOR_5_BIT       ; On SENSOR_5_BIT
          RET

;-------------------------------------------------------------------------
I_TABLE:
; MOTOR_2
          CLR     MOTOR_2            ; On MOTOR_2 Relay Card
          RET

;--------------------------------------------------------------------------------
J_TABLE:
; MOTOR_1
          JNB     T1,$               ; Wait Until TI=1
          CLR     TI                 ; Clear TI=0

          JNB     SENSOR_1_BIT,GO_2  ; If SENSOR_1_BIT on, Then Jump To GO_2
GO_1:     CALL    MOTOR_1_MOVING     ; MOTOR_1 Moving
          JB      SENSOR_2,GO_1      ; Scan Sensor_2
          CALL    MOTOR_1_STOP       ; Stop MOTOR_1

          JNB     SENSOR_2_BIT,GO_3
GO_2:     CALL    MOTOR_1_MOVING     ; MOTOR_1 Moving
          JB      SENSOR_3,GO_2      ; Scan Sensor_3
          CALL    MOTOR_1_STOP       ; Stop MOTOR_1

          JNB     SENSOR_3_BIT,GO_4
GO_3:     CALL    MOTOR_1_MOVING     ; MOTOR_1 Moving
          JB      SENSOR_4,GO_3      ; Scan Sensor_4
          CALL    MOTOR_1_STOP       ; Stop MOTOR_1

          JNB     SENSOR_4_BIT,GO_5
GO_4:     CALL    MOTOR_1_MOVING     ; MOTOR_1 Moving
          JB      SENSOR_5,GO_4      ; Scan Sensor_5
          CALL    MOTOR_1_STOP       ; Stop MOTOR_1

          JNB     SENSOR_5_BIT,GO_6
GO_5:     CALL    MOTOR_1_MOVING     ; MOTOR_1 Moving
          JB      SENSOR_6,GO_5      ; Scan Sensor_6
          CALL    MOTOR_1_STOP       ; Stop MOTOR_1

GO_6:     CALL    MOTOR_1_MOVING     ; MOTOR_1 Moving
          JB      SENSOR_1,GO_6      ; Scan MOTOR_1 Home Sensor
          CLR     LAMP_1             ; Off LAMP_1 Relay Card
          CLR     LAMP_2             ; Off LAMP_2 Relay Card
          CLR     LAMP_3             ; Off LAMP_3 Relay Card
          CLR     MOTOR_2            ; Off MOTOR_2 Relay Card
          CLR     MOTOR_1            ; Off MOTOR_1 Relay Card

          CALL    CLEAR_SENSOR_ALL_BIT         ; Clear Sensor Bit
          RET

;==================================================================
RS232:
; 9600 N 8 1
          MOV      SCON,#50H          ; <8 Bit, 1 Stop, Enable Receive>
          MOV      TMOD,#20H          ; Use The Timer 1, Mode 2
          MOV      TH1,#0FDH          ; 9600 Baud Rate
          SETB     TR1                ; Start The Timer 1
          SETB     TI
          RET

;--------------------------------------------------------------
PROG:     DB "     CARI     "
;--------------------------------------------------------------
SHORT_DELAY:
          MOV     R6,#25
A1:       MOV     R7,#25
          DJNZ    R7,$
          DJNZ    R6,A1
          DJNZ    R5,SHORT_DELAY
          RET                      

;-----------------------------------------------------------------
LONG_DELAY:
          MOV     R6,#100
B1:       MOV     R7,#100
          DJNZ    R7,$
          DJNZ    R6,B1
          DJNZ    R5,LONG_DELAY
          RET

;------------------------------------------------------------------
MOTOR_1_MOVING:
          CLR     MOTOR_1          ; On MOTOR_1 Relay Card
          CALL    SHORT_DELAY       
          SETB    MOTOR_1          ; Off MOTOR_1 Relay Card
          CALL    SHORT_DELAY
          RET

;---------------------------------------------------------------
MOTOR_1_STOP:
          CLR    MOTOR_1           ; Off MOTOR_1 Relay Card
          CALL   LONG_DELAY
          RET

;---------------------------------------------------------------
ON_SENSOR_ALL_BIT:

          SETB    SENSOR_1_BIT     ; On SENSOR_1_BIT
          SETB    SENSOR_2_BIT     ; On SENSOR_2_BIT
          SETB    SENSOR_3_BIT     ; On SENSOR_3_BIT
          SETB    SENSOR_4_BIT     ; On SENSOR_4_BIT
          SETB    SENSOR_5_BIT     ; On SENSOR_5_BIT
          RET

;---------------------------------------------------------------
CLEAR_SENSOR_ALL_BIT:

          CLR     SENSOR_1_BIT      ; Clear SENSOR_1_BIT
          CLR     SENSOR_2_BIT      ; Clear SENSOR_2_BIT
          CLR     SENSOR_3_BIT      ; Clear SENSOR_3_BIT
          CLR     SENSOR_4_BIT      ; Clear SENSOR_4_BIT
          CLR     SENSOR_5_BIT      ; Clear SENSOR_5_BIT
          RET

;----------------------------------------------------------------
          END

[ Last edited by pkl0001 on 6-12-2004 at 10:06 PM ]
回复

使用道具 举报

simonloo 该用户已被删除
发表于 6-12-2004 09:34 PM | 显示全部楼层
pkl0001 于 6-12-2004 21:14  说 :
;==============================================
; 89C2051 RS232 VIA PC <9600 N 8 1 >
;==============================================
SENSOR_1_BIT     EQU     20H.0
SENSOR_2_BIT     EQU    ...



加一行 MOV SP,#70h 應該就可以了,因為你有用到R7,而你沒有宣告堆疊位址, 在沒有宣告堆疊時會自動拿07h為堆疊位址, 所以常你執行delay時就會堆疊的資料洗掉, 而使你的單晶片重置, 試試看吧!祝好運
回复

使用道具 举报

Follow Us
simonloo 该用户已被删除
发表于 6-12-2004 09:46 PM | 显示全部楼层
simonloo 于 6-12-2004 21:34  说 :



加一行 MOV SP,#70h 應該就可以了,因為你有用到R7,而你沒有宣告堆疊位址, 在沒有宣告堆疊時會自動拿07h為堆疊位址, 所以常你執行delay時就會堆疊的資料洗掉, 而使你的單晶片重置, 試試看吧!祝好運


是J_Table有問題嗎? 因為你一開始有 SETB TI, 可是一旦執行了J_Table後 TI 就被 CLR 了再也沒有再SETB 過, 而J_Table 有一行 JNB TI,$, 很有可能就在這一直沒有出去。再檢查看看吧。
回复

使用道具 举报

 楼主| 发表于 6-12-2004 10:11 PM | 显示全部楼层
simonloo 于 6-12-2004 09:34 PM  说 :



加一行 MOV SP,#70h 應該就可以了,因為你有用到R7,而你沒有宣告堆疊位址, 在沒有宣告堆疊時會自動拿07h為堆疊位址, 所以常你執行delay時就會堆疊的資料洗掉, 而使你的單晶片重置, 試試看吧!祝好運


其实在书上我经常看到这样的指令MOV SP,#70h,可是我都不是很明白。可能是我不明白8051内部记忆体的原因吧!!

我会试试这招,看看可不可以抓到虫

谢谢!!
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 6-12-2004 10:23 PM | 显示全部楼层
simonloo 于 6-12-2004 09:46 PM  说 :


是J_Table有問題嗎? 因為你一開始有 SETB TI, 可是一旦執行了J_Table後 TI 就被 CLR 了再也沒有再SETB 過, 而J_Table 有一行 JNB TI,$, 很有可能就在這一直沒有出去。再檢查看看吧。



有时候我会把TIRI搞乱,会不知道什么时候SETB什么时候CLR

我会试试把J_Table的JNB T1,$CLR TI拿掉。。

请问TI是不是只要SETB TI之后,就可以不再里会它。。。。。
回复

使用道具 举报

 楼主| 发表于 6-12-2004 10:55 PM | 显示全部楼层
其实经过我反覆在反覆的研究,我觉得问题有可能是出在SENSOR_BIT的身上。。。

因为我记得在我有试过把所有和SENSOR_BIT有关的指令全都拿掉,再测试就没遇到
奇怪的事情。。。。。。。。

不过有可能是J_Table出现了问题。。。
回复

使用道具 举报

 楼主| 发表于 6-12-2004 11:00 PM | 显示全部楼层
请问有没有什么指令可以把INPUT脚DISABLE。
不管INPUT脚有多少次的INPUT,此INPUT脚都不理会直到ENABLE此INPUT脚。。。。。。。
回复

使用道具 举报

 楼主| 发表于 7-12-2004 01:18 AM | 显示全部楼层
simonloo 于 6-12-2004 09:12 PM  说 :

要就快囉, 因為明天一早就要出差,所以.....不過應該還有很多大俠會幫你的。



要出差。。祝你一切顺利噢。。。
回复

使用道具 举报

 楼主| 发表于 8-12-2004 06:50 PM | 显示全部楼层
不行啊!不行啊!

我加了MOV SP,#70h,还是不行。。。。

ORG     OH
MOV     SP,#70h
CLR     LED                      ; On LED
CALL    CLEAR_SENSOR_ALL_BIT     ; Clear Sensor All Bit
CALL    RS232                    ; Open ComPort 9600 N 8 1


我再把JNB T1,$和CLR TI那掉,还是不行。。。。
J_TABLE:
; MOTOR_1

          JNB     SENSOR_1_BIT,GO_2  ; If SENSOR_1_BIT on, Then Jump To GO_2
GO_1:     CALL    MOTOR_1_MOVING     ; MOTOR_1 Moving
          JB      SENSOR_2,GO_1      ; Scan Sensor_2
          CALL    MOTOR_1_STOP       ; Stop MOTOR_1
回复

使用道具 举报

simonloo 该用户已被删除
发表于 9-12-2004 09:17 PM | 显示全部楼层
pkl0001 于 8-12-2004 18:50  说 :
不行啊!不行啊!

我加了MOV SP,#70h,还是不行。。。。

ORG     OH
MOV     SP,#70h
CLR     LED                      ; On LED
CALL    CLEAR_SENSOR_ALL_BIT     ; Clear Sensor ...





改成這樣看,我大概看了一下, 應該改成這樣就可以了。


;===============START PROGRAM===================

                Org        0000h
                Jmp        lblInitial                ; Initial

                Org        0003h
                Reti                        ; Int 0
   
                Org        000Bh
                Reti                        ; Timer0

                Org        0013h
                Reti                        ; Int 1
   
                Org        001Bh
                Reti                        ; Timer1
   
                Org        0023h
                Reti                           ; Uart
               
                Org        0030h                ; Program Initial Pointer
lblInitial:
                Mov        Sp,#70h
                Clr        LED                        ; On LED
                Call        CLEAR_SENSOR_ALL_BIT                ; Clear Sensor All Bit
                Call        RS232                        ; Open ComPort 9600 N 8 1

; 這行以下照你本身的寫法:
;-----------------------------------------------
START:
; Scan RS232 Comport
                Jnb        Ri,$                ; Wait Until RI=1
                Clr        Ri                ; Clear RI=0, Then Receive Next Byte
                MOV        A,Sbuf                ; Read Data Form PC
回复

使用道具 举报

 楼主| 发表于 10-12-2004 01:06 AM | 显示全部楼层
simonloo 于 9-12-2004 09:17 PM  说 :

改成這樣看,我大概看了一下, 應該改成這樣就可以了。   ...


出差回来啦!一切顺利吧!!
好!让我试试看再回复你!先谢了!!
回复

使用道具 举报

simonloo 该用户已被删除
发表于 10-12-2004 02:03 AM | 显示全部楼层
pkl0001 于 10-12-2004 01:06  说 :


出差回来啦!一切顺利吧!!
好!让我试试看再回复你!先谢了!!



沒有, 還在工地, 不過網路好了, 可以上網就先回你而已。
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 11-12-2004 11:10 AM | 显示全部楼层
Simon大大,我已经试过你的方法了。。。。。不行啊。。。。。。

我已经投降了!我想是应该从新写过。

等我写好了,再让你过目。谢谢你的一路来的帮忙。。。。
回复

使用道具 举报

发表于 11-12-2004 07:54 PM | 显示全部楼层
呵呵!老大!这次又是什么问题了?

可以帮得上忙的,我就试试看吧……
回复

使用道具 举报

 楼主| 发表于 12-12-2004 10:55 PM | 显示全部楼层
faiko 于 11-12-2004 07:54 PM  说 :
呵呵!老大!这次又是什么问题了?

可以帮得上忙的,我就试试看吧……



嗨!你好!你愿意帮忙我真的又高兴,又可以互相讨论和研究。。。真的谢谢你。。。


说来话长。。。。。。。总之是很难搞啦!!

五楼是我原有的程式,问题还不知道出在哪里。。。
但初步估计是SENSOR_*_BIT的问题。
因为在我没加SENSOR_*_BIT之前是没有问题的。。。。

你看得懂程式的动作吗?不然等我画好流程图,再放上来让你过目。。。。。。
需要.hex档案吗?我迟些SEND给你。。。。
回复

使用道具 举报

发表于 14-12-2004 10:26 PM | 显示全部楼层
pkl0001 于 12-12-2004 10:55 PM  说 :



嗨!你好!你愿意帮忙我真的又高兴,又可以互相讨论和研究。。。真的谢谢你。。。


说来话长。。。。。。。总之是很难搞啦!!

五楼是我原有的程式,问题还不知道出在哪里。。。
但初步估计是SENSO ...


没有问题~~~!!大家都是交流交流罢了。我也是闲着在家没事做……刚刚才连线上网。
已经收到你的HEX了。慢慢参悟你的原码。迟些答复你!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 16-6-2024 06:41 PM , Processed in 0.079626 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表