❶ 單片機80C196KC的T2溢出中斷怎麼用來定時
將AT89C52用作多功能外圍器件使用
發布時間:2004年12月25日 點擊次數:874
來源:單片機及嵌入式系統應用 作大坦猜者:過幼南
摘要:介紹利用AT89C52單片機作為多功能可編程介面的方法。信枝該介面具有1個鍵盤/顯示介面,2個16位定時/計數器和1個全雙工非同步串列通信口。其模塊化的設計,可以給用戶使用帶來許多方便。
關鍵詞:多功能介面 串列通信 軟體解碼
AT89C52(簡稱89C52)的廣泛使用,使單片機的價格大大下降。目前,89C52的市場零售價已經低於8255、8279、8253、8250等專用介面晶元中的任何一種;而89C52的功能實際上遠遠超過以上晶元。因此,如把89C52作為介面晶元使用,在經濟上是合算的。在本人設計的系統中,將89C52設計為多功能可編程介面,其相關程序固化在片內的Flash ROM中。該晶元(以下簡稱多功能介面滾型)具有如下功能:①有1個專用的鍵盤/顯示介面;②有1個全雙工非同步串列通信介面;③有2個16位定時/計數器。這樣,1個89C52晶元,承擔了3個專用介面晶元的工作;不僅使成本大大下降,而且優化了硬體結構和軟體設計,給用戶帶來許多方便。
1 硬體結構
把89C52當作介面使用,介面自身必須盡可能地少佔用硬體資源,與主系統之間的連接線也應盡可能少,這樣才能少佔主機引腳,把更多的資源留給系統。本設計中,主機與多功能介面之間採用串列通信。主機與多功能介面之間有四根連接線:CE、CLK、DAT、INTR。CE用於作片選信號輸入端。此引腳為低電平時,主機能與多功能介面進行數據傳送。CLK為時鍾輸入端,當主機向多功能介面發送指令時,此引腳電平上升表示數據有效。DAT為串列數據輸入/輸出端。INTR為多功能介面輸出端。當多功能介面內的數據准備好時,由INTR向主機發低電平,通知主機,數據已准備就緒,可以進行讀操作。該信號可供主機查詢,也可用作發向主機的中斷請求信號。
89C52的P0、P1、P2口用作鍵盤/顯示介面。用程序掃描的方法進行鍵盤輸入和顯示輸出。P0口作為欄位口,P1口作為鍵盤的列輸入口,P2作為顯示器的字位口以及鍵盤的行掃描輸出口。由於顯示器字位口電流較大,P2口需進行電流驅動。該多功能介面最多可連接8個LED顯示器和1個8×8鏈盤矩陣。其硬體原理如圖1所示。
P3.2、P3.3、P3.6、P3.7分別用作CE、CLK、DAT和INTR信號;而P3.0、P3.1用作非同步串列通信數據線RXD和TXD;P3.4、P3.5分別是OUT0/T0和OUT1/T1信號線。該引腳在定時器工作於連續脈沖方式時,可輸出通斷比與頻率可編程的連續脈沖;工作在計數器方式時,該引腳作為外部計數脈沖輸入端輸入計數脈沖。
圖1
2 通信協議
實現多功能介面的關鍵是主機和多功能介面之間的通信。在本設計中,採用主從方式進行通信,所有的操作都由主機發出操作指令。多功能介面在收到主機發來的操作指令後,對操作碼進行軟體解碼。根據操作碼的內容轉入相應的工作通道,並從操作數部分獲取所需要的數據。
多功能介面採用串列方式與主機通信。串列數據從DAT引腳送入晶元,並由CLK端同步。當片選信號CE變低後,DAT引腳上的數據在CLK引腳的上升沿被寫入多功能介面的寄存器中。
串列介面的時序如圖2所示。
圖2
由於多功能介面接收指令的工作用軟體進行,因此,圖中的t1、t2、t3、t4、t5時間較長,要求t1-t4時間在10μs~1000μs。指令有兩類:一類寫指令,一類是讀指令。寫指令中不管是操作碼還是操作數,其數據傳送方向均為從主機到多功能介面;而對讀指令來講,操作碼部分的數據方向是從主機到多功能介面,而操作數部分的數據方向是從多功能介面到主機。
t5是讀指令中操作碼與操作數之間需要的時間間隔,t5應在30μs~1000μs的范圍。在讀操作時,CLK時鍾的上升沿來到時,多功能介面將數據送到DAT引腳上。
3 指令編碼
多功能介面共有13條指令。指令長度為1位元組、2位元組、3位元組和4位元組不等。
(1)復位指令
機器碼為00H。當多功能介面收到復位指令後,所有字元消隱,所有定時器清零,定時中斷和串列中斷關閉。其狀態與系統上電復位的情況相似。
(2)顯示數據指令
該指令向多功能介面的顯示緩沖器中發送顯示數據。這是一個2位元組指令,其指令編碼如下:
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 1 0 0 0 0
D7 D6 D5 D4 D3 D2 D1 D0
dip 0 0 0 d3 d2 d1 d0
其中dip為小數點控制位,a2、a1、a0為位地址,d3、d2、d1、d0為待顯示的字元,其格式如表1、2所列。
(3)閃爍指令
該指令控制各個數碼管的閃爍屬性。d7~d0分別對應數碼管1~8,1為閃爍,0為不閃爍。
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 1 0 0 0 0
D7 D6 D5 D4 D3 D2 D1 D0
d7 d6 d5 d4 d3 d2 d1 d0
(4)循環左移指令
指令碼為11H。該指令將所有顯示從左向右移動1位。
表1
a2 a1 a0 顯示位
0 0 0 1
0 0 1 2
0 1 0 3
0 1 1 4
1 0 0 5
1 0 1 6
1 1 0 7
1 1 1 8
表2
d3 d2 d1 d0 顯示字元
0 0 0 0 0
0 0 0 1 1
0 0 1 0 2
0 0 1 1 3
0 1 0 0 4
0 1 0 1 5
0 1 1 0 6
0 1 1 1 7
1 0 0 0 8
1 0 0 1 9
1 0 1 0 -
1 0 1 1 H
1 1 0 0 L
1 1 0 1 P
1 1 1 0 E
1 1 1 1 空
(5)循環右移指令
指令碼為12H。該指令將所有顯示從右向左移動1位。
(6)讀鍵盤指令
指令為2位元組指令,操作數為讀到的鍵值。各鍵盤的鍵值如圖1所示。該指令格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 1 0 0 1 1
D7 D6 D5 D4 D3 D2 D1 D0
d7 d6 d5 d4 d3 d2 d1 d0
(7)連續脈沖輸出指令
該指令對定時器進行編程。使OUT0/OUT1輸出連續脈沖,脈沖的通斷比和頻率可以通過編程設定。其指令為4,格式如下:
第1位元組
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 1 0 0 1 1/0
第2位元組
D7 D6 D5 D4 D3 D2 D1 D0
M3 M2 M1 M0 N3 N2 N1 N0
第3位元組
D7 D6 D5 D4 D3 D2 D1 D0
f15 f14 f13 f12 f11 f10 f9 F8
第4位元組
D7 D6 D5 D4 D3 D2 D1 D0
f7 f6 f5 f4 f3 f2 f1 f0
其中M:N是脈沖的通斷比,M或N的設置范圍是1~10。f15~f0是頻率設置,其設置范圍是1~9999Hz。採用BCD碼設置。指令操作碼中,D0設置定時器0或定時器1工作。
(8)定時器方式指令
該指令為3位元組指令。操作碼為22H、23H,其中D0位確定對定時器0還是定時器1進行操作。第2、第3位元組為定時時間。
(9)計數器方式指令
該指令為3位元組指令。操作碼為24H、25H,其中D0位確定對定時器0還是定時器1進行操作。第2、第3位元組為計數初值。
(10)讀計數器指令
為3位元組指令。操作碼為26H、27H,第2、第3位元組為從計數器讀到的計數值。操作碼的D0位確定對計數器0還是計數器1進行操作。通過該指令讀以16位計數器的當前計數值。
(11)串列發送指令
該指令對非同步串列通信進行初始化,其指令格式如下:
第1位元組
D7 D6 D5 D4 D3 D2 D1 D0
0 0 1 1 0 a2 a1 a0
表2位元組
D7 D6 D5 D4 D3 D2 D1 D0
b1 b0 d5 d4 d3 d2 d1 d0
第3位元組
D7 D6 D5 D4 D3 D2 D1 D0
d7 d6 d5 d4 d3 d2 d1 d0
第4位元組
D7 D6 D5 D4 D3 D2 D1 D0
d7 d6 d5 d4 d3 d2 d1 d0
串列通信採用批傳送的方法進行。每條指令傳送1個數據幀。指令中,第1、第2位元組用來進行串列通信初始化,第3位元組以後是發送的各個數據。b1、b0用來確定奇校驗、偶校驗還是不校驗。第2位元組的操作數d5、d4、d3、d2、d1、d0用來設定該幀數據的個數,最多1幀可發送64個字元。a2、a1、a0設定串列通信的波特率。其波特率如表3所列。
表3
a2 a1 a0 波特率/baud
0 0 0 110
0 0 1 150
0 1 0 300
0 1 1 600
1 0 0 1200
1 0 1 2400
1 1 0 4800
1 1 1 9600
(12)串列接收指令
指令格式如下:
第1位元組
D7 D6 D5 D4 D3 D2 D1 D0
0 0 1 1 1 a2 a1 a0
第2位元組
D7 D6 D5 D4 D3 D2 D1 D0
b1 b0 d5 d4 d3 d2 d1 d0
第3位元組
D7 D6 D5 D4 D3 D2 D1 D0
d7 d6 d5 d4 d3 d2 d1 d0
第4位元組
D7 D6 D5 D4 D3 D2 D1 D0
d7 d6 d5 d4 d3 d2 d1 d0
指令編碼與串列發送送似,第3位元組之後為接收到的數據。
(13)讀狀態指令
指令格式如下:
D7 D6 D5 D4 D3 D2 D1 D0
0 1 0 0 0 0 0 0
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 d4 d3 d2 d1 d0
在鍵盤輸入、計數器回等或串列通信中斷時,多功能介面將向INTR發出負脈沖,主機在響應後應發讀狀態指令,查詢狀態標志,確定是哪個狀態標志動作。其中d0為鍵盤輸入標志,d1為計數器0回零動作。d2為計數器1回零標志。d3為串列接收結束標志,d4為串列發送結束標志。
4 多功能介面的軟體設計
在主程序中進行顯示掃描和鍵盤掃描,如有鍵盤輸入,則找出鍵盤矩陣的鍵號。鍵號存入鍵值寄存器,並置位狀態標志,同時發出INTR負脈沖,通知主機來取鍵值。
主機通過指令對多功能介面進行操作。主機首先要將CE置0。該下降沿通過P3.2向多功能介面發出外部中斷。在中斷服務程序中,多功能介面進行取指和解碼操作,並通過散轉指令轉入相應的處理通道。則中斷返回。至此,一條指令的取指-解碼-執行的過程才告結束。程序回到主循環繼續進行顯示掃描和鍵盤掃描。
所謂取指操作實際上就是多功能介面與主機進行通信的過程。由於採取軟體進行通信,t1、t2、t3、t4、t5的寬度有一定的范圍。
在接收到主機的操作指令後,多功能介面與外設的串列通信及有關定時器的操作採用中斷方式進行。在中斷結束時,置位狀態標志,並向主機發INTR負脈沖。該負脈沖可供主機查詢,也可作為向主機發出的中斷請求信號。完成以上工作後,返回主程序。
89C52有三個定時器,其中T2在中串列通信時間來作為串列通信的波特率發生器。這樣T0和T1就可以出借給用戶作定時器內。T2在波特率發生器方式時,可置位T2CON寄存器中的TCLK位或RCLK位。在TH2、TL2中裝入計數初值,使T2從這個初值開始計數,但並不置位FT2。RCAR2H和RCAP2L中的常數由軟體設定後,T2的溢出率是嚴格不變的,因而使串列通信的波特率非常穩定。
5 應用實例
在本刊網路補充版(http://www.dpj.com.cn)中,給出主機為AT89C52時的應用實例。程序的功能為等待鍵盤輸入,然後將所讀到的鍵盤碼轉換成十進制後送LED數碼管顯示。
❷ en80c196kc20如何燒錄程序
安裝usb驅動程序。en80c196kc20程序燒錄步驟:
1、安裝USB驅動程序。
2、驅動安裝完後,請檢查USB的COM埠號。
3程序燒錄時,答高要滿足下面各參數喚桐的設置情況,打開commagicexe燒錄軟體,選清鏈尺種「FlashMagic」選項卡。
❸ 單片機 反應速度測試器設計
TICK EQU 100
T10ms EQU 65536-7500
C10ms EQU 30H
ORG 2000H
DCW T_OVER
ORG 200EH
DCW ENIT
ORG 2080H
LD SP,#0F0H
LDB IOC1,#00000100B
LDB INT_MASK,#10000001B
DI
LD C10ms,#TICK
XOR CX,CX
LDB CL,#4
LDB IOPORT1,#0
LOOP1:
LDB IOPORT1,#00001111B
CALL DELAY
CALL DELAY
LDB IOPORT1,#00000000B
CALL DELAY
CALL DELAY
SUBB CL,#1
CMPB CL,#0H
JNE LOOP1
EI
START:
SJMP START
T_OVER:
PUSHF
LDB WSR,#15
LD T1, #T10ms
LDB WSR, #0
DEC C10ms
JNE BACK
LDB C10ms, #TICK
LDB IOPORT1,#00001111B
LDB INT_MASK,#10000001B
EI
BACK:
POPF
RET
ENIT:
PUSHF
LD AX,C10ms
LD DX,#100
SUB DX,AX
LDB IOPORT1,DX
FINISH:
POPF
RET
DELAY:
LD BX,0
DLOOP:
DJNZ BL, DLOOP
DJNZ BH, DLOOP
RET
END
謝謝大方的樓主