痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
查看: 4271|回復: 9

keil 軟體 組合語言 問題 485通訊

[複製鏈接]
發表於 2012-9-5 10:35:03 | 顯示全部樓層 |閱讀模式
本帖最後由 zuoso2006 於 2012-9-5 10:49 AM 編輯

大大
       小弟最近用8051透過max485作通訊溝通用組語編寫一值有問題
還有AJMP  與 JMP 指令 有差很多嗎???  用起來不知道差在哪裡 請大大指點指點

to 8051.jpg



以下程式接收485訊號,只能接收一次第二次就不能不知為什麼 (編譯沒有問題)
;=============================================
        ORG 0000H
         SBIT  X16=P1.6
         MOV TMOD,#00100000B
         MOV TH1,#230         ;設定1200 bit
         MOV TL1,#230         ;設定1200 bit
         SETB TR1           
         MOV SCON,#01110000B

LOOP:      CLR P3.6          
WAIT:
          JNB  P1.4,PP4
          JNB  P1.0,PPP               
              JNB  P1.1,PP1
              JNB  P1.2,PP2
              JNB  P1.3,PP3
          JNB  P1.5,PP5
          JNB  P1.6,PP7
          JNB  P1.7,PP8
          JNB RI,WAIT
                  AJMP LOOP1
;=================================將這段紅色虛線到下一段虛線剪下貼到藍色線就會有問題
PPP:
      CLR TI
          SETB P3.6               3.6 =1就是發送
          MOV  A,#06H                         
          MOV SBUF,A
          JNB TI ,$
       JMP PP6

PP1:
      CLR TI
          SETB P3.6         3.6 =1就是發送
          MOV  A,#07H
          MOV SBUF,A
          JNB TI ,$
       JMP PP6

PP2:
      CLR TI
         SETB P3.6                3.6 =1就是發送
          MOV  A,#08H
          MOV SBUF,A
          JNB TI ,$
       JMP PP6

PP3:
        CLR TI
        SETB P3.6                 ;P3.6 =1就是發送
        MOV  A,#09H
        MOV SBUF,A
        JNB TI ,$
        JMP PP6

PP4:     CLR TI
         SETB P3.6                 ;P3.6 =1就是發送
         MOV  A,#00001010B   ;發送值10 出去
         MOV SBUF,A
         JNB TI ,$
         JMP PP6

PP5:   CLR TI
       SETB P3.6              ;P3.6 =1就是發送
       MOV  A,#00001011B      ;發送值11 出去
       MOV SBUF,A  
       JMP PP6

PP7:   CLR TI
       SETB P3.6              ;P3.6 =1就是發送
       MOV  A,#00001100B      ;發送值12 出去
       MOV SBUF,A  
       JMP PP6

PP8:   CLR TI
       SETB P3.6              ;P3.6 =1就是發送
       MOV  A,#00001101B      ;發送值13 出去
       MOV SBUF,A  
       JMP PP6

PP6:  MOV  R0  ,P1            ;按鈕放開後再執行
      CALL DELAY
      CJNE R0,#11111111B,PP6
      JMP LOOP

;====================================================

LOOP1:  CLR P3.6
            MOV A,SBUF
       
        CJNE A,#01H,LOP1
        AJMP LOAD1
        
LOP1:        CJNE A,#02H,LOP2
        AJMP LOAD2
               
LOP2:   CJNE A,#03H,LOP3
        AJMP LOAD3

LOP3:   CJNE A,#04H,LOP4
        AJMP LOAD4

LOP4:   CJNE A,#05H,LOP5
        AJMP LOAD5

LOP5:   CJNE A,#06H,LOP6
        AJMP LOAD6

LOP6:   CJNE A,#07H,LOP7
        AJMP LOAD7

LOP7:   CJNE A,#08H,LOP
        AJMP LOAD8

LOP:    AJMP LOOP
                 
LOAD1:  CLR P0.0
        AJMP  LOOP

LOAD2: CLR P0.1
        AJMP LOOP

