基礎(chǔ)知識(shí)
第一節(jié) 數(shù) 制
常說的計(jì)算機(jī),誰(shuí)都會(huì)理解是個(gè)人電腦PC.說得準(zhǔn)確些,應(yīng)叫電子數(shù)字計(jì)算機(jī),以區(qū)別另一類電子模擬計(jì)算機(jī).為什么叫電子數(shù)字計(jì)算機(jī)呢?這是因?yàn)槠鋬?nèi)部是一個(gè)數(shù)字信息世界:空間地址是數(shù)字化;語(yǔ)言是數(shù)字化;信息流動(dòng)是數(shù)字化;運(yùn)算邏輯判斷即“思維”是數(shù)字化;整體管理和控制是數(shù)字化;與外部交換信息也是數(shù)字化.由于世界上最簡(jiǎn)單的數(shù)制是二進(jìn)制數(shù),最適合于具有兩個(gè)穩(wěn)態(tài)的電子器件所制成的計(jì)算機(jī).二進(jìn)制還可以衍生出更方便的數(shù)制,便于運(yùn)算和表達(dá).下面講一下數(shù)制.
4.1數(shù) 制
數(shù)制是指計(jì)數(shù)的規(guī)則.
4.1.1 二進(jìn)制
二進(jìn)制只有兩個(gè)數(shù)1和0,其基數(shù)是2.計(jì)數(shù)規(guī)則是逢二進(jìn)一.通過如圖3-1所示的運(yùn)算可以找出二進(jìn)制與十進(jìn)制的關(guān)系.權(quán)碼, 即該位為1代表的權(quán)值.
二 進(jìn) 制(B) 權(quán)碼 十進(jìn)制(D) 十六進(jìn)制(H)
1624 823 422 221 120
0 0 0 0 0 0 0
0 0 0 0 1 1 1
0 0 0 1 0 2 2
0 0 0 1 1 3 3
0 0 1 0 0 4 4
0 0 1 0 1 5 5
0 0 1 1 0 6 6
0 0 1 1 1 7 7
0 1 0 0 0 8 8
0 1 0 0 1 9 9
0 1 0 1 0 10 A
0 1 0 1 1 11 B
0 1 1 0 0 12 C
0 1 1 0 1 13 D
0 1 1 1 0 14 E
0 1 1 1 1 15 F
1 0 0 0 0 16 10
1 0 0 0 1 17 11
圖4-1 二進(jìn)制、十進(jìn)制及十六進(jìn)制的對(duì)應(yīng)關(guān)系
由圖4-1可以看出4位二進(jìn)制1111表示的是十進(jìn)制的15,二進(jìn)制0000表示的是十進(jìn)制的0.為防止把二進(jìn)制1111讀成壹千壹百壹拾壹,可用一個(gè)下標(biāo)B(Binary)表示:1111B=15D,下標(biāo)D(Decimal)表示十進(jìn)制,一般不寫.從二進(jìn)制與十進(jìn)制的對(duì)應(yīng)關(guān)系可以看到如下特點(diǎn):
權(quán)碼 1 1 1 1 B=15
對(duì)應(yīng)權(quán)值 1×23+1×22+1×21+1×20 =
對(duì)應(yīng)權(quán)值 8 + 4 + 2 + 1 =15(二進(jìn)制數(shù)值)
式中的8、4、2和1稱為權(quán)值.1111B中的每個(gè)1稱為系數(shù)或權(quán)碼.4位二進(jìn)制數(shù)可表達(dá)十進(jìn)制數(shù)0 ~ 15,共16個(gè)數(shù).當(dāng)十進(jìn)制數(shù)超過15時(shí),則向前進(jìn)1位,變成0000B.進(jìn)上去的1表示溢位.16這個(gè)十進(jìn)制數(shù)已超出4位二進(jìn)制的表示范圍.為表達(dá)比15大的二進(jìn)制數(shù),可采用多位二進(jìn)制.例如,采用8位二進(jìn)制數(shù):
權(quán)碼 1 1 1 1 1 1 1 1 B=
對(duì)應(yīng)權(quán)值 1×27+1×26+1×25+1×24+1×23+1×22+1×21+1×20=
對(duì)應(yīng)權(quán)值 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 =255(二進(jìn)制數(shù)值)
由上面的式子還可看出一個(gè)特點(diǎn),可幫助我們記憶和心算,即:每一位的權(quán)值都比其右邊所有權(quán)值的和多1.
計(jì)算機(jī)中有8位二進(jìn)制數(shù),再大則要用到16位和32位二進(jìn)制數(shù).
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 數(shù)位
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 權(quán)碼
32 768 16 384 8 192 4 096 2 048 1 024 512 256 128 64 32 16 8 4 2 1 權(quán)值
32K 16K 8K 4K 2K 1K 簡(jiǎn)稱
高8位 低8位
權(quán)碼 1 1 1 1 1 1 1 1 1
權(quán)值1×215 1×214 1×213 1×212 1×211 1×210 1×29 1×28 1×27
權(quán)值32568 16284 8192 4096 2048 1024 512 256 128
簡(jiǎn)稱 32K 16K 8K 4K 2K 1K
為了方便,其中稱1024為1K.對(duì)單片機(jī)來(lái)說常用的4K、8K、16K、32K應(yīng)當(dāng)記熟.
當(dāng)用二進(jìn)制表示一個(gè)較大的數(shù)時(shí), 1和0的位數(shù)太多,不便于書寫,很不直觀.因此,又引出十六進(jìn)制(Hexadecimal).十六進(jìn)制數(shù)可用一個(gè)下標(biāo)H表示.
對(duì)幾個(gè)名詞的說明如下:
位(bit): 二進(jìn)制數(shù)的1位,即1或0.
字節(jié)(byte):相鄰的8個(gè)二進(jìn)制位為1個(gè)字節(jié).
字長(zhǎng): 每個(gè)數(shù)所含二進(jìn)制位的數(shù)量叫字長(zhǎng).計(jì)算機(jī)內(nèi)的字長(zhǎng)都是字節(jié)的整數(shù)倍.
地址: 由內(nèi)部存儲(chǔ)器中許多存儲(chǔ)單元組成.將每個(gè)單元都順序地統(tǒng)一編號(hào),這個(gè)編號(hào)就是地址.
4.1.2 十六進(jìn)制
從圖3-1的最右側(cè)一列可見,自9之后就用A、B、C、D、E和F分別表示10、11、12、13、14和15.這樣就可以把沉長(zhǎng)的二進(jìn)制變得簡(jiǎn)短了.
例如:
二進(jìn)制 1 0 1 1 1 1 0 0 0 1 1 1 0 1 0 1
對(duì)應(yīng)十六進(jìn)制 B C 7 5
即BC75H,以4位二進(jìn)制為一段,用0~F表示.運(yùn)算時(shí)機(jī)器還是按二進(jìn)制計(jì)算.書寫時(shí)為防止混淆,作數(shù)據(jù)用時(shí)要標(biāo)注H或$或0x, 這表示十六進(jìn)制數(shù).機(jī)器在運(yùn)行時(shí),譯碼器會(huì)自動(dòng)識(shí)別出數(shù)據(jù)或碼制.
在上面兩節(jié)中學(xué)了二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)的方法.下面介紹把十進(jìn)制數(shù)反過來(lái)變成二進(jìn)制數(shù)的余數(shù)法:用2去除二進(jìn)制數(shù),先得的余數(shù)為低位,后得的余數(shù)為高位,直到商為0為止.
例如:
2 1 1 余數(shù)
2 5 ——1最低位
2 2 ——1
2 1 ——0
0 ——1 最高位
即:11=1011B
4.1.3 二進(jìn)制數(shù)的運(yùn)算
1. 二進(jìn)制加法規(guī)則
二進(jìn)制的加法規(guī)則如下:
(1) 0+0=0
(2) 0+1=1
(3) 1+1=0+進(jìn)位
(4) 1+1+1=1+進(jìn)位
例:1110B+1100B=1 1010 B
1 1 1 0 被加數(shù)
+ 1 1 0 0 加數(shù)
1 進(jìn)位
——————————
1 1 0 1 0 和
2. 二進(jìn)制減法規(guī)則
二進(jìn)制的減法規(guī)則如下:
(1) 0-0=0
(2) 1-0=1
(3) 1-1=0
(4) 0-1=1-借位
例:10110B-1100B= 1010 B
1 0 1 1 0 被減數(shù)
- 1 1 0 0 減數(shù)
——————————
1 0 1 0 差
3. 二進(jìn)制乘法規(guī)則
二進(jìn)制的乘法規(guī)則如下:
(1) 0×0=0
(2) 0×1=0
(3) 1×0=0
(4) 1×1=1
例:1101B×1011B= 1000 1111B
1 1 0 1
× 1 0 1 1
———————
1 1 0 1
1 1 0 1
0 0 0 0
1 1 0 1
——————————
1 0 0 0 1 1 1 1
注意:乘2相當(dāng)于左移1位.例:
1 1 0 1
× 1 0
——————
0 0 0 0
1 1 0 1
——————
1 1 0 1 0
常用將被乘數(shù)左移1位的方法來(lái)完成乘2運(yùn)算.
4.二進(jìn)制除法規(guī)則
(不考慮余數(shù))
例:10110101B÷1001B=10100B
1 0 1 0 0
————————
1001 1 0 1 1 0 1 0 1
1 0 0 1
———————
1 0 0 1
1 0 0 1
———————
0 0 1
4.2 計(jì)算機(jī)的基本運(yùn)算
計(jì)算機(jī)有3種基本運(yùn)算:算術(shù)運(yùn)算、關(guān)系運(yùn)算和邏輯運(yùn)算.
4.2.1 算術(shù)運(yùn)算
單片機(jī)中的運(yùn)算邏輯單元(ALU)執(zhí)行加、減、乘、除四則運(yùn)算.凡函數(shù)運(yùn)算(三角函數(shù)、指數(shù)、對(duì)數(shù)運(yùn)算)都將其化成四則運(yùn)算.例如,正弦函數(shù)求值計(jì)算變成多項(xiàng)式的求和計(jì)算:
更復(fù)雜的運(yùn)算,例如求解方程式的根,也都要變成四則運(yùn)算.單片機(jī)中就有加減法指令等, 可完成復(fù)雜的運(yùn)算.
4.2.2 關(guān)系運(yùn)算
計(jì)算機(jī)內(nèi)所要處理的信息不論是數(shù)據(jù)還是字都是用0和1表示.關(guān)系運(yùn)算就是比較兩數(shù)據(jù)是否相同或不相同.若不相同,再區(qū)分大小.關(guān)系運(yùn)算包括“大于”、“小于”、“等于”和“不等于”4種.在實(shí)際工作中應(yīng)用很普遍,例如,自動(dòng)控制中的正轉(zhuǎn)和反轉(zhuǎn),以及機(jī)器人運(yùn)行時(shí)判斷是否離開軌跡線,等等.單片機(jī)中就有條件轉(zhuǎn)移指令中的“大于”、“小于”指令等, 可以完成各種判斷處理工作.
4.2.3 邏輯運(yùn)算
邏輯數(shù)據(jù)只有兩個(gè)值1和0.1表示“真”(True),0表示“假”(False).基本邏輯運(yùn)算有3種,還可衍生1種,即“與(AND)”、“或(OR)”、“非(NOT)”或“異或(EOR)”.
1.“與”運(yùn)算
“與”可用兩串聯(lián)開關(guān)與燈泡、電源串聯(lián)電路來(lái)說明,見圖3-2.當(dāng)開關(guān)A與B都同時(shí)閉合時(shí),燈P才亮.可用邏輯表達(dá)式
A·B=P 或 A∧B=P
來(lái)表示,說明只有A“與”B都閉合,燈P才亮.“與”運(yùn)算的真值表如表3-2所列,即有0即0,全1為1.
圖3-2 “與”運(yùn)算電路示意圖及與門符號(hào)
表3-2 “與”運(yùn)算真值表
輸入A 輸入B 輸出P
0011 0101 0—滅001—亮
2.“或”運(yùn)算
“或”(OR)可用兩開關(guān)A和B并聯(lián)后與電源和燈P作如圖3-3的連接來(lái)說明,其邏輯關(guān)系可用邏輯表達(dá)式
A+B=P 或 A∨B=P
來(lái)表示.說明A“或”B兩者有一個(gè)閉合,燈P就亮.“或”運(yùn)算的邏輯真值表如表3-3所列,即有1即1,全0為0.
圖3-3 “或”運(yùn)算電路示意圖及或門符號(hào)
表3-3 “或”運(yùn)算真值表
輸入A 輸入B 輸出P
0011 0101 0111
當(dāng)編寫程序時(shí),用邏輯“與”、“或”可對(duì)數(shù)據(jù)起屏蔽和摘取作用.例如:從數(shù)據(jù)1100 1010B中只選取高4位(去掉低4位的值),可用1111 0000 B和1100 1011 B作“與”運(yùn)算來(lái)實(shí)現(xiàn),即
1 1 0 0 1 0 1 1
∨ 1 1 1 1 0 0 0 0
———————— —
1 1 0 0 0 0 0 0
若使某數(shù)據(jù)的高4位都變成1,又不影響其低4位,則可用1111 0000B與1001B進(jìn)行“或”運(yùn)算來(lái)實(shí)現(xiàn),即
1 0 0 1 1 0 0 1
∧ 1 1 1 1 0 0 0 0
———————— —
1 1 1 1 1 0 0 1
例如,第6章開關(guān)控制燈的例題中用到的SBR指令“SBR R16.$F0”,可用“或”指令“OR R16.$F0”代替.
3.“異或”運(yùn)算
“異或” (XOR——eXclusive OR)邏輯運(yùn)算可用圖3-4如示電路來(lái)說明.兩個(gè)雙位聯(lián)動(dòng)開關(guān)串聯(lián)之后與燈P和電源并聯(lián).當(dāng)正面A與B或者反面A與B閉合時(shí),燈P不亮,即同一面都閉合時(shí),燈不亮.若有一面不同時(shí)閉合,則燈亮.可用邏輯表達(dá)式
來(lái)表示.3個(gè)表達(dá)式等同.“異或”運(yùn)算的邏輯真值表如表3-4所列.
圖3-4 “異或”運(yùn)算電路示意圖及電路符號(hào)
表3-4 “異或”運(yùn)算真值表
輸入A 輸入B 輸出P
0011 0101 0110
該邏輯用來(lái)進(jìn)行比較判斷,例如對(duì)兩數(shù)進(jìn)行比較.若兩數(shù)相同“異或”的結(jié)果為零,例如:
1 0 1 1 1 0 0 1
1 0 1 1 1 0 0 1
———————— —
0 0 0 0 0 0 0 0 ——影響
則說明兩數(shù)相同.若兩數(shù)“異或”的結(jié)果不為零,例如:
1 0 1 1 1 0 0 0
1 0 1 1 1 0 0 1
———————— —
0 0 0 0 0 0 0 1
則說明兩數(shù)不同.其應(yīng)用見后指令表EOR指令.
4.“非”運(yùn)算
“非(NOT)”邏輯運(yùn)算對(duì)應(yīng)的電路如圖3-5所示.A閉合則燈滅,A斷開則燈亮.“非”運(yùn)算的邏輯真值表如表3-5所列.
圖3-5 “非”運(yùn)算電路示意圖及電路符號(hào)
表3-5 “非”運(yùn)算真值表
輸入A 輸出P
10 01
4.3 運(yùn)算后的狀態(tài)
計(jì)算機(jī)的算術(shù)邏輯單元ALU在不停地運(yùn)算.對(duì)每次運(yùn)算我們不僅要注意數(shù)值結(jié)果,同時(shí)還要根據(jù)其運(yùn)算狀態(tài)來(lái)決定下面程序流程的走向.運(yùn)算后的狀態(tài)存放在狀態(tài)寄存器SREG中.它的8個(gè)位被設(shè)計(jì)者定義為如圖3-6所示的涵意.
圖4-6 運(yùn)算中影響程序狀態(tài)字
對(duì)于圖3-6中的8個(gè)位,僅要求初學(xué)者了解其中的位C、Z、H、I和T.
· 因第7位有進(jìn)位C=1.
· 若結(jié)果為0(即8位全0),則Z=1.
· 若低4位的高位向高4位進(jìn)位(叫半進(jìn)位),則H=1.
· 若在機(jī)器運(yùn)行過程中遇有特殊的意外事件發(fā)生時(shí)允許機(jī)器作應(yīng)急處理,即執(zhí)行應(yīng)急程序,則I=1(中斷的概念見后).
· T是留出的1位,為監(jiān)視所關(guān)注的寄存器的某一位而設(shè).
4.4 中斷的慨念
用日常生活中遇到的中斷慨念來(lái)說明計(jì)算機(jī)中的中斷概念.例如,寫字樓的高層有位資深的總編日理萬(wàn)機(jī).當(dāng)他寫作的思緒正如潮涌,筆下如神時(shí),突然,洪水訣堤而泄,必須停止眼下的工作,盡快去搶險(xiǎn),這就是中斷.而且他的工作也不是絕對(duì)不可停的,即是可允許中斷的.這時(shí)就把狀態(tài)寄存器SREG的I位置1.但在同樣情況下,一位正在作開顱手術(shù)或作心臟手術(shù)的大夫就絕不可停止手術(shù),即不可中斷.這時(shí)SREG的最高位就應(yīng)置0.在中斷時(shí)應(yīng)當(dāng)作什么工作呢?對(duì)總編來(lái)說,就應(yīng)當(dāng)記住工作到計(jì)劃的哪一頁(yè),例如第9頁(yè).而且還要把所用的資料、素材和照片有序地放在專用的第5號(hào)保險(xiǎn)柜第3層第7號(hào)文件夾中.要牢記537這個(gè)號(hào),待緊急任務(wù)完成后,取出537號(hào)文件夾,接著從第9頁(yè)開始工作.單片機(jī)處理中斷與此類似.它是在叫做RAM的存儲(chǔ)器中設(shè)置一個(gè)空間,作為存放資料的“保險(xiǎn)柜”,中斷的地址即“第幾頁(yè)”.機(jī)器會(huì)自動(dòng)“告訴”程序計(jì)數(shù)器PC指針,所存放的資料也會(huì)自動(dòng)彈出.
在執(zhí)行中斷時(shí)還會(huì)遇到更重要的緊急事件,還得在中斷中嵌套中斷.過程與第1次中斷相同.中斷的處理完全可以在編寫程序時(shí)隨心安排.
4.5 定時(shí)器/計(jì)數(shù)器(T/C)
它與我們用的鬧鐘類似.鬧鐘實(shí)質(zhì)是計(jì)數(shù)器,只不過計(jì)量的是標(biāo)準(zhǔn)電秒脈沖信號(hào).把它撥到早6點(diǎn),當(dāng)計(jì)“數(shù)”一到,就響鈴催人起床.
單片機(jī)內(nèi)部資源應(yīng)有盡有,8515芯片中有一個(gè)8位計(jì)數(shù)器和一個(gè)16位計(jì)數(shù)器.每當(dāng)輸入一個(gè)計(jì)數(shù)脈沖時(shí),二進(jìn)制計(jì)數(shù)器就逢二進(jìn)一計(jì)下去.8位計(jì)數(shù)器最多可計(jì)到255個(gè)脈沖,16位計(jì)數(shù)器可計(jì)到65 535個(gè)脈沖.用計(jì)數(shù)器在生產(chǎn)線上作計(jì)數(shù)用會(huì)大顯神通.以裝藥片為例,要求每個(gè)大瓶裝入1 000片藥片,當(dāng)裝滿之后控制機(jī)器轉(zhuǎn)動(dòng)推走裝滿的瓶子,并跟過來(lái)一個(gè)空瓶.解決這個(gè)問題的思路就同聰明的烏鴉想喝細(xì)頸瓶中的剩水一樣,往瓶中銜小石頭,水就被逐漸地?cái)D上來(lái)了.
通過計(jì)算可知,在計(jì)數(shù)器中應(yīng)預(yù)置的數(shù)為
65 535-1 000=64 535
64 535再變成二進(jìn)制數(shù)或十六進(jìn)制數(shù),即
64 535=1111 1100 0001 1000B=FC18H
應(yīng)預(yù)置入FC18H,當(dāng)計(jì)滿時(shí)即可產(chǎn)生進(jìn)位信號(hào).用它可以驅(qū)動(dòng)機(jī)器轉(zhuǎn)動(dòng),并可將FC18H再次自動(dòng)預(yù)置.
用它來(lái)驅(qū)動(dòng)機(jī)器轉(zhuǎn)動(dòng).因?yàn)橛?jì)滿數(shù)之后16位計(jì)數(shù)器變成全0,所以在下一次計(jì)數(shù)時(shí)還得預(yù)置FC18H.這個(gè)常數(shù)是自動(dòng)置入的,見3-7工作示意圖.
圖3-7 計(jì)數(shù)器自動(dòng)預(yù)置數(shù)原理
如果計(jì)數(shù)電脈沖換成時(shí)間間隔十分精密的時(shí)間電脈沖,則16位計(jì)數(shù)器就可以變成計(jì)時(shí)器了.
4.6 看門狗(Watch Dog)
舉個(gè)例子:黑心的業(yè)主顧來(lái)工人給他干活,在工人反復(fù)必經(jīng)的路上設(shè)置了一個(gè)紅外傳感電子鬧鐘,用來(lái)監(jiān)視工人.工人緊張工作,大約10分鐘左右經(jīng)過一次.每經(jīng)過紅外傳感時(shí),電子鬧鐘就復(fù)位一次重新計(jì)時(shí).業(yè)主就把電子鬧鐘設(shè)置11分鐘就響,不讓工人稍緩一口氣,他卻睡大覺去了.一旦鈴響,他就把工人拉回來(lái)從頭干活.因此,把這個(gè)鬧鐘叫做“看門狗”.
單片機(jī)中的看門狗,是為替我們監(jiān)視程序運(yùn)行情況而設(shè).我們?cè)诰帉懗绦驎r(shí),在程序流程中多設(shè)些看門狗復(fù)位指令.當(dāng)程序正常運(yùn)行時(shí),使看門狗這個(gè)鬧鐘不斷清0,不會(huì)因計(jì)滿而“狂叫”.程序一旦受外界干擾而不能正常工作,或陷入死循環(huán),就不能及時(shí)使看門狗復(fù)位.看門狗就發(fā)出復(fù)位信號(hào),強(qiáng)行把程序計(jì)數(shù)器PC值置0,使單片機(jī)從頭開始工作.
要注意的是,看門狗有一個(gè)在單片機(jī)內(nèi)部獨(dú)立的時(shí)鐘信號(hào)源,其工作頻率為1 MHz,與單片機(jī)的外部時(shí)鐘源完全無(wú)關(guān).
4.7 有關(guān)名詞介紹
4.7.1 指令和程序
1. 指 令
它是人對(duì)計(jì)算機(jī)發(fā)出的完成一個(gè)最基本操作的工作命令.由計(jì)算機(jī)的硬件來(lái)執(zhí)行.因計(jì)算機(jī)硬件的結(jié)構(gòu)不同,指令也不同.某一種計(jì)算機(jī)的基本指令的集合稱為該計(jì)算機(jī)的指令系統(tǒng).指令系統(tǒng)中的指令按功能分有:數(shù)據(jù)傳送、算術(shù)邏輯運(yùn)算、程序控制、輸入/輸出以及控制等功能.指令系統(tǒng)在很大程度上決定了計(jì)算機(jī)的處理能力,是計(jì)算機(jī)的重要特征.詳細(xì)內(nèi)容見第5章.
2. 程 序
人們?yōu)榻鉀Q某一問題而寫出的有序的一條條指令稱為程序.設(shè)計(jì)和書寫程序的過程稱為程序設(shè)計(jì).計(jì)算機(jī)的指令系統(tǒng)是程序設(shè)計(jì)的基本依據(jù).
指令和程序在計(jì)算機(jī)中的執(zhí)行過程如下:計(jì)算機(jī)執(zhí)行程序中的每條指令分為兩個(gè)階段,第1階段是將要執(zhí)行的指令從內(nèi)存(AVR單片機(jī)從Flash)中取出CPU;第2階段是CPU對(duì)該指令進(jìn)行分析譯碼,判斷該指令要執(zhí)行的操作,然后向相關(guān)部件發(fā)出執(zhí)行該指令的控制信號(hào),并執(zhí)行相應(yīng)的操作.
程序是由一系列指令的集合而構(gòu)成的.程序的執(zhí)行就是程序中一條條指令執(zhí)行的全過程.
4.7.2 關(guān)于程序設(shè)計(jì)語(yǔ)言和語(yǔ)言處理程序
計(jì)算機(jī)能自動(dòng)連續(xù)地工作,是由程序控制而實(shí)現(xiàn)的,程序是用程序設(shè)計(jì)語(yǔ)言按任務(wù)的要求事先編寫的.程序設(shè)計(jì)語(yǔ)言按發(fā)展過程分為:機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言.
1. 機(jī)器語(yǔ)言
機(jī)器語(yǔ)言是以二進(jìn)制代碼表示的指令的集合,是計(jì)算機(jī)惟一能直接識(shí)別和執(zhí)行的語(yǔ)言.
優(yōu)點(diǎn):占用內(nèi)容少,執(zhí)行速度快.
缺點(diǎn):它是面向機(jī)器的語(yǔ)言,隨機(jī)型而異,通用性差,難閱讀,難記憶,難維護(hù),編程工作量大,易出錯(cuò).
2. 匯編語(yǔ)言
匯編語(yǔ)言是用助記符來(lái)表示機(jī)器指令的語(yǔ)言,也稱符號(hào)語(yǔ)言.
優(yōu)點(diǎn):比機(jī)器語(yǔ)言易學(xué)、易記.
缺點(diǎn):通用性差,隨機(jī)而異.
由于計(jì)算機(jī)只能識(shí)別和執(zhí)行機(jī)器語(yǔ)言,因此,必須用匯編(形容詞)程序(工具軟件)把用匯編(形容詞)語(yǔ)言編寫的源程序翻譯成機(jī)器能識(shí)別和執(zhí)行的二進(jìn)制碼的目標(biāo)程序.這個(gè)翻譯過程稱為匯編(動(dòng)詞).(請(qǐng)注意此段匯編詞性的涵意.)
3. 源程序
指用高級(jí)語(yǔ)言編寫的程序.
4. 目標(biāo)程序
指計(jì)算機(jī)可直接執(zhí)行的程序,就是以二進(jìn)制機(jī)器碼指令所組成的程序集合.
5. 編 譯
將源程序翻譯成目標(biāo)程序,再作些必要的處理,這個(gè)操作過程稱為“編譯”.
<>單片機(jī)學(xué)堂<>高手勿進(jìn)<>
全部回復(fù)(12)
正序查看
倒序查看
0000 13 ORG 0000H
0000 0133 14 AJMP START
15
0033 16 ORG 0033H
0033 17 START:
00B3 18 DQ BIT P3.3
00A0 19 RS EQU P2.0
00A1 20 RW EQU P2.1
00A2 21 E EQU P2.2
00A6 22 LED8P EQU P2.6
00A7 23 BLA EQU P2.7
24
0080 25 LCD EQU P0
0001 26 DS18B20 BIT 01H
0002 27 TEMPERRB BIT 02H
0003 28 TEMPSBIT BIT 03H
0030 29 TEMPFH EQU 30H ;溫度符號(hào)位
0031 30 TEMPBW EQU 31H ;溫度"百"位
0032 31 TEMPSW EQU 32H ;溫度"十"位
0033 32 TEMPGW EQU 33H ;溫度"個(gè)"位
0034 33 TEMPXS1 EQU 34H ;溫度小飾壞?1"位
0035 34 TEMPXS2 EQU 35H ;溫度小飾壞?2"位
0036 35 TEMPXS3 EQU 36H ;溫度小飾壞?3"位
0037 36 TEMPXS4 EQU 37H ;溫度小飾壞?4"?
0038 37 TEMPXSD EQU 38H
0039 38 TEMPZS EQU 39H
003A 39 TEMPXS EQU 3AH
003B 40 TEMPL EQU 3BH
003C 41 TEMPH EQU 3CH
003D 42 ID1 EQU 3DH
003E 43 ID2 EQU 3EH
003F 44 ID3 EQU 3FH
0040 45 ID4 EQU 40H
0041 46 ID5 EQU 41H
0042 47 ID6 EQU 42H
0043 48 ID7 EQU 43H
0044 49 ID8 EQU 44H
0046 50 DLCD1 EQU 46H
0047 51 DLCD2 EQU 47H
0048 52 DLCD3 EQU 48H
0049 53 DLCD4 EQU 49H
004A 54 DLCD5 EQU 4AH
004B 55 DLCD6 EQU 4BH
004C 56 DLCD7 EQU 4CH
004D 57 DLCD8 EQU 4DH
004E 58 DLCD9 EQU 4EH
A51 MACRO ASSEMBLER LCDTEMP 03/08/2007 03:05:53 PAGE 2
004F 59 DLCD10 EQU 4FH
0050 60 DLCD11 EQU 50H
0051 61 DLCD12 EQU 51H
0052 62 DLCD13 EQU 52H
0053 63 DLCD14 EQU 53H
0054 64 DLCD15 EQU 54H
0055 65 DLCD16 EQU 55H
66
67 ;---------------------------------------------------------
68
0033 3133 69 MAIN: ACALL GETTEMP
0035 200102 70 JB DS18B20,MAIN1
0038 0133 71 AJMP MAIN
003A 72 MAIN1:
003A C2A6 73 CLR LED8P ;開啟事牘芟允?
003C D2A7 74 SETB BLA ;關(guān)閉液晶模塊背光
003E 120049 75 LCALL DISP
0041 120119 76 LCALL GETROM
0044 120049 77 LCALL DISP
0047 0133 78 AJMP MAIN
79
80
81 ;-------- 事牘芟允咀映絳?-------
0049 300365 82 DISP: JNB TEMPSBIT,ZHWD ;溫度大于0嗎?
004C 7580BF 83 MOV P0,#0BFH ;負(fù)號(hào)
004F C2A0 84 CLR P2.0
0051 D2A1 85 SETB P2.1
0053 D2A2 86 SETB P2.2
0055 D2A3 87 SETB P2.3
0057 D2A4 88 SETB P2.4
0059 1202B5 89 LCALL YS4722U
90
005C E532 91 MOV A,TEMPSW ;瘴露認(rèn)允敬?
005E 900298 92 MOV DPTR,#SGTB
0061 93 93 MOVC A,@A+DPTR
0062 F580 94 MOV P0,A
0064 C2A1 95 CLR P2.1
0066 D2A0 96 SETB P2.0
0068 D2A2 97 SETB P2.2
006A D2A3 98 SETB P2.3
006C D2A4 99 SETB P2.4
006E 1202B5 100 LCALL YS4722U
101
0071 E533 102 MOV A,TEMPGW
0073 900298 103 MOV DPTR,#SGTB
0076 93 104 MOVC A,@A+DPTR
0077 547F 105 ANL A,#01111111B
0079 F580 106 MOV P0,A
007B C2A2 107 CLR P2.2
007D D2A0 108 SETB P2.0
007F D2A1 109 SETB P2.1
0081 D2A3 110 SETB P2.3
0083 D2A4 111 SETB P2.4
0085 1202B5 112 LCALL YS4722U
113
0088 E534 114 MOV A,TEMPXS1
008A 900298 115 MOV DPTR,#SGTB
008D 93 116 MOVC A,@A+DPTR
008E F580 117 MOV P0,A
0090 F580 118 MOV P0,A
0092 C2A3 119 CLR P2.3
0094 D2A0 120 SETB P2.0
0096 D2A1 121 SETB P2.1
0098 D2A2 122 SETB P2.2
009A D2A4 123 SETB P2.4
009C 1202B5 124 LCALL YS4722U
A51 MACRO ASSEMBLER LCDTEMP 03/08/2007 03:05:53 PAGE 3
125
009F 7446 126 MOV A,#01000110B
00A1 F580 127 MOV P0,A
00A3 C2A4 128 CLR P2.4
00A5 D2A0 129 SETB P2.0
00A7 D2A1 130 SETB P2.1
00A9 D2A2 131 SETB P2.2
00AB D2A3 132 SETB P2.3
00AD 1202B5 133 LCALL YS4722U
00B0 22 134 RET
135
00B1 E532 136 ZHWD: MOV A,TEMPSW ;瘴露認(rèn)允敬?
00B3 900298 137 MOV DPTR,#SGTB
00B6 93 138 MOVC A,@A+DPTR
00B7 F580 139 MOV P0,A
00B9 C2A0 140 CLR P2.0
00BB D2A1 141 SETB P2.1
00BD D2A2 142 SETB P2.2
00BF D2A3 143 SETB P2.3
00C1 D2A4 144 SETB P2.4
00C3 1202B5 145 LCALL YS4722U
146
00C6 E533 147 MOV A,TEMPGW
00C8 900298 148 MOV DPTR,#SGTB
00CB 93 149 MOVC A,@A+DPTR
00CC 547F 150 ANL A,#01111111B
00CE F580 151 MOV P0,A
00D0 C2A1 152 CLR P2.1
00D2 D2A0 153 SETB P2.0
00D4 D2A2 154 SETB P2.2
00D6 D2A3 155 SETB P2.3
00D8 D2A4 156 SETB P2.4
00DA 1202B5 157 LCALL YS4722U
158
00DD E534 159 MOV A,TEMPXS1
00DF 900298 160 MOV DPTR,#SGTB
00E2 93 161 MOVC A,@A+DPTR
00E3 F580 162 MOV P0,A
00E5 C2A2 163 CLR P2.2
00E7 D2A0 164 SETB P2.0
00E9 D2A1 165 SETB P2.1
00EB D2A3 166 SETB P2.3
00ED D2A4 167 SETB P2.4
00EF 1202B5 168 LCALL YS4722U
169
00F2 E535 170 MOV A,TEMPXS2
00F4 900298 171 MOV DPTR,#SGTB
00F7 93 172 MOVC A,@A+DPTR
00F8 F580 173 MOV P0,A
00FA C2A3 174 CLR P2.3
00FC D2A0 175 SETB P2.0
00FE D2A1 176 SETB P2.1
0100 D2A2 177 SETB P2.2
0102 D2A4 178 SETB P2.4
0104 1202B5 179 LCALL YS4722U
180
0107 7446 181 MOV A,#01000110B
0109 F580 182 MOV P0,A
010B C2A4 183 CLR P2.4
010D D2A0 184 SETB P2.0
010F D2A1 185 SETB P2.1
0111 D2A2 186 SETB P2.2
0113 D2A3 187 SETB P2.3
0115 1202B5 188 LCALL YS4722U
0118 22 189 RET
190
A51 MACRO ASSEMBLER LCDTEMP 03/08/2007 03:05:53 PAGE 4
191
192 ;|------------------------------------------------|
193 ;| 讀出DS18B20序列號(hào)應(yīng)用程序
194 ;|------------------------------------------------|
0119 C2AF 195 GETROM: CLR EA
011B 1201E1 196 LCALL INIT18B20
011E 200103 197 JB DS18B20,GETROM1
0121 D2AF 198 SETB EA
0123 22 199 RET
0124 7433 200 GETROM1:MOV A,#33H
0126 120230 201 LCALL WRITE18B20 ;送入讀DS18B20的ROM命令
0129 7C08 202 MOV R4,#8 ;從DS18B20中讀出8字節(jié)ROM示?
012B 793D 203 MOV R1,#ID1
012D 120210 204 LCALL READ18B20
0130 D2AF 205 SETB EA
0132 22 206 RET
207
0133 C2AF 208 GETTEMP:CLR EA
0135 1201E1 209 LCALL INIT18B20 ;先復(fù)位DS18B20
0138 200103 210 JB DS18B20,TSS2
013B D2AF 211 SETB EA
013D 22 212 RET
013E 74CC 213 TSS2: MOV A,#0CCH ; 跳筊OM匹配
0140 120230 214 LCALL WRITE18B20
0143 7444 215 MOV A,#44H ; 發(fā)出溫度轉(zhuǎn)換命令
0145 120230 216 LCALL WRITE18B20
0148 1202DB 217 LCALL YS800M ;延時(shí)0.8S,延時(shí)>750MS
014B 1201E1 218 LCALL INIT18B20
014E 74CC 219 MOV A,#0CCH ;跳筊OM匹配
0150 120230 220 LCALL WRITE18B20
0153 74BE 221 MOV A,#0BEH ;發(fā)出讀溫度命令
0155 120230 222 LCALL WRITE18B20
0158 7C02 223 MOV R4,#2 ;從DS18B20中讀出2字節(jié)溫度示?
015A 793B 224 MOV R1,#TEMPL
015C 120210 225 LCALL READ18B20 ;讀溫度
226
227 ; MOV TEMPH,#0FEH
228 ; MOV TEMPL,#37H
229
015F D2AF 230 SETB EA
231
232
0161 75382E 233 DOTEMP: MOV TEMPXSD,#2EH
0164 E53C 234 TESTS1: MOV A,TEMPH
0166 54F8 235 ANL A,#11111000B
0168 B4F80A 236 CJNE A,#0F8H,TESTS0
016B 7530FF 237 MOV TEMPFH,#0FFH
016E D203 238 SETB TEMPSBIT
0170 C202 239 CLR TEMPERRB
0172 020187 240 LJMP DOTEMP1
0175 B4000A 241 TESTS0: CJNE A,#00H,TEMPERR
0178 753000 242 MOV TEMPFH,#00H
017B C203 243 CLR TEMPSBIT
017D C202 244 CLR TEMPERRB
017F 020187 245 LJMP DOTEMP1
0182 246 TEMPERR:
0182 D202 247 SETB TEMPERRB
0184 0201DE 248 LJMP TEMPRET
0187 249 DOTEMP1:
0187 300315 250 JNB TEMPSBIT,DOTEMP2
018A E53C 251 MOV A,TEMPH
018C F4 252 CPL A
018D F53C 253 MOV TEMPH,A
018F E53B 254 MOV A,TEMPL
0191 F4 255 CPL A
0192 C3 256 CLR C
A51 MACRO ASSEMBLER LCDTEMP 03/08/2007 03:05:53 PAGE 5
0193 2401 257 ADD A,#1
0195 F53B 258 MOV TEMPL,A
0197 E53C 259 MOV A,TEMPH
0199 3400 260 ADDC A,#00H
019B 5407 261 ANL A,#00000111B
019D F53C 262 MOV TEMPH,A
019F 263 DOTEMP2:
019F E53C 264 MOV A,TEMPH
01A1 C4 265 SWAP A
01A2 F53C 266 MOV TEMPH,A
01A4 E53B 267 MOV A,TEMPL
01A6 540F 268 ANL A,#00001111B
01A8 F53A 269 MOV TEMPXS,A
01AA E53B 270 MOV A,TEMPL
01AC 54F0 271 ANL A,#11110000B
01AE C4 272 SWAP A
01AF A93C 273 MOV R1,TEMPH
01B1 49 274 ORL A,R1
01B2 F539 275 MOV TEMPZS,A
01B4 276 HBCD:
01B4 E539 277 MOV A,TEMPZS
01B6 75F064 278 MOV B,#100
01B9 84 279 DIV AB
01BA F531 280 MOV TEMPBW,A
01BC 740A 281 MOV A,#10
01BE C5F0 282 XCH A,B
01C0 84 283 DIV AB
01C1 F532 284 MOV TEMPSW,A
01C3 E5F0 285 MOV A,B
01C5 F533 286 MOV TEMPGW,A
01C7 7A04 287 FLXS: MOV R2,#4
01C9 E53A 288 MOV A,TEMPXS
01CB 540F 289 ANL A,#00001111B
01CD 75F004 290 MOV B,#4
01D0 A4 291 MUL AB
01D1 F9 292 MOV R1,A
01D2 7834 293 MOV R0,#TEMPXS1
01D4 900248 294 FLXS1: MOV DPTR,#DISPXS
01D7 E9 295 MOV A,R1
01D8 93 296 MOVC A,@A+DPTR
01D9 F6 297 MOV @R0,A
01DA 08 298 INC R0
01DB 09 299 INC R1
01DC DAF6 300 DJNZ R2,FLXS1
301
01DE 302 TEMPRET:
01DE D2AF 303 SETB EA
01E0 22 304 RET
305
306 ;-----------------------------------------------------
01E1 307 INIT18B20:
01E1 D2B3 308 SETB DQ
01E3 00 309 NOP
01E4 C2B3 310 CLR DQ
01E6 786B 311 MOV R0,#107 ;主機(jī)發(fā)出延時(shí)537微秒的復(fù)位低脈沖[2]
01E8 7903 312 MOV R1,#3
01EA D8FE 313 TSR1: DJNZ R0,TSR1
01EC 786B 314 MOV R0,#107
01EE D9FA 315 DJNZ R1,TSR1
01F0 D2B3 316 SETB DQ
01F2 00 317 NOP
01F3 00 318 NOP
01F4 00 319 NOP
01F5 7825 320 MOV R0,#25H
01F7 30B304 321 TSR2: JNB DQ,TSR3
01FA D8FB 322 DJNZ R0,TSR2
A51 MACRO ASSEMBLER LCDTEMP &nbs
0000 0133 14 AJMP START
15
0033 16 ORG 0033H
0033 17 START:
00B3 18 DQ BIT P3.3
00A0 19 RS EQU P2.0
00A1 20 RW EQU P2.1
00A2 21 E EQU P2.2
00A6 22 LED8P EQU P2.6
00A7 23 BLA EQU P2.7
24
0080 25 LCD EQU P0
0001 26 DS18B20 BIT 01H
0002 27 TEMPERRB BIT 02H
0003 28 TEMPSBIT BIT 03H
0030 29 TEMPFH EQU 30H ;溫度符號(hào)位
0031 30 TEMPBW EQU 31H ;溫度"百"位
0032 31 TEMPSW EQU 32H ;溫度"十"位
0033 32 TEMPGW EQU 33H ;溫度"個(gè)"位
0034 33 TEMPXS1 EQU 34H ;溫度小飾壞?1"位
0035 34 TEMPXS2 EQU 35H ;溫度小飾壞?2"位
0036 35 TEMPXS3 EQU 36H ;溫度小飾壞?3"位
0037 36 TEMPXS4 EQU 37H ;溫度小飾壞?4"?
0038 37 TEMPXSD EQU 38H
0039 38 TEMPZS EQU 39H
003A 39 TEMPXS EQU 3AH
003B 40 TEMPL EQU 3BH
003C 41 TEMPH EQU 3CH
003D 42 ID1 EQU 3DH
003E 43 ID2 EQU 3EH
003F 44 ID3 EQU 3FH
0040 45 ID4 EQU 40H
0041 46 ID5 EQU 41H
0042 47 ID6 EQU 42H
0043 48 ID7 EQU 43H
0044 49 ID8 EQU 44H
0046 50 DLCD1 EQU 46H
0047 51 DLCD2 EQU 47H
0048 52 DLCD3 EQU 48H
0049 53 DLCD4 EQU 49H
004A 54 DLCD5 EQU 4AH
004B 55 DLCD6 EQU 4BH
004C 56 DLCD7 EQU 4CH
004D 57 DLCD8 EQU 4DH
004E 58 DLCD9 EQU 4EH
A51 MACRO ASSEMBLER LCDTEMP 03/08/2007 03:05:53 PAGE 2
004F 59 DLCD10 EQU 4FH
0050 60 DLCD11 EQU 50H
0051 61 DLCD12 EQU 51H
0052 62 DLCD13 EQU 52H
0053 63 DLCD14 EQU 53H
0054 64 DLCD15 EQU 54H
0055 65 DLCD16 EQU 55H
66
67 ;---------------------------------------------------------
68
0033 3133 69 MAIN: ACALL GETTEMP
0035 200102 70 JB DS18B20,MAIN1
0038 0133 71 AJMP MAIN
003A 72 MAIN1:
003A C2A6 73 CLR LED8P ;開啟事牘芟允?
003C D2A7 74 SETB BLA ;關(guān)閉液晶模塊背光
003E 120049 75 LCALL DISP
0041 120119 76 LCALL GETROM
0044 120049 77 LCALL DISP
0047 0133 78 AJMP MAIN
79
80
81 ;-------- 事牘芟允咀映絳?-------
0049 300365 82 DISP: JNB TEMPSBIT,ZHWD ;溫度大于0嗎?
004C 7580BF 83 MOV P0,#0BFH ;負(fù)號(hào)
004F C2A0 84 CLR P2.0
0051 D2A1 85 SETB P2.1
0053 D2A2 86 SETB P2.2
0055 D2A3 87 SETB P2.3
0057 D2A4 88 SETB P2.4
0059 1202B5 89 LCALL YS4722U
90
005C E532 91 MOV A,TEMPSW ;瘴露認(rèn)允敬?
005E 900298 92 MOV DPTR,#SGTB
0061 93 93 MOVC A,@A+DPTR
0062 F580 94 MOV P0,A
0064 C2A1 95 CLR P2.1
0066 D2A0 96 SETB P2.0
0068 D2A2 97 SETB P2.2
006A D2A3 98 SETB P2.3
006C D2A4 99 SETB P2.4
006E 1202B5 100 LCALL YS4722U
101
0071 E533 102 MOV A,TEMPGW
0073 900298 103 MOV DPTR,#SGTB
0076 93 104 MOVC A,@A+DPTR
0077 547F 105 ANL A,#01111111B
0079 F580 106 MOV P0,A
007B C2A2 107 CLR P2.2
007D D2A0 108 SETB P2.0
007F D2A1 109 SETB P2.1
0081 D2A3 110 SETB P2.3
0083 D2A4 111 SETB P2.4
0085 1202B5 112 LCALL YS4722U
113
0088 E534 114 MOV A,TEMPXS1
008A 900298 115 MOV DPTR,#SGTB
008D 93 116 MOVC A,@A+DPTR
008E F580 117 MOV P0,A
0090 F580 118 MOV P0,A
0092 C2A3 119 CLR P2.3
0094 D2A0 120 SETB P2.0
0096 D2A1 121 SETB P2.1
0098 D2A2 122 SETB P2.2
009A D2A4 123 SETB P2.4
009C 1202B5 124 LCALL YS4722U
A51 MACRO ASSEMBLER LCDTEMP 03/08/2007 03:05:53 PAGE 3
125
009F 7446 126 MOV A,#01000110B
00A1 F580 127 MOV P0,A
00A3 C2A4 128 CLR P2.4
00A5 D2A0 129 SETB P2.0
00A7 D2A1 130 SETB P2.1
00A9 D2A2 131 SETB P2.2
00AB D2A3 132 SETB P2.3
00AD 1202B5 133 LCALL YS4722U
00B0 22 134 RET
135
00B1 E532 136 ZHWD: MOV A,TEMPSW ;瘴露認(rèn)允敬?
00B3 900298 137 MOV DPTR,#SGTB
00B6 93 138 MOVC A,@A+DPTR
00B7 F580 139 MOV P0,A
00B9 C2A0 140 CLR P2.0
00BB D2A1 141 SETB P2.1
00BD D2A2 142 SETB P2.2
00BF D2A3 143 SETB P2.3
00C1 D2A4 144 SETB P2.4
00C3 1202B5 145 LCALL YS4722U
146
00C6 E533 147 MOV A,TEMPGW
00C8 900298 148 MOV DPTR,#SGTB
00CB 93 149 MOVC A,@A+DPTR
00CC 547F 150 ANL A,#01111111B
00CE F580 151 MOV P0,A
00D0 C2A1 152 CLR P2.1
00D2 D2A0 153 SETB P2.0
00D4 D2A2 154 SETB P2.2
00D6 D2A3 155 SETB P2.3
00D8 D2A4 156 SETB P2.4
00DA 1202B5 157 LCALL YS4722U
158
00DD E534 159 MOV A,TEMPXS1
00DF 900298 160 MOV DPTR,#SGTB
00E2 93 161 MOVC A,@A+DPTR
00E3 F580 162 MOV P0,A
00E5 C2A2 163 CLR P2.2
00E7 D2A0 164 SETB P2.0
00E9 D2A1 165 SETB P2.1
00EB D2A3 166 SETB P2.3
00ED D2A4 167 SETB P2.4
00EF 1202B5 168 LCALL YS4722U
169
00F2 E535 170 MOV A,TEMPXS2
00F4 900298 171 MOV DPTR,#SGTB
00F7 93 172 MOVC A,@A+DPTR
00F8 F580 173 MOV P0,A
00FA C2A3 174 CLR P2.3
00FC D2A0 175 SETB P2.0
00FE D2A1 176 SETB P2.1
0100 D2A2 177 SETB P2.2
0102 D2A4 178 SETB P2.4
0104 1202B5 179 LCALL YS4722U
180
0107 7446 181 MOV A,#01000110B
0109 F580 182 MOV P0,A
010B C2A4 183 CLR P2.4
010D D2A0 184 SETB P2.0
010F D2A1 185 SETB P2.1
0111 D2A2 186 SETB P2.2
0113 D2A3 187 SETB P2.3
0115 1202B5 188 LCALL YS4722U
0118 22 189 RET
190
A51 MACRO ASSEMBLER LCDTEMP 03/08/2007 03:05:53 PAGE 4
191
192 ;|------------------------------------------------|
193 ;| 讀出DS18B20序列號(hào)應(yīng)用程序
194 ;|------------------------------------------------|
0119 C2AF 195 GETROM: CLR EA
011B 1201E1 196 LCALL INIT18B20
011E 200103 197 JB DS18B20,GETROM1
0121 D2AF 198 SETB EA
0123 22 199 RET
0124 7433 200 GETROM1:MOV A,#33H
0126 120230 201 LCALL WRITE18B20 ;送入讀DS18B20的ROM命令
0129 7C08 202 MOV R4,#8 ;從DS18B20中讀出8字節(jié)ROM示?
012B 793D 203 MOV R1,#ID1
012D 120210 204 LCALL READ18B20
0130 D2AF 205 SETB EA
0132 22 206 RET
207
0133 C2AF 208 GETTEMP:CLR EA
0135 1201E1 209 LCALL INIT18B20 ;先復(fù)位DS18B20
0138 200103 210 JB DS18B20,TSS2
013B D2AF 211 SETB EA
013D 22 212 RET
013E 74CC 213 TSS2: MOV A,#0CCH ; 跳筊OM匹配
0140 120230 214 LCALL WRITE18B20
0143 7444 215 MOV A,#44H ; 發(fā)出溫度轉(zhuǎn)換命令
0145 120230 216 LCALL WRITE18B20
0148 1202DB 217 LCALL YS800M ;延時(shí)0.8S,延時(shí)>750MS
014B 1201E1 218 LCALL INIT18B20
014E 74CC 219 MOV A,#0CCH ;跳筊OM匹配
0150 120230 220 LCALL WRITE18B20
0153 74BE 221 MOV A,#0BEH ;發(fā)出讀溫度命令
0155 120230 222 LCALL WRITE18B20
0158 7C02 223 MOV R4,#2 ;從DS18B20中讀出2字節(jié)溫度示?
015A 793B 224 MOV R1,#TEMPL
015C 120210 225 LCALL READ18B20 ;讀溫度
226
227 ; MOV TEMPH,#0FEH
228 ; MOV TEMPL,#37H
229
015F D2AF 230 SETB EA
231
232
0161 75382E 233 DOTEMP: MOV TEMPXSD,#2EH
0164 E53C 234 TESTS1: MOV A,TEMPH
0166 54F8 235 ANL A,#11111000B
0168 B4F80A 236 CJNE A,#0F8H,TESTS0
016B 7530FF 237 MOV TEMPFH,#0FFH
016E D203 238 SETB TEMPSBIT
0170 C202 239 CLR TEMPERRB
0172 020187 240 LJMP DOTEMP1
0175 B4000A 241 TESTS0: CJNE A,#00H,TEMPERR
0178 753000 242 MOV TEMPFH,#00H
017B C203 243 CLR TEMPSBIT
017D C202 244 CLR TEMPERRB
017F 020187 245 LJMP DOTEMP1
0182 246 TEMPERR:
0182 D202 247 SETB TEMPERRB
0184 0201DE 248 LJMP TEMPRET
0187 249 DOTEMP1:
0187 300315 250 JNB TEMPSBIT,DOTEMP2
018A E53C 251 MOV A,TEMPH
018C F4 252 CPL A
018D F53C 253 MOV TEMPH,A
018F E53B 254 MOV A,TEMPL
0191 F4 255 CPL A
0192 C3 256 CLR C
A51 MACRO ASSEMBLER LCDTEMP 03/08/2007 03:05:53 PAGE 5
0193 2401 257 ADD A,#1
0195 F53B 258 MOV TEMPL,A
0197 E53C 259 MOV A,TEMPH
0199 3400 260 ADDC A,#00H
019B 5407 261 ANL A,#00000111B
019D F53C 262 MOV TEMPH,A
019F 263 DOTEMP2:
019F E53C 264 MOV A,TEMPH
01A1 C4 265 SWAP A
01A2 F53C 266 MOV TEMPH,A
01A4 E53B 267 MOV A,TEMPL
01A6 540F 268 ANL A,#00001111B
01A8 F53A 269 MOV TEMPXS,A
01AA E53B 270 MOV A,TEMPL
01AC 54F0 271 ANL A,#11110000B
01AE C4 272 SWAP A
01AF A93C 273 MOV R1,TEMPH
01B1 49 274 ORL A,R1
01B2 F539 275 MOV TEMPZS,A
01B4 276 HBCD:
01B4 E539 277 MOV A,TEMPZS
01B6 75F064 278 MOV B,#100
01B9 84 279 DIV AB
01BA F531 280 MOV TEMPBW,A
01BC 740A 281 MOV A,#10
01BE C5F0 282 XCH A,B
01C0 84 283 DIV AB
01C1 F532 284 MOV TEMPSW,A
01C3 E5F0 285 MOV A,B
01C5 F533 286 MOV TEMPGW,A
01C7 7A04 287 FLXS: MOV R2,#4
01C9 E53A 288 MOV A,TEMPXS
01CB 540F 289 ANL A,#00001111B
01CD 75F004 290 MOV B,#4
01D0 A4 291 MUL AB
01D1 F9 292 MOV R1,A
01D2 7834 293 MOV R0,#TEMPXS1
01D4 900248 294 FLXS1: MOV DPTR,#DISPXS
01D7 E9 295 MOV A,R1
01D8 93 296 MOVC A,@A+DPTR
01D9 F6 297 MOV @R0,A
01DA 08 298 INC R0
01DB 09 299 INC R1
01DC DAF6 300 DJNZ R2,FLXS1
301
01DE 302 TEMPRET:
01DE D2AF 303 SETB EA
01E0 22 304 RET
305
306 ;-----------------------------------------------------
01E1 307 INIT18B20:
01E1 D2B3 308 SETB DQ
01E3 00 309 NOP
01E4 C2B3 310 CLR DQ
01E6 786B 311 MOV R0,#107 ;主機(jī)發(fā)出延時(shí)537微秒的復(fù)位低脈沖[2]
01E8 7903 312 MOV R1,#3
01EA D8FE 313 TSR1: DJNZ R0,TSR1
01EC 786B 314 MOV R0,#107
01EE D9FA 315 DJNZ R1,TSR1
01F0 D2B3 316 SETB DQ
01F2 00 317 NOP
01F3 00 318 NOP
01F4 00 319 NOP
01F5 7825 320 MOV R0,#25H
01F7 30B304 321 TSR2: JNB DQ,TSR3
01FA D8FB 322 DJNZ R0,TSR2
A51 MACRO ASSEMBLER LCDTEMP &nbs
0
回復(fù)
@wo0794
0000 13 ORG 0000H00000133 14 AJMP START 15 0033 16 ORG 0033H0033 17 START: 00B3 18 DQ BIT P3.3 00A0 19 RS EQU P2.0 00A1 20 RW EQU P2.1 00A2 21 E EQU P2.2 00A6 22 LED8P EQU P2.6 00A7 23 BLA EQU P2.7 24 0080 25 LCD EQU P0 0001 26 DS18B20 BIT 01H 0002 27 TEMPERRB BIT 02H 0003 28 TEMPSBIT BIT 03H 0030 29 TEMPFH EQU 30H ;溫度符號(hào)位 0031 30 TEMPBW EQU 31H ;溫度"百"位 0032 31 TEMPSW EQU 32H ;溫度"十"位 0033 32 TEMPGW EQU 33H ;溫度"個(gè)"位 0034 33 TEMPXS1EQU 34H ;溫度小飾壞?1"位 0035 34 TEMPXS2EQU 35H ;溫度小飾壞?2"位 0036 35 TEMPXS3EQU 36H ;溫度小飾壞?3"位 0037 36 TEMPXS4EQU 37H ;溫度小飾壞?4"? 0038 37 TEMPXSDEQU 38H 0039 38 TEMPZS EQU 39H 003A 39 TEMPXS EQU 3AH 003B 40 TEMPL EQU 3BH 003C 41 TEMPH EQU 3CH 003D 42 ID1 EQU 3DH 003E 43 ID2 EQU 3EH 003F 44 ID3 EQU 3FH 0040 45 ID4 EQU 40H 0041 46 ID5 EQU 41H 0042 47 ID6 EQU 42H 0043 48 ID7 EQU 43H 0044 49 ID8 EQU 44H 0046 50 DLCD1 EQU 46H 0047 51 DLCD2 EQU 47H 0048 52 DLCD3 EQU 48H 0049 53 DLCD4 EQU 49H 004A 54 DLCD5 EQU 4AH 004B 55 DLCD6 EQU 4BH 004C 56 DLCD7 EQU 4CH 004D 57 DLCD8 EQU 4DH 004E 58 DLCD9 EQU 4EHA51MACROASSEMBLER LCDTEMP 03/08/200703:05:53PAGE 2 004F 59 DLCD10 EQU 4FH 0050 60 DLCD11 EQU 50H 0051 61 DLCD12 EQU 51H 0052 62 DLCD13 EQU 52H 0053 63 DLCD14 EQU 53H 0054 64 DLCD15 EQU 54H 0055 65 DLCD16 EQU 55H 66 67 ;--------------------------------------------------------- 68 00333133 69 MAIN: ACALL GETTEMP0035200102 70 JB DS18B20,MAIN100380133 71 AJMP MAIN003A 72 MAIN1: 003AC2A6 73 CLR LED8P ;開啟事牘芟允?003CD2A7 74 SETB BLA ;關(guān)閉液晶模塊背光003E120049 75 LCALL DISP0041120119 76 LCALL GETROM0044120049 77 LCALL DISP00470133 78 AJMP MAIN 79 80 81 ;--------事牘芟允咀映絳?-------0049300365 82 DISP: JNB TEMPSBIT,ZHWD ;溫度大于0嗎?004C7580BF 83 MOV P0,#0BFH ;負(fù)號(hào)004FC2A0 84 CLR P2.00051D2A1 85 SETB P2.10053D2A2 86 SETB P2.20055D2A3 87 SETB P2.30057D2A4 88 SETB P2.400591202B5 89 LCALL YS4722U 90 005CE532 91 MOV A,TEMPSW ;瘴露認(rèn)允敬?005E900298 92 MOV DPTR,#SGTB006193 93 MOVC A,@A+DPTR0062F580 94 MOV P0,A0064C2A1 95 CLR P2.10066D2A0 96 SETB P2.00068D2A2 97 SETB P2.2006AD2A3 98 SETB P2.3006CD2A4 99 SETB P2.4006E1202B5 100 LCALL YS4722U 101 0071E533 102 MOV A,TEMPGW0073900298 103 MOV DPTR,#SGTB007693 104 MOVC A,@A+DPTR0077547F 105 ANL A,#01111111B0079F580 106 MOV P0,A007BC2A2 107 CLR P2.2007DD2A0 108 SETB P2.0007FD2A1 109 SETB P2.10081D2A3 110 SETB P2.30083D2A4 111 SETB P2.400851202B5 112 LCALL YS4722U 113 0088E534 114 MOV A,TEMPXS1008A900298 115 MOV DPTR,#SGTB008D93 116 MOVC A,@A+DPTR008EF580 117 MOV P0,A0090F580 118 MOV P0,A0092C2A3 119 CLR P2.30094D2A0 120 SETB P2.00096D2A1 121 SETB P2.10098D2A2 122 SETB P2.2009AD2A4 123 SETB P2.4009C1202B5 124 LCALL YS4722UA51MACROASSEMBLER LCDTEMP 03/08/200703:05:53PAGE 3 125 009F7446 126 MOV A,#01000110B00A1F580 127 MOV P0,A00A3C2A4 128 CLR P2.400A5D2A0 129 SETB P2.000A7D2A1 130 SETB P2.100A9D2A2 131 SETB P2.200ABD2A3 132 SETB P2.300AD1202B5 133 LCALL YS4722U00B022 134 RET 135 00B1E532 136 ZHWD: MOV A,TEMPSW ;瘴露認(rèn)允敬?00B3900298 137 MOV DPTR,#SGTB00B693 138 MOVC A,@A+DPTR00B7F580 139 MOV P0,A00B9C2A0 140 CLR P2.000BBD2A1 141 SETB P2.100BDD2A2 142 SETB P2.200BFD2A3 143 SETB P2.300C1D2A4 144 SETB P2.400C31202B5 145 LCALL YS4722U 146 00C6E533 147 MOV A,TEMPGW00C8900298 148 MOV DPTR,#SGTB00CB93 149 MOVC A,@A+DPTR00CC547F 150 ANL A,#01111111B00CEF580 151 MOV P0,A00D0C2A1 152 CLR P2.100D2D2A0 153 SETB P2.000D4D2A2 154 SETB P2.200D6D2A3 155 SETB P2.300D8D2A4 156 SETB P2.400DA1202B5 157 LCALL YS4722U 158 00DDE534 159 MOV A,TEMPXS100DF900298 160 MOV DPTR,#SGTB00E293 161 MOVC A,@A+DPTR00E3F580 162 MOV P0,A00E5C2A2 163 CLR P2.200E7D2A0 164 SETB P2.000E9D2A1 165 SETB P2.100EBD2A3 166 SETB P2.300EDD2A4 167 SETB P2.400EF1202B5 168 LCALL YS4722U 169 00F2E535 170 MOV A,TEMPXS200F4900298 171 MOV DPTR,#SGTB00F793 172 MOVC A,@A+DPTR00F8F580 173 MOV P0,A00FAC2A3 174 CLR P2.300FCD2A0 175 SETB P2.000FED2A1 176 SETB P2.10100D2A2 177 SETB P2.20102D2A4 178 SETB P2.401041202B5 179 LCALL YS4722U 180 01077446 181 MOV A,#01000110B0109F580 182 MOV P0,A010BC2A4 183 CLR P2.4010DD2A0 184 SETB P2.0010FD2A1 185 SETB P2.10111D2A2 186 SETB P2.20113D2A3 187 SETB P2.301151202B5 188 LCALL YS4722U011822 189 RET 190 A51MACROASSEMBLER LCDTEMP 03/08/200703:05:53PAGE 4 191 192 ;|------------------------------------------------| 193 ;|讀出DS18B20序列號(hào)應(yīng)用程序 194 ;|------------------------------------------------|0119C2AF 195 GETROM:CLR EA011B1201E1 196 LCALL INIT18B20011E200103 197 JB DS18B20,GETROM10121D2AF 198 SETB EA012322 199 RET01247433 200 GETROM1:MOV A,#33H0126120230 201 LCALL WRITE18B20 ;送入讀DS18B20的ROM命令01297C08 202 MOV R4,#8 ;從DS18B20中讀出8字節(jié)ROM示?012B793D 203 MOV R1,#ID1012D120210 204 LCALL READ18B200130D2AF 205 SETB EA013222 206 RET 207 0133C2AF 208 GETTEMP:CLR EA01351201E1 209 LCALL INIT18B20 ;先復(fù)位DS18B200138200103 210 JB DS18B20,TSS2013BD2AF 211 SETB EA013D22 212 RET013E74CC 213 TSS2: MOV A,#0CCH ;跳筊OM匹配0140120230 214 LCALL WRITE18B2001437444 215 MOV A,#44H ;發(fā)出溫度轉(zhuǎn)換命令0145120230 216 LCALL WRITE18B2001481202DB 217 LCALL YS800M ;延時(shí)0.8S,延時(shí)>750MS014B1201E1 218 LCALL INIT18B20014E74CC 219 MOV A,#0CCH ;跳筊OM匹配0150120230 220 LCALL WRITE18B20015374BE 221 MOV A,#0BEH ;發(fā)出讀溫度命令0155120230 222 LCALL WRITE18B2001587C02 223 MOV R4,#2 ;從DS18B20中讀出2字節(jié)溫度示?015A793B 224 MOV R1,#TEMPL015C120210 225 LCALL READ18B20 ;讀溫度 226 227 ; MOV TEMPH,#0FEH 228 ; MOV TEMPL,#37H 229 015FD2AF 230 SETB EA 231 232 016175382E 233 DOTEMP:MOV TEMPXSD,#2EH0164E53C 234 TESTS1:MOV A,TEMPH016654F8 235 ANL A,#11111000B0168B4F80A 236 CJNE A,#0F8H,TESTS0016B7530FF 237 MOV TEMPFH,#0FFH016ED203 238 SETB TEMPSBIT0170C202 239 CLR TEMPERRB0172020187 240 LJMP DOTEMP10175B4000A 241 TESTS0:CJNE A,#00H,TEMPERR0178753000 242 MOV TEMPFH,#00H017BC203 243 CLR TEMPSBIT017DC202 244 CLR TEMPERRB017F020187 245 LJMP DOTEMP10182 246 TEMPERR:0182D202 247 SETB TEMPERRB01840201DE 248 LJMP TEMPRET0187 249 DOTEMP1:0187300315 250 JNB TEMPSBIT,DOTEMP2018AE53C 251 MOV A,TEMPH018CF4 252 CPL A018DF53C 253 MOV TEMPH,A018FE53B 254 MOV A,TEMPL0191F4 255 CPL A0192C3 256 CLR CA51MACROASSEMBLER LCDTEMP 03/08/200703:05:53PAGE 501932401 257 ADD A,#10195F53B 258 MOV TEMPL,A0197E53C 259 MOV A,TEMPH01993400 260 ADDC A,#00H019B5407 261 ANL A,#00000111B019DF53C 262 MOV TEMPH,A019F 263 DOTEMP2:019FE53C 264 MOV A,TEMPH01A1C4 265 SWAP A01A2F53C 266 MOV TEMPH,A01A4E53B 267 MOV A,TEMPL01A6540F 268 ANL A,#00001111B01A8F53A 269 MOV TEMPXS,A01AAE53B 270 MOV A,TEMPL01AC54F0 271 ANL A,#11110000B01AEC4 272 SWAP A01AFA93C 273 MOV R1,TEMPH01B149 274 ORL A,R101B2F539 275 MOV TEMPZS,A01B4 276 HBCD:01B4E539 277 MOV A,TEMPZS01B675F064 278 MOV B,#10001B984 279 DIV AB01BAF531 280 MOV TEMPBW,A01BC740A 281 MOV A,#1001BEC5F0 282 XCH A,B01C084 283 DIV AB01C1F532 284 MOV TEMPSW,A01C3E5F0 285 MOV A,B01C5F533 286 MOV TEMPGW,A01C77A04 287 FLXS: MOV R2,#401C9E53A 288 MOV A,TEMPXS01CB540F 289 ANL A,#00001111B01CD75F004 290 MOV B,#401D0A4 291 MUL AB01D1F9 292 MOV R1,A01D27834 293 MOV R0,#TEMPXS101D4900248 294 FLXS1: MOV DPTR,#DISPXS01D7E9 295 MOV A,R101D893 296 MOVC A,@A+DPTR01D9F6 297 MOV @R0,A01DA08 298 INC R001DB09 299 INC R101DCDAF6 300 DJNZ R2,FLXS1 301 01DE 302 TEMPRET:01DED2AF 303 SETB EA01E022 304 RET 305 306 ;-----------------------------------------------------01E1 307 INIT18B20:01E1D2B3 308 SETB DQ01E300 309 NOP01E4C2B3 310 CLR DQ01E6786B 311 MOV R0,#107 ;主機(jī)發(fā)出延時(shí)537微秒的復(fù)位低脈沖[2]01E87903 312 MOV R1,#301EAD8FE 313 TSR1: DJNZ R0,TSR101EC786B 314 MOV R0,#10701EED9FA 315 DJNZ R1,TSR101F0D2B3 316 SETB DQ01F200 317 NOP01F300 318 NOP01F400 319 NOP01F57825 320 MOV R0,#25H01F730B304 321 TSR2: JNB DQ,TSR301FAD8FB 322 DJNZ R0,TSR2A51MACROASSEMBLER LCDTEMP &nbs
我有大量學(xué)習(xí)資料全是視頻講課逢送大家有需要者請(qǐng)盡快13116568786主要嵌入式系統(tǒng)講座,數(shù)控機(jī)床技術(shù),單片機(jī)視頻,C語(yǔ)言,計(jì)算機(jī)接口,集成電路設(shè)計(jì),數(shù)字信號(hào)處理,數(shù)字電路設(shè)計(jì)基礎(chǔ),模擬電路設(shè)計(jì),人工智能,射頻模擬接口,電路分析基礎(chǔ),單片機(jī)應(yīng)用,EDA,電路分析,計(jì)算機(jī)硬件,模擬電路入門,網(wǎng)寬,看懂各類電路圖紙,無(wú)線電全集,電視機(jī)手機(jī)維修視頻講座,電工電子傳感器等應(yīng)用資料,DSP視頻教程,PLC視頻教程,觸摸屏學(xué)習(xí)手冊(cè)及軟件,還有我新開發(fā)的15KW電磁加熱技術(shù)買斷轉(zhuǎn)讓價(jià)為1萬(wàn)元.以上學(xué)習(xí)資料全為多媒體電腦視頻光盤.每門課均在40左右節(jié)課程.有需要者只需付材料和快遞費(fèi)50元即可.
0
回復(fù)
@自學(xué)成才
我有大量學(xué)習(xí)資料全是視頻講課逢送大家有需要者請(qǐng)盡快13116568786主要嵌入式系統(tǒng)講座,數(shù)控機(jī)床技術(shù),單片機(jī)視頻,C語(yǔ)言,計(jì)算機(jī)接口,集成電路設(shè)計(jì),數(shù)字信號(hào)處理,數(shù)字電路設(shè)計(jì)基礎(chǔ),模擬電路設(shè)計(jì),人工智能,射頻模擬接口,電路分析基礎(chǔ),單片機(jī)應(yīng)用,EDA,電路分析,計(jì)算機(jī)硬件,模擬電路入門,網(wǎng)寬,看懂各類電路圖紙,無(wú)線電全集,電視機(jī)手機(jī)維修視頻講座,電工電子傳感器等應(yīng)用資料,DSP視頻教程,PLC視頻教程,觸摸屏學(xué)習(xí)手冊(cè)及軟件,還有我新開發(fā)的15KW電磁加熱技術(shù)買斷轉(zhuǎn)讓價(jià)為1萬(wàn)元.以上學(xué)習(xí)資料全為多媒體電腦視頻光盤.每門課均在40左右節(jié)課程.有需要者只需付材料和快遞費(fèi)50元即可.
很好!
0
回復(fù)

0
回復(fù)