4.1.1 硬件電路
1. 硬件電路

硬件電路如圖4.1所示,555振蕩電路產(chǎn)生約4HZ的脈沖信號(hào),經(jīng)S3點(diǎn)接到單片機(jī)P3.4輸入端,注意應(yīng)將跳線JP1下面的兩個(gè)端子(M與R)短接。
圖4.1 單片機(jī)計(jì)數(shù)電路原理圖
2. 工作原理
MCS-51單片機(jī)內(nèi)部有兩個(gè)16位的定時(shí)/計(jì)數(shù)器,都可以用于對(duì)外部事件進(jìn)行計(jì)數(shù)。外部計(jì)數(shù)脈沖從P3.4或P3.5端口輸人,程序設(shè)置定時(shí)/計(jì)數(shù)器工作在計(jì)數(shù)狀態(tài)即可以對(duì)外部事件進(jìn)行計(jì)數(shù)。
4.1.2 程序設(shè)計(jì)
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV TMOD,#06H
MOV TH0,#0F6H
MOV TL0,#0F6H
SETB TR0
MOV A,#0FEH
LOOP: MOV P1,A
JBC TF0,MLOOP
SJMP LOOP
MLOOP:RL A
SJMP LOOP
END
4.1.3 源程序的編輯、編譯、下載
打開“偉福”模擬仿真軟件進(jìn)行程序的編輯、編譯。
打開“ISP下載軟件”將目標(biāo)文件下載到ISP-4實(shí)驗(yàn)開發(fā)板上的AT89S51單片機(jī)芯片,觀察程序運(yùn)行結(jié)果。
4.1.4 相關(guān)知識(shí)
在前面的程序中,我們經(jīng)常可以看到ORG、END這樣的東西,但是從我們已經(jīng)學(xué)完了51單片機(jī)的基本指令中,根本找不到它們。它們到底是什么呢?原來(lái)在單片機(jī)中,除了指令外還有偽指令。
1. 什么是偽指令?有哪些常用偽指令?
隨著單片機(jī)的廣泛應(yīng)用和開發(fā)以裝置功能的不斷完善與發(fā)展,匯編語(yǔ)言源程序都借助系統(tǒng)機(jī)(PC等)進(jìn)行編輯、匯編和調(diào)試。因此,在編制匯編語(yǔ)言源程序時(shí),常需應(yīng)用偽指令。偽指令又稱匯編程序控制譯碼指令,屬說(shuō)明性匯編指令。“偽”字體現(xiàn)在匯編時(shí)不產(chǎn)生機(jī)器指令代碼,不影響程序的執(zhí)行,僅產(chǎn)生供匯編時(shí)用的某些命令,在匯編時(shí)執(zhí)行某些特殊操作。
不同的單片機(jī)及其開發(fā)裝置所定義的偽指令不全相同。下面介紹幾種常用的偽指令。
(1) 為標(biāo)號(hào)賦值偽指令
?、佟?biāo)號(hào)等值偽指令——EQU
格式:〈標(biāo)號(hào):〉EQU〈表達(dá)式〉
指令的含義為本語(yǔ)句的標(biāo)號(hào)等值于表達(dá)式,亦即將表達(dá)式值賦予標(biāo)號(hào)。這里的標(biāo)號(hào)和表達(dá)式是必不可少的。
例如:
TTY: EQU 1080H
本語(yǔ)句向匯編程序指明,標(biāo)號(hào)TTY已于前句賦值為1080H,則相當(dāng)于TTY=1080H。用EOU語(yǔ)句給一個(gè)標(biāo)號(hào)賦值以后,在整個(gè)源程序中該標(biāo)號(hào)的值是固定而不能更改的。
② 定義標(biāo)號(hào)值偽指令——DATA
格式:〈標(biāo)號(hào):〉DATA〈表達(dá)式〉
其含義是定義該標(biāo)號(hào)的值為表達(dá)式值,同樣,標(biāo)號(hào)和表達(dá)式是不可缺少的。
例如:
COUNT1: DATA 2300H ;定義COUNT1=2300H
COUNT2: DATA COUNT1+1 ;定義COUNT2=2300H+1
由上可見,DATA和EQU的功能都是將表達(dá)成值賦給標(biāo)號(hào),但兩者有區(qū)別,用DATA語(yǔ)句賦值的標(biāo)號(hào)可以先用后定義,而用EQU語(yǔ)句賦值的標(biāo)號(hào),必須先定義后使用。
(2) 數(shù)據(jù)存儲(chǔ)說(shuō)明偽指令
數(shù)據(jù)存儲(chǔ)說(shuō)明偽指令的作用是將數(shù)據(jù)存儲(chǔ)在程序存儲(chǔ)器單元中。
?、佟《x字節(jié)數(shù)據(jù)偽指令——DB或DEGB
格式:〈標(biāo)號(hào):〉DB〈表達(dá)式或表達(dá)式串〉
式中表達(dá)式或表達(dá)式串是指一個(gè)字節(jié)或用逗號(hào)隔開的一個(gè)字節(jié)數(shù)據(jù)。其含義是將表達(dá)式或表達(dá)式串所指定的字節(jié)數(shù)據(jù)存入從標(biāo)號(hào)開始的連續(xù)存儲(chǔ)單元中。標(biāo)號(hào)為可選項(xiàng),它表示數(shù)據(jù)存入程序存儲(chǔ)器的起始地址。例如:
HERE:DB 56H ;將數(shù)據(jù)56H存入HERE所指示的單元中
DB OA7H
再如:
SECON:DB02H,36H,74H,0B4H,OFFH,…
上述語(yǔ)句表示將字節(jié)數(shù)據(jù)串按順序存篇幅 標(biāo)號(hào)SECON所指示的地址為起始順序存儲(chǔ)單元中。
作為本語(yǔ)句操作數(shù)控部分的表達(dá)式或表達(dá)式串,可以是數(shù)據(jù)表達(dá)式、ASCII碼字符串、字節(jié)數(shù)據(jù),字節(jié)數(shù)據(jù)串(其字節(jié)串長(zhǎng)度限制在80B的數(shù)據(jù)內(nèi))。
?、凇《x字?jǐn)?shù)據(jù)偽指令——DW或DEFW
格式:〈標(biāo)號(hào):〉DW〈表達(dá)式或表達(dá)式串〉
本語(yǔ)句的含義是將作為操作部分的字?jǐn)?shù)據(jù)(2B)或字?jǐn)?shù)據(jù)串存入由標(biāo)號(hào)指定的首地址按順序連續(xù)單元中,定義字為為雙字節(jié)的數(shù)據(jù)。在執(zhí)行匯編時(shí),計(jì)算機(jī)會(huì)自動(dòng)按高位字節(jié)在前、低位字節(jié)在后的順序格式存入程序存儲(chǔ)器單元中,例如:
ABC:DW 1234H,4567H,0A5C4H,…
匯編執(zhí)行時(shí)第一個(gè)字節(jié)的12H存入標(biāo)號(hào)ABC所指示的存儲(chǔ)單元,34H存入(ABC)+1單元中,其余按此順序?qū)⒑罄m(xù)字節(jié)數(shù)據(jù)存入對(duì)應(yīng)的存儲(chǔ)單元中,如標(biāo)號(hào)ABC定義為1000H,則上例匯編后:(1000H)=12H,(1001H)=34H,(1002H)=45H,…。
(3) 存儲(chǔ)區(qū)說(shuō)明偽指令——DS
格式:〈標(biāo)號(hào):〉DS〈表達(dá)式〉
其含義是以標(biāo)號(hào)的值為首地址保留表達(dá)式所指定的若干存儲(chǔ)單元空間作為備用。例如:
BASE:DS 0100H
匯編后,程序存儲(chǔ)器從標(biāo)號(hào)BASE為首地址開始,空出256個(gè)存儲(chǔ)單元,以備另用。
(4) 程序起始地址偽指令——ORG
格式:ORG〈表達(dá)式〉
其含義是指定下面目標(biāo)程序的起始地址為表達(dá)式值。表達(dá)式常為一個(gè)雙字節(jié)地址數(shù)。
例如:
ORG 0100H
START: MOV A,#00H
匯編號(hào),從START開始的目標(biāo)程序,其起始地址從0100H開始。由于表達(dá)式0100H是立即型地址碼所以隱含地指明該程序段屬絕對(duì)地址段。
一個(gè)源程序中,可能有多處設(shè)置程序段起始地址,因此定義地址空間應(yīng)從低地址端向高地址設(shè)置,不能重疊,否則將出錯(cuò)。若程序段前無(wú)ORG偽指令,則匯編后的目標(biāo)程序?qū)?000H地址開始或緊接前段程序后。若表達(dá)式為浮動(dòng)程序段中定義過(guò)的標(biāo)號(hào),則由該標(biāo)號(hào)定義的目標(biāo)程序段首地址也將之浮動(dòng)。
(5) 匯編結(jié)束偽指令——END
END偽指令是匯編語(yǔ)言源程序結(jié)束為標(biāo)志。源程序在匯編過(guò)程中執(zhí)行完END偽指令,即結(jié)束偽指令,為調(diào)試方便,可根據(jù)調(diào)試需要而設(shè)置。它有兩種格式:
格式1:〈標(biāo)號(hào):〉END〈表達(dá)式〉
格式2:〈標(biāo)號(hào):〉END
或者 END
其中標(biāo)號(hào)不是必需的,有無(wú)表達(dá)式的區(qū)別在于前者在匯編結(jié)束后立即轉(zhuǎn)向由表達(dá)式指定的起始地址開始執(zhí)行程序。因此,只需在程序運(yùn)行的入口處和END后的表達(dá)式以同一個(gè)標(biāo)號(hào)設(shè)置,當(dāng)匯編完源程序后就自動(dòng)轉(zhuǎn)向由標(biāo)號(hào)指定的入口處開始執(zhí)行。表達(dá)式也可以入口入的絕對(duì)地址,后者則匯編結(jié)束后立即停機(jī)。