LOAD3: CLR P0.2
        AJMP LOOP

LOAD4: CLR P0.3
        AJMP LOOP

LOAD5: CLR P0.4
        AJMP LOOP

LOAD6: CLR P0.5
        AJMP LOOP

LOAD7: CLR P0.6
        AJMP LOOP

LOAD8: MOV P0,#11111111B
        AJMP LOOP
;========================================
DELAY: MOV R1 ,#5
S50:  MOV R2 ,#255
           DJNZ R2 ,$
           DJNZ  R1 ,S50
           RET
           END
;=========================================================



以下編譯就會有問題 搞不懂哪裡錯了    只是位置對調 為什麼會有問題ㄋ?????
請好心大大指點
;========================================================
      ORG 0000H
         SBIT  X16=P1.6
         MOV TMOD,#00100000B
         MOV TH1,#230         ;設定1200 bit
         MOV TL1,#230         ;設定1200 bit
         SETB TR1           
         MOV SCON,#01110000B

LOOP:     CLR P3.6           
WAIT:
          JNB  P1.4,PP4
          JNB  P1.0,PPP               
              JNB  P1.1,PP1
              JNB  P1.2,PP2
              JNB  P1.3,PP3
          JNB  P1.5,PP5
          JNB  P1.6,PP7
          JNB  P1.7,PP8
          JNB RI,WAIT
                  AJMP LOOP1

LOOP1:  CLR P3.6
            MOV A,SBUF
       
        CJNE A,#01H,LOP1
        AJMP LOAD1
        
LOP1:        CJNE A,#02H,LOP2
        AJMP LOAD2
               
LOP2:   CJNE A,#03H,LOP3
        AJMP LOAD3

LOP3:   CJNE A,#04H,LOP4
        AJMP LOAD4

LOP4:   CJNE A,#05H,LOP5
        AJMP LOAD5

LOP5:   CJNE A,#06H,LOP6
        AJMP LOAD6

LOP6:   CJNE A,#07H,LOP7
        AJMP LOAD7

LOP7:   CJNE A,#08H,LOP
        AJMP LOAD8

LOP:    AJMP LOOP
                 
LOAD1:  CLR P0.0
        AJMP  LOOP

LOAD2: CLR P0.1
        AJMP LOOP

LOAD3: CLR P0.2
        AJMP LOOP

LOAD4: CLR P0.3
        AJMP LOOP

LOAD5: CLR P0.4
        AJMP LOOP

LOAD6: CLR P0.5
        AJMP LOOP

LOAD7: CLR P0.6
        AJMP LOOP

LOAD8: MOV P0,#11111111B
        AJMP LOOP


;========================================

;=================================將這段紅色虛線到下一段虛線剪下貼到藍色線就會有問題
PPP:
      CLR TI
          SETB P3.6               ;P3.6 =1就是發送
          MOV  A,#06H                         
          MOV SBUF,A
          JNB TI ,$
       JMP PP6

PP1:
      CLR TI
          SETB P3.6         ;P3.6 =1就是發送
          MOV  A,#07H
          MOV SBUF,A
          JNB TI ,$
       JMP PP6

PP2:
      CLR TI
         SETB P3.6                ;P3.6 =1就是發送
          MOV  A,#08H
          MOV SBUF,A
          JNB TI ,$
       JMP PP6

PP3:
        CLR TI
        SETB P3.6                 ;P3.6 =1就是發送
        MOV  A,#09H
        MOV SBUF,A
        JNB TI ,$
        JMP PP6

PP4:     CLR TI
         SETB P3.6                 ;P3.6 =1就是發送
         MOV  A,#00001010B   ;發送值10 出去
         MOV SBUF,A
         JNB TI ,$
         JMP PP6

PP5:   CLR TI
       SETB P3.6              ;P3.6 =1就是發送
       MOV  A,#00001011B      ;發送值11 出去
       MOV SBUF,A  
       JMP PP6

