找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2861|回復: 6
收起左側

單片機匯編延時問題

[復制鏈接]
ID:261025 發(fā)表于 2021-2-15 16:07 | 顯示全部樓層 |閱讀模式
這段程序是用來檢測是否有設備接入    三個設備有信號時分別給 01H 02H 03H會寫入#0  延時一段時間 如果這段時間內(nèi)又收到設備信號  會從新給01H 02H 03H寫入#0  超過時間沒收到信號 圖中的程序就會調(diào)用顯示無信號輸入
按照圖中的程序延時大概5秒就執(zhí)行調(diào)用顯示無信號    去掉21H或22H其中一個瞬間就計數(shù)到40 調(diào)用顯示無信號  21H和22H設置成任何數(shù)都不影響這段程序總體延時大概5秒左右   
為什么去掉DJNZ 20H,LOOP;或DJNZ 21H,LOOP;時間會差這么多    以前也遇到過 就是沒搞明白什么原因

51hei截圖20210215160830.png
回復

使用道具 舉報

ID:283954 發(fā)表于 2021-2-16 17:15 | 顯示全部樓層
LOOP:
DJNZ 20H, LOOP  ;這一句跑了255次才到zero,跳下一行
DINZ 21H. LOOP ;這句也會跑255次,而每跑一次都會跳回上面的loop處,直到最后一次zero才跳下一行。

因此第一行得跑255 X 255次= 65025次,才會跳出LOOPING,延時當然很長。

回復

使用道具 舉報

ID:261025 發(fā)表于 2021-2-17 07:52 來自手機 | 顯示全部樓層
dalaoshi 發(fā)表于 2021-2-16 17:15
LOOP:
DJNZ 20H, LOOP  ;這一句跑了255次才到zero,跳下一行
DINZ 21H. LOOP ;這句也會跑255次,而每跑 ...

為啥是255  不是放進去的0嗎     
回復

使用道具 舉報

ID:809671 發(fā)表于 2021-2-17 14:36 | 顯示全部樓層
DJNZ 是 "先減一" 不為零則轉(zhuǎn)移的指令
0-1=?
回復

使用道具 舉報

ID:155507 發(fā)表于 2021-2-17 17:24 | 顯示全部樓層
418854190 發(fā)表于 2021-2-17 07:52
為啥是255  不是放進去的0嗎

DJNZ指令首先遞減第一個操作數(shù)指示的字節(jié),如果結果值不為零,則跳轉(zhuǎn)到第二個操作數(shù)指定的地址。

0 遞減后 是255
回復

使用道具 舉報

ID:261025 發(fā)表于 2021-2-17 21:46 來自手機 | 顯示全部樓層
leehk88 發(fā)表于 2021-2-17 14:36
DJNZ 是 "先減一" 不為零則轉(zhuǎn)移的指令
0-1=?

我之前給20H21H#200 感覺和給#0的時間沒差別啊   
回復

使用道具 舉報

ID:809671 發(fā)表于 2021-2-18 13:22 | 顯示全部樓層
418854190 發(fā)表于 2021-2-17 21:46
我之前給20H21H#200 感覺和給#0的時間沒差別啊

請問你根據(jù)甚麼數(shù)據(jù)定出 20H & 21H =200 =延遲5秒?
工作頻率,DJNZ時鐘週期,循環(huán)次數(shù)......
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表