音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網
技術交流 | 電路欣賞 | 工控天地 | 數字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統
驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe

牛人進來下,幫我看下這段程序哪出錯了

作者:tuzi148 欄目:單片機
牛人進來下,幫我看下這段程序哪出錯了
哪位高手指教下下面的程序哪方面有錯誤的,先謝謝了啊
編輯匯編和調試找最大數程序;要求:將數據表存入60H單元開始的內部RAM區(qū),該表的長度存入70H單元,找出最大數并存在71H單元中,最大數的地址存在72H中
      ORG   8000H
      AJMP  MAIN
      ORG   8200H
MAIN:MOV   SP,#30H
      MOV   R0,#60H
      MOV   R1,70H
      CLR    A
      MOV   R2,A
LOOP: MOV   A,@R0
      CLR    C
      SUBB   A,@R0
      JC      NEXT
      MOV   A,@R0
      MOV   R2,A
      MOV   72H,R0
NEXT: INC    R0
      DJNZ   R1,LOOP
      MOV   71H,R2
HERE: SJMP   HERE
       END


* - 本貼最后修改時間:2006-11-6 12:21:05 修改者:tuzi148

2樓: >>參與討論
tuzi148
高手快來啊
怎么都沒人來呢,快來啊

3樓: >>參與討論
lws
沒覺得有什么錯
如果要驗證程序功能,把起始地址定位到0000H,軟件仿真一下即可.為什么要把起始地址放在8000h,

4樓: >>參與討論
xplore
你不說說你的程序想干什么
 
5樓: >>參與討論
tuzi148
這是我們的作業(yè)題來的
我才是剛學這個單片機的,所以好多東西都不懂,上面這個是老師給我們上機用的,老師說這段程序有點錯誤,讓我們改了后再去上機

6樓: >>參與討論
guet
試試這樣
ORG   8000H
      AJMP  MAIN
      ORG   8200H
MAIN:MOV   SP,#30H
      MOV   R0,#60H
      MOV   R1,70H
      CLR    A
LOOP: MOV   R2,A
      CLR    C
      SUBB   A,@R0
      JC      NEXT
      MOV   A,R2
      SJMP NEXT1
NEXT: MOV   A,@R0
      MOV   72H,R0
NEXT1:INC  R0
      DJNZ   R1,LOOP
      MOV   71H,R2
HERE: SJMP   HERE
       END


7樓: >>參與討論
jzlidengbo
作業(yè)還是要自己做的好!
應該是在關于70H那有錯誤!好像沒有定義數表的長度!現在你那語句送進去的應該是00H!
應該自己多琢磨,這樣才能進步快!歡迎去http://c51.lgbar.com多交流!單片機的論壇

8樓: >>參與討論
xhtxzxw
我絕對足夠相當的羅嗦
ORG   8000H
      AJMP  MAIN
      ORG   8200H
MAIN:MOV   SP,#30H   。桓惴o關,但不算錯
      MOV   R0,#60H  ;取數據表首址到R0,涉及到內部RAM表操作的時候幾乎總要用到R0或R1,以便做間接尋址
      MOV   R1,70H;  ;取數據表長度(表項數)到R1
      CLR    A            ;首先假定一個最大值0,不考慮符號的話,沒有更小的了
      MOV   R2,A          ;暫時放到R2
LOOP: MOV   A,@R0         ;參見前面說的間接尋址
      CLR    C            ;51的減法指令總是帶借位的,清C,保證不會出錯
      SUBB   A,R2     ;這里改了!R2里放著在此之前的最大值
      JC      NEXT    ;如果產生借位了,說明R2里原來那個所謂的最大值比A里的值大,所以R2里的東西不用改變,跳轉到NEXT,繼續(xù)對后面的數做判斷
      MOV   A,@R0;  程序如果走到這里了,說明剛才的SUBB操作沒有產生借位,A里內容至少不比R2里的東西小,A的內容成為新的老大
      MOV   R2,A     ;于是A里的東西(新的老大)跑到R2去了
      MOV   72H,R0;;注意新的老大是用“MOV A,·R0”取來的,也就是說當前老大的地址在R0里