PP7:   CLR TI
       SETB P3.6              ;P3.6 =1就是發送
       MOV  A,#00001100B      ;發送值12 出去
       MOV SBUF,A  
       JMP PP6

PP8:   CLR TI
       SETB P3.6              ;P3.6 =1就是發送
       MOV  A,#00001101B      ;發送值13 出去
       MOV SBUF,A  
       JMP PP6

PP6:  MOV  R0  ,P1            ;按鈕放開後再執行
      CALL DELAY
      CJNE R0,#11111111B,PP6
      JMP LOOP

;====================================================


DELAY: MOV R1 ,#5
S50:  MOV R2 ,#255
           DJNZ R2 ,$
           DJNZ  R1 ,S50
           RET
           END

發表於 2012-9-5 12:36:36 | 顯示全部樓層
AJMP指令長度2 BYTE,JMP長度3 BYTE,差在佔用程式記憶體的空間,
但AJMP只能在2K BYTE範圍內跳,JMP則可在64K BYTE範圍內跳。

沒細看程式,分析別人寫的程式很傷腦筋,您所謂「編譯就會出問題」,這很難猜吧?
總該將編譯錯誤訊息貼出來吧........
 樓主| 發表於 2012-9-5 15:13:55 | 顯示全部樓層
本帖最後由 zuoso2006 於 2012-9-5 03:16 PM 編輯

感謝ysc大大回復


目前的問題就是位置調動就會有問題

aaa.jpg    
發表於 2012-9-5 15:53:47 | 顯示全部樓層
zuoso2006 發表於 2012-9-5 03:13 PM static/image/common/back.gif
感謝ysc大大回復

條件式跳躍(如 JNB)只能往前128 BYTE往後127 BYTE,跳太遠超出這個範圍就會出現OUT OF RANGE錯誤。

這個編譯器應該會產生LIST檔吧?LIST檔在錯誤那行指令下方都會加註錯誤訊息,看LIST檔既快又清楚。

另請教這是哪種編譯器?比較像是IDE發展環境,下載得到嗎?目前我還在用DOS版本編譯器。
 樓主| 發表於 2012-9-5 17:58:03 | 顯示全部樓層
大大我是用keil c軟體
           不知道和你的一不一樣
感謝指導
發表於 2012-9-5 20:15:48 | 顯示全部樓層
zuoso2006 發表於 2012-9-5 03:13 PM static/image/common/back.gif
感謝ysc大大回復

keil c是很簡易的軟體,上面系統在編譯時都有列出那一行程式的錯誤原因了,
這種作法必需要使用兩段式的jmp方式就能解決了
 樓主| 發表於 2012-9-6 00:49:39 | 顯示全部樓層
lerion 大大可以 在指點一點嗎??

   小弟不懂   
                                謝謝教導:sam60
 樓主| 發表於 2012-9-6 08:14:57 | 顯示全部樓層
各位大大 以下是軟體的載點 可以破解  
安裝時須將防毒軟體關閉
win7系統如果不能破解 須用點滑鼠右鍵以系統管理員身分執行

Keil Uvision3
http://www.laogu.com/laogubbs/sharefile/2009-11-1_11-23-8_40.rar

http://www.rayfile.com/files/62a ... -a5ad-0019d11a795f/

Keil uVision V4.02 C51 V9.01

http://www.laogu.com/laogubbs/sharefile/C51V901.rar

http://www.vdisk.cn/down/index/4199374A8070



 樓主| 發表於 2012-9-6 08:19:35 | 顯示全部樓層
本帖最後由 zuoso2006 於 2012-9-6 08:23 AM 編輯

lerion 大大  
     以了解了昨天小弟測試ok  謝謝

有學到東西了  並且原來我的問題是RI 忘了CLR 所以這系統只能接收第一次訊號 第二次就會有問題n_157|

感謝各位大大 小弟抱著感恩的心說謝謝。



;=====================================================================
  ORG 0000H
         SBIT  X16=P1.6
         MOV TMOD,#00100000B
         MOV TH1,#230         ;設定1200 bit
         MOV TL1,#230         ;設定1200 bit
         SETB TR1           
         MOV SCON,#01110000B

LOOP:      CLR P3.6
           CLR RI                 ;就是這個忘記打了
WAIT:
          JNB  P1.4,PP4
          JNB  P1.0,PPP               
              JNB  P1.1,PP1
              JNB  P1.2,PP2
              JNB  P1.3,PP3
          JNB  P1.5,PP5
          JNB  P1.6,PP7
          JNB  P1.7,PP8
          JNB RI,WAIT
                  AJMP LOOP1
PPP:
      CLR TI
          SETB P3.6               3.6 =1就是發送
          MOV  A,#06H                         
          MOV SBUF,A
          JNB TI ,$
       JMP PP6

PP1:
      CLR TI
          SETB P3.6         3.6 =1就是發送
          MOV  A,#07H
          MOV SBUF,A
          JNB TI ,$
       JMP PP6

PP2:
      CLR TI
         SETB P3.6                3.6 =1就是發送
          MOV  A,#08H
          MOV SBUF,A
          JNB TI ,$
       JMP PP6

PP3:
        CLR TI
        SETB P3.6                 ;P3.6 =1就是發送
        MOV  A,#09H
        MOV SBUF,A
        JNB TI ,$
        JMP PP6

PP4:     CLR TI
         SETB P3.6                 ;P3.6 =1就是發送
         MOV  A,#00001010B   ;發送值10 出去
         MOV SBUF,A
         JNB TI ,$
         JMP PP6

PP5:   CLR TI
       SETB P3.6              ;P3.6 =1就是發送
       MOV  A,#00001011B      ;發送值11 出去
       MOV SBUF,A  
       JMP PP6

PP7:   CLR TI
       SETB P3.6              ;P3.6 =1就是發送
       MOV  A,#00001100B      ;發送值12 出去
       MOV SBUF,A  
       JMP PP6

PP8:   CLR TI
       SETB P3.6              ;P3.6 =1就是發送
       MOV  A,#00001101B      ;發送值13 出去
       MOV SBUF,A  
       JMP PP6

PP6:  MOV  R0  ,P1            ;按鈕放開後再執行
      CALL DELAY
      CJNE R0,#11111111B,PP6
      JMP LOOP

;====================================================

LOOP1:  CLR P3.6
            MOV A,SBUF
       
        CJNE A,#01H,LOP1
        AJMP LOAD1
        
LOP1:        CJNE A,#02H,LOP2
        AJMP LOAD2
               
LOP2:   CJNE A,#03H,LOP3
        AJMP LOAD3

LOP3:   CJNE A,#04H,LOP4
        AJMP LOAD4

LOP4:   CJNE A,#05H,LOP5
        AJMP LOAD5

LOP5:   CJNE A,#06H,LOP6
        AJMP LOAD6

LOP6:   CJNE A,#07H,LOP7
        AJMP LOAD7

LOP7:   CJNE A,#08H,LOP
        AJMP LOAD8

LOP:    AJMP LOOP
                 
LOAD1:  CLR P0.0
        AJMP  LOOP

LOAD2: CLR P0.1
        AJMP LOOP

LOAD3: CLR P0.2
        AJMP LOOP

LOAD4: CLR P0.3
        AJMP LOOP

LOAD5: CLR P0.4
        AJMP LOOP

LOAD6: CLR P0.5
        AJMP LOOP

LOAD7: CLR P0.6
        AJMP LOOP

LOAD8: MOV P0,#11111111B
        AJMP LOOP

DELAY: MOV R1 ,#5
S50:  MOV R2 ,#255
           DJNZ R2 ,$
           DJNZ  R1 ,S50
           RET
           END



   
發表於 2012-9-6 19:54:55 | 顯示全部樓層
哇~~看到這個我已快20年沒碰組合了,真的都忘光光了
以前寫COBOL都搭著組合來用,想想現在可能沒人再用COBOL了吧
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2024-11-23 12:15 PM , Processed in 0.263854 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.