基于單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)
引言
隨著現(xiàn)代信息技術(shù)的飛速發(fā)展和傳統(tǒng)工業(yè)改造的逐步實(shí)現(xiàn).能夠獨(dú)立工作的溫度檢測和顯示系統(tǒng)應(yīng)用于諸多領(lǐng)域。傳統(tǒng)的溫度檢測以熱敏電阻為溫度敏感元件。熱敏電阻的成本低,但需后續(xù)信號(hào)處理電路,而且可靠性相對(duì)較差,測溫準(zhǔn)確度低,檢測系統(tǒng)也有一定的誤差。與傳統(tǒng)的溫度計(jì)相比,這里設(shè)計(jì)的數(shù)字溫度計(jì)具有讀數(shù)方便,測溫范圍廣,測溫精確,數(shù)字顯示,適用范圍寬等特點(diǎn)。選用AT89C51型單片機(jī)作為主控制器件,DSl8B20作為測溫傳感器通過4位共陽極LED數(shù)碼管串口傳送數(shù)據(jù),實(shí)現(xiàn)溫度顯示。通過DSl8B20直接讀取被測溫度值,進(jìn)行數(shù)據(jù)轉(zhuǎn)換,該器件的物理化學(xué)性能穩(wěn)定,線性度較好,在0℃~100℃最大線性偏差小于0.1℃。該器件可直接向單片機(jī)傳輸數(shù)字信號(hào),便于單片機(jī)處理及控制。另外,該溫度計(jì)還能直接采用測溫器件測量溫度,從而簡化數(shù)據(jù)傳輸與處理過程。
系統(tǒng)硬件設(shè)計(jì)方案
根據(jù)系統(tǒng)功能要求,構(gòu)造圖1所示的系統(tǒng)原理結(jié)構(gòu)框圖。
圖1
系統(tǒng)原理結(jié)構(gòu)框圖
2.1
單片機(jī)的選擇
AT89C51作為溫度測試系統(tǒng)設(shè)計(jì)的核心器件。該器件是INTEL公司生產(chǎn)的MCS一5l系列單片機(jī)中的基礎(chǔ)產(chǎn)品,采用了可靠的CMOS工藝制造技術(shù),具有高性能的8位單片機(jī),屬于標(biāo)準(zhǔn)的MCS—51的CMOS產(chǎn)品。不僅結(jié)合了HMOS的高速和高密度技術(shù)及CHMOS的低功耗特征,而且繼承和擴(kuò)展了MCS—48單片機(jī)的體系結(jié)構(gòu)和指令系統(tǒng)。單片機(jī)小系統(tǒng)的電路圖如圖2所示。
圖2
單片機(jī)小系統(tǒng)電路
AT89C51單片機(jī)的主要特性:
(1)與MCS-51
兼容,4K字節(jié)可編程閃爍存儲(chǔ)器;
(2)靈活的在線系統(tǒng)編程,掉電標(biāo)識(shí)和快速編程特性;
(3)壽命為1000次寫/擦周期,數(shù)據(jù)保留時(shí)間可10年以上;
(4)全靜態(tài)工作模式:0Hz-33Hz;
(5)三級(jí)程序存儲(chǔ)器鎖定;
(6)128*8位內(nèi)部RAM,32可編程I/O線;
(7)兩個(gè)16位定時(shí)器/計(jì)數(shù)器,6個(gè)中斷源;
(8)全雙工串行UART通道,低功耗的閑置和掉電模式;
(9)看門狗(WDT)及雙數(shù)據(jù)指針;
(9)片內(nèi)振蕩器和時(shí)鐘電路;
2.2
溫度傳感器介紹
DS18B20可以程序設(shè)定9~12位的分辨率,精度為±0.5°C??蛇x更小的封裝方式,更寬的電壓適用范圍。分辨率設(shè)定,及用戶設(shè)定的報(bào)警溫度存儲(chǔ)在EPROM中,掉電后依然保存。
溫度傳感器DS18B20引腳如圖3所示。
8引腳封裝
TO-92封裝
圖3
溫度傳感器
引腳功能說明:
NC
:空引腳,懸空不使用;
VDD
:可選電源腳,電源電壓范圍3~5.5V。當(dāng)工作于寄生電源時(shí),此引腳必須接地。
DQ
:數(shù)據(jù)輸入/輸出腳。漏極開路,常態(tài)下高電平。
GND
:為電源地
DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM、溫度傳感器、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。
光刻ROM中的64位序列號(hào)是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位(28H)是產(chǎn)品類型標(biāo)號(hào),接著的48位是該DS18B20自身的序列號(hào),最后8位是前面56位的循環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。
DS18B20中的溫度傳感器可完成對(duì)溫度的測量,以12位轉(zhuǎn)化為例:用16位符號(hào)擴(kuò)展的二進(jìn)制補(bǔ)碼讀數(shù)形式提供,以0.0625℃/LSB形式表達(dá),其中S為符號(hào)位。
這是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測得的溫度大于0,這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實(shí)際溫度。
例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FF6FH,-55℃的數(shù)字輸出為FC90H。
DS18B20溫度傳感器的內(nèi)部存儲(chǔ)器包括一個(gè)高速暫存RAM和一個(gè)非易失性的可電擦除的E2RAM,后者存放高溫度和低溫度觸發(fā)器TH、TL和結(jié)構(gòu)寄存器。
暫存存儲(chǔ)器包含了8個(gè)連續(xù)字節(jié),前兩個(gè)字節(jié)是測得的溫度信息,第一個(gè)字節(jié)的內(nèi)容是溫度的低八位,第二個(gè)字節(jié)是溫度的高八位。第三個(gè)和第四個(gè)字節(jié)是TH、TL的易失性拷貝,第五個(gè)字節(jié)是結(jié)構(gòu)寄存器的易失性拷貝,這三個(gè)字節(jié)的內(nèi)容在每一次上電復(fù)位時(shí)被刷新。第六、七、八個(gè)字節(jié)用于內(nèi)部計(jì)算。第九個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。
該字節(jié)各位的意義如下:
TM
R1
R0
低五位一直都是1,TM是測試模式位,用于設(shè)置DS18B20在工作模式還是在測試模式。在DS18B20出廠時(shí)該位被設(shè)置為0,用戶不要去改動(dòng)。R1和R0用來設(shè)置分辨率,如表1所示:(DS18B20出廠時(shí)被設(shè)置為12位)
表1
DS18B20溫度轉(zhuǎn)換時(shí)間表
R1
R0
分辨率/位
溫度最大轉(zhuǎn)向時(shí)間
0
0
93.75
0
187.5
0
375
750
根據(jù)DS18B20的通訊協(xié)議,主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個(gè)步驟:每一次讀寫之前都要對(duì)DS18B20進(jìn)行復(fù)位,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后釋放,DS18B20收到信號(hào)后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收到此信號(hào)表示復(fù)位成功。
2.3
溫度傳感器與單片機(jī)的連接
溫度傳感器的單總線(1-Wire)與單片機(jī)的P2.0連接,P2.0是單片機(jī)的高位地址線A8。P2端口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O,其輸出緩沖級(jí)可驅(qū)動(dòng)(吸收或輸出電流)4個(gè)TTL邏輯門電路。對(duì)該端口寫“1”,可通過內(nèi)部上拉電阻將其端口拉至高電平,此時(shí)可作為輸入口使用,這是因?yàn)閮?nèi)部存在上拉電阻,某一引腳被外部信號(hào)拉低時(shí)會(huì)輸出一個(gè)電流。在訪問外部程序存儲(chǔ)器或16位地址的外部數(shù)據(jù)存儲(chǔ)器時(shí)。如執(zhí)行MOVX
DPTR指令,則表示P2端口送出高8位的地址數(shù)據(jù)。在訪問8位地址的外部數(shù)據(jù)存儲(chǔ)器時(shí),可執(zhí)行MOVX
RI指令,P2端口內(nèi)容即為特殊功能寄存器(SFR)區(qū)中R2寄存器內(nèi)容,整個(gè)訪問期間不改變。在Flash編程和程序校驗(yàn)時(shí),P2端口也接收高位地址和其他控制信號(hào)。圖4為DSl8820內(nèi)部結(jié)構(gòu)。圖5為DSl8820與單片機(jī)的接口電路。
圖4
DS18B20內(nèi)部結(jié)構(gòu)圖
圖5
DS18B20和單片機(jī)的接口連接
2.4
復(fù)位信號(hào)及外部復(fù)位電路
單片機(jī)的P1.6端口是MAX813看門狗電路中喂狗信號(hào)的輸入端,即單片機(jī)每執(zhí)行一次程序就設(shè)置一次喂狗信號(hào),清零看門狗器件。若程序出現(xiàn)異常,單片機(jī)引腳RST將出現(xiàn)兩個(gè)機(jī)器周期以上的高電平,使其復(fù)位。該復(fù)位信號(hào)高電平有效,其有效時(shí)間應(yīng)持續(xù)24個(gè)振蕩脈沖周期即兩個(gè)機(jī)器周期以上。若使用頻率為12
MHz的晶體振蕩器,則復(fù)位信號(hào)持續(xù)時(shí)間應(yīng)超過2μs才完成復(fù)位操作。
2.5
單片機(jī)與報(bào)警電路
系統(tǒng)中的報(bào)警電路是由發(fā)光二極管和限流電阻組成,并與單片機(jī)的P1.2端口連接。P1端口的作用和接法與P2端口相同,不同的是在Flash編程和程序校驗(yàn)期間,P1接收低8位地址數(shù)據(jù)。
2.6
電源電路
由于該系統(tǒng)需要穩(wěn)定的5
V電源,因此設(shè)計(jì)時(shí)必須采用能滿足電壓、電流和穩(wěn)定性要求的電源。該電源采用三端集成穩(wěn)壓器LM7805。它僅有輸入端、輸出端及公共端3個(gè)引腳,其內(nèi)部設(shè)有過流保護(hù)、過熱保護(hù)及調(diào)整管安全保護(hù)電路.由于所需外接元件少,使用方便、可靠,因此可作為穩(wěn)壓電源。圖6為電源電路連接圖。
圖6
電源電路連接圖
2.7
顯示電路
采用技術(shù)成熟的74HCl64實(shí)現(xiàn)串并轉(zhuǎn)換。LED顯示分為靜態(tài)顯示和動(dòng)態(tài)顯示。這里采用靜態(tài)顯示,系統(tǒng)通過單片機(jī)的串行口來實(shí)現(xiàn)靜態(tài)顯示。串行口為方式零狀態(tài),即工作在移位寄存器方式,波特率為振蕩頻率的1/12。當(dāng)器件執(zhí)行任何一條將SBUF作為目的寄存器的命令時(shí),數(shù)據(jù)便開始從RXD端發(fā)送。在寫信號(hào)有效時(shí),相隔一個(gè)機(jī)器周期后發(fā)送控制端SEND有效,即允許RXD發(fā)送數(shù)據(jù),同時(shí)允許從TXD端輸出移位脈沖。圖7為顯示電路的連接圖。
圖7
顯示電路的連接圖
2.8
看門狗電路
系統(tǒng)中把P1.6作為看門狗的“喂狗”信號(hào);將MAX813的RESET與單片機(jī)的復(fù)位信號(hào)RST連接。由于單片機(jī)每執(zhí)行一次程序,就會(huì)給看門狗器件一個(gè)復(fù)位信號(hào),這樣也可以用手工方式實(shí)現(xiàn)復(fù)位。當(dāng)按鍵按下時(shí),SW—SPST就會(huì)在MAX813引腳產(chǎn)生一個(gè)超過200
ms的低電平,其實(shí)看門狗器件在1.6
s時(shí)間內(nèi)沒有復(fù)位,使7引腳輸出一個(gè)復(fù)位信號(hào)的作用是相同的,其連接圖如圖8所示。
圖8
看門狗器件的MAX813的連接圖
軟件設(shè)計(jì)
DSl8820的主要數(shù)據(jù)元件有:64位激光Lasered
ROM,溫度靈敏元件和非易失性溫度告警觸發(fā)器TH和TL。DSBl820可以從單總線獲取電源,當(dāng)信號(hào)線為高電平時(shí),將能量貯存在內(nèi)部電容器中;當(dāng)單信號(hào)線為低電平時(shí),將該電源斷開,直到信號(hào)線變?yōu)楦唠娖街匦陆由霞纳?電容)電源為止。此外,還可外接5
V電源,給DSl8820供電。DSl8820的供電方式靈活,利用外接電源還可增加系統(tǒng)的穩(wěn)定性和可靠性。圖9為讀取數(shù)據(jù)流程圖。
開始
DS18B20的初始化
啟動(dòng)溫度轉(zhuǎn)換
讀取溫度寄存器
跳過讀序列號(hào)的操作
跳過讀序列號(hào)的操作
DS18B20的初始化
RET
LOW-低八位
HIGH-高八位
圖9
讀取數(shù)據(jù)的流程圖
讀出溫度數(shù)據(jù)后,LOW的低四位為溫度的小數(shù)部分,可以精確到0.0625℃,LOW的高四位和HIGH的低四位為溫度的整數(shù)部分,HIGH的高四位全部為1表示負(fù)數(shù),全為0表示正數(shù)。所以先將數(shù)據(jù)提取出來,分為三個(gè)部分:小數(shù)部分、整數(shù)部分和符號(hào)部分。小數(shù)部分進(jìn)行四舍五入處理:大于0.5℃的話,向個(gè)位進(jìn)1;小于0.5℃的時(shí)候,舍去不要。當(dāng)數(shù)據(jù)是個(gè)負(fù)數(shù)的時(shí)候,顯示之前要進(jìn)行數(shù)據(jù)轉(zhuǎn)換,將其整數(shù)部分取反加一。還因?yàn)镈S18B20最低溫度只能為-55℃,所以可以將整數(shù)部分的最高位換成一個(gè)“-”,表示為負(fù)數(shù)。圖10為溫度數(shù)據(jù)處理程序的流程圖。
開始
提取整數(shù)部分存入HT
提取小數(shù)部分存入LT
LT右移三位,將精度降低到0.5攝氏度
HT++
將小數(shù)部分整數(shù)化
提取符號(hào)部分存入sign
LT是否大于5
Sign=?0XF0
RET
負(fù)數(shù)表示flag=1
HT=~HT+1
Y
N
N
Y
圖10
溫度數(shù)據(jù)處理流程圖
數(shù)據(jù)測試
將溫度傳感器與冰水混合物接觸,經(jīng)過充分?jǐn)嚢柽_(dá)到熱平衡后調(diào)節(jié)系統(tǒng),使顯示讀數(shù)為0.00(標(biāo)定0℃);利用氣壓計(jì)讀出當(dāng)時(shí)當(dāng)?shù)氐拇髿鈮簭?qiáng),并根據(jù)大氣壓強(qiáng)和當(dāng)?shù)刂亓铀俣扔?jì)算出當(dāng)時(shí)的實(shí)際壓強(qiáng);根據(jù)沸點(diǎn)與壓強(qiáng)的關(guān)系查出沸點(diǎn)溫度。把溫度傳感器放入沸水中,待顯示讀數(shù)穩(wěn)定后重新調(diào)節(jié),使顯示器顯示讀數(shù)等于當(dāng)?shù)禺?dāng)時(shí)沸點(diǎn)溫度后工作結(jié)束。該溫度計(jì)的量程為-50℃~150℃,讀數(shù)精度為0.1℃,實(shí)際使用一般在0℃~100℃。采用0℃~50℃和50℃~100℃的精密水銀溫度計(jì)作檢驗(yàn)標(biāo)準(zhǔn),對(duì)設(shè)計(jì)的溫度計(jì)進(jìn)行測試,其結(jié)果表明能達(dá)到該精度要求。
總結(jié)與體會(huì)
作為一名電子信息工程的大四學(xué)生,我覺得做單片機(jī)課程設(shè)計(jì)是很有意義的,而且也是必要的。在做這次課程設(shè)計(jì)的過程中,我感觸最深的當(dāng)屬查閱大量的設(shè)計(jì)資料了。為了讓自己的設(shè)計(jì)更加完善,查閱這方面的實(shí)際資料是十分必要的,也是必不可少的。
其次,在這次課程設(shè)計(jì)中,我們運(yùn)用了以前學(xué)過的專業(yè)課知識(shí),如:proteus仿真、匯編語言、模擬和數(shù)字電路知識(shí)等。雖然過去我從未獨(dú)立應(yīng)用過他們,但在學(xué)習(xí)的過程中帶著問題去學(xué)我發(fā)現(xiàn)效率很高,這是我做這次課程設(shè)計(jì)的又一收獲。
最后,要做好一個(gè)課程設(shè)計(jì),就必須做到:在設(shè)計(jì)程序之前,對(duì)所用單片機(jī)的內(nèi)部結(jié)構(gòu)有一個(gè)系統(tǒng)的了解,知道該單片機(jī)有哪些資源;要有一個(gè)清晰的思路和一個(gè)完整的軟件流程圖;在設(shè)計(jì)程序時(shí),不能妄想一次將整個(gè)程序設(shè)計(jì)好,反復(fù)修改、不斷改進(jìn)是程序設(shè)計(jì)的必經(jīng)之路;要養(yǎng)成注釋程序的好習(xí)慣,這樣為資料的保留和交流提供了方便;在設(shè)計(jì)中遇到的問題要記錄,以免下次遇到同樣的問題。
在這次的課程設(shè)計(jì)中,我真正的意識(shí)到,在以后的學(xué)習(xí)中,要理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)用到實(shí)際當(dāng)中,學(xué)習(xí)單片機(jī)更是如此,程序只有在經(jīng)常寫與讀的過程中才能提高,這就是這次課程設(shè)計(jì)的最大收獲。
附錄1
仿真圖
附錄2
程序源代碼
DATA_BUS
BIT
P3.3
FLAG
BIT
00H
;標(biāo)志位
TEMP_L
EQU
30H
;溫度值低字節(jié)
TEMP_H
EQU
31H
;溫度值高字節(jié)
TEMP_DP
EQU
32H
;溫度小數(shù)
TEMP_INT
EQU
33H
;溫度值整數(shù)
TEMP_BAI
EQU
34H
;溫度百位數(shù)
TEMP_SHI
EQU
35H
;溫度十位數(shù)
TEMP_GE
EQU
36H
;溫度個(gè)位數(shù)
DIS_BAI
EQU
37H
;顯示百位數(shù)
DIS_SHI
EQU
38H
;顯示十位數(shù)
DIS_GE
EQU
39H
;顯示個(gè)位數(shù)
DIS_DP
EQU
3AH
;顯示小數(shù)位
DIS_ADD
EQU
3BH
;顯示地址
ORG
0000H
AJMP
START
ORG
0050H
;初始化
START:
MOV
SP,#40H
MAIN:
LCALL
READ_TEMP
;調(diào)讀溫度程序
LCALL
PROCESS
;調(diào)數(shù)據(jù)處理程序
AJMP
MAIN
;讀溫度程序
READ_TEMP:
LCALL
RESET_PULSE
;調(diào)用復(fù)位脈沖程序
MOV
A,#0CCH
;跳過ROM命令
LCALL
WRITE
MOV
A,#44H
;讀溫度
LCALL
WRITE
LCALL
DISPLAY
;顯示溫度
LCALL
RESET_PULSE
;調(diào)用復(fù)位脈沖程序
MOV
A,#0CCH
;跳過ROM命令
LCALL
WRITE
MOV
A,#0BEH
;讀緩存命令
LCALL
WRITE
LCALL
READ
RET
;復(fù)位脈沖程序
RESET_PULSE:
RESET:
SETB
DATA_BUS
NOP
NOP
CLR
DATA_BUS
MOV
R7,#255
DJNZ
R7,$
SETB
DATA_BUS
MOV
R7,#30
DJNZ
R7,$
JNB
DATA_BUS,SETB_FLAG
CLR
FLAG
AJMP
NEXT
SETB_FLAG:
SETB
FLAG
NEXT:
MOV
R7,#120
DJNZ
R7,$
SETB
DATA_BUS
JNB
FLAG,RESET
RET
;寫命令
WRITE:
SETB
DATA_BUS
MOV
R6,#8
CLR
C
WRITING:
CLR
DATA_BUS
MOV
R7,#5
DJNZ
R7,$
RRC
A
MOV
DATA_BUS,C
MOV
R7,#30H
DJNZ
R7,$
SETB
DATA_BUS
NOP
DJNZ
R6,WRITING
RET
;循環(huán)顯示段位
DISPLAY:
MOV
R4,#200
DIS_LOOP:
MOV
A,DIS_DP
MOV
P2,#0FFH
MOV
P0,A
CLR
P2.7
LCALL
DELAY2MS
MOV
A,DIS_GE
MOV
P2,#0FFH
MOV
P0,A
SETB
P0.7
CLR
P2.6
LCALL
DELAY2MS
MOV
A,DIS_SHI
MOV
P2,#0FFH
MOV
P0,A
CLR
P2.5
LCALL
DELAY2MS
MOV
A,DIS_BAI
MOV
P2,#0FFH
MOV
P0,A
MOV
A,TEMP_BAI
CJNE
A,#0,SKIP
AJMP
NEXTT
SKIP:
CLR
P2.4
LCALL
DELAY2MS
NEXTT:
NOP
DJNZ
R4,DIS_LOOP
RET
;讀命令
READ:
SETB
DATA_BUS
MOV
R0,#TEMP_L
MOV
R6,#8
MOV
R5,#2
CLR
C
READING:
CLR
DATA_BUS
NOP
NOP
SETB
DATA_BUS
NOP
NOP
NOP
NOP
MOV
C,DATA_BUS
RRC
A
MOV
R7,#30H
DJNZ
R7,$
SETB
DATA_BUS
DJNZ
R6,READING
MOV
@R0,A
INC
R0
MOV
R6,#8
SETB
DATA_BUS
DJNZ
R5,READING
RET
;數(shù)據(jù)處理
PROCESS:
MOV
R7,TEMP_L
MOV
A,#0FH
ANL
A,R7
MOV
TEMP_DP,A
MOV
R7,TEMP_L
MOV
A,#0F0H
ANL
A,R7
SWAP
A
MOV
TEMP_L,A
MOV
R7,TEMP_H
MOV
A,#0FH
ANL
A,R7
SWAP
A
ORL
A,TEMP_L
MOV
B,#64H
DIV
AB
MOV
TEMP_BAI,A
MOV
A,#0AH
XCH
A,B
DIV
AB
MOV
TEMP_SHI,A
MOV
TEMP_GE,B
MOV
A,TEMP_DP
MOV
DPTR,#TABLE_DP
MOVC
A,@A+DPTR
MOV
DPTR,#TABLE_INTER
MOVC
A,@A+DPTR
MOV
DIS_DP,A
MOV
A,TEMP_GE
MOV
DPTR,#TABLE_INTER
MOVC
A,@A+DPTR
MOV
DIS_GE,A
MOV
A,TEMP_SHI
MOV
DPTR,#TABLE_INTER
MOVC
A,@A+DPTR
MOV
DIS_SHI,A
MOV
A,TEMP_BAI
MOV
DPTR,#TABLE_INTER
MOVC
A,@A+DPTR
MOV
DIS_BAI,A
RET
DELAY2MS:
MOV
R6,#3
LOOP3:
MOV
R5,#250
DJNZ
R5,$
DJNZ
R6,LOOP3
RET
TABLE_DP:
DB
00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
DB
06H,07H,08H,08H,09H,09H
TABLE_INTER:
DB
03FH,006H,05BH,04FH,066H
DB
06DH,07DH,07H,07FH,06FH
END