NEXT: INC    R0;   數據表項地址增量,以便繼續(xù)判斷下一個數據
      DJNZ   R1,LOOP;表項數減一,控制循環(huán)次數
      MOV   71H,R2;最后把找到的真正的老大放到72H單元里
HERE: SJMP   HERE
       END


9樓: >>參與討論
xhtxzxw
改錯
     MOV   72H,R0;;注意新的老大是用“MOV A,@R0”取來的,也就是說當前老大的地址在R0里
NEXT: INC    R0;   數據表項地址增量,以便繼續(xù)判斷下一個數據
      DJNZ   R1,LOOP;表項數減一,控制循環(huán)次數
      MOV   71H,R2;最后把找到的真正的老大放到71H單元里
HERE: SJMP   HERE
       END


10樓: >>參與討論
yanfengzhu
作業(yè)都拿上來,現在的年頭。
 
11樓: >>參與討論
tuzi148
不說什么了,一句話,謝謝大哥了啊
謝謝老大

12樓: >>參與討論
conwh
表是從60H開始的,長70H個,可最大數及指針卻放到70H、71H
這樣就會產生丟失數據的?纯催@個程序是否有幫助。
DATA_START    EQU   60H
DATA_LEN      EQU   70H
DATA_MAX      EQU   xx
DATA_MAX_ADD  EQU   xx
   :
     MOV   DATA_MAX,     #0
     MOV   R0,           #DATA_START
     MOV   R2,           #DATA_LEN
COMP-DATA:
     MOV   A,            @R0
     CJNE  A,            DATA_MAX,   EX-DATA
COMP-DATA-1:
     INC   R0
     DJNZ  R2,           COMP-DATA
   :
EX-DATA:
     JC    COMP-DATA-1
     MOV   DATA_MAX,     A
     MOV   DATA_MAX_ADD, R0
     SJMP  COMP-DATA-1


* - 本貼最后修改時間:2006-11-7 1:02:32 修改者:conwh

13樓: >>參與討論
dengm
re: 例子,
     DATA_START    equ   60H
     DATA_LEN      data   70H
     DATA_MAX      data   71h
     DATA_MAX_ADD  data   72h
     STACK_BUF     EQU    73H

     ORG 0000H
       LJMP MAIN
     ORG 8000H
MAIN:
       MOV SP, #(STACK_BUF-1)
       ;
MAIN_LOOP:
       ;
       CALL SUB_MAX_NUM
       ; .....
       ; .....
       JMP MAIN_LOOP

SUB_MAX_NUM:
       MOV R0, #DATA_START     ; LOAD START_ADDR TO INDEX R0
       MOV DATA_MAX, #000H    ; INIT MAX_NUM TO 000H

       MOV R2, DATA_LEN       ; DATA NUM FOR LOOP
MAX_MUN_L1:
         MOV A, @R0           ; LOAD ONE DATA
         CLR C                ; SUBB THE MAX_NUM
         SUBB A, DATA_MAX
         JC MAX_NUM_A         ; IF MAX_NUM <= the data then do ...
           MOV DATA_MAX_ADD, R0  ; save max_add
           MOV A, @R0            ; save max_num
           MOV DATA_MAX, A
MAX_NUM_A:
        INC R0                ; inc the index to next data    
      DJNZ R2, MAX_NUM_L1     ; loop to do next data until r2=0
      RET

      ;....
      ;....
      END


 

* - 本貼最后修改時間:2006-11-7 12:11:17 修改者:dengm

參與討論
昵稱:
討論內容:
 
 
相關帖子
關于人體紅外傳感器?
板子在低功耗狀態(tài)下電流過大,請問可能是什么原因?
幫忙推薦一款帶pwm的單片機或專門的pwm輸出芯片
溫度引起cypress psoc cyc24423A 芯片 內部14AD和PGA溫漂?
蜂鳴器是不是加上5V電就能響
免費注冊為維庫電子開發(fā)網會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號