版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)原理及其嵌入式應(yīng)用
實(shí)驗(yàn)根本實(shí)驗(yàn)綜合實(shí)例<<<1根本實(shí)驗(yàn)程序框架開(kāi)關(guān)量輸入輸出(IO)實(shí)驗(yàn)串行通信及AD轉(zhuǎn)換實(shí)驗(yàn)鍵盤(pán)編程實(shí)驗(yàn)液晶顯示實(shí)驗(yàn)數(shù)碼管顯示實(shí)驗(yàn)FLASH編程實(shí)驗(yàn)定時(shí)器溢出中斷實(shí)驗(yàn)定時(shí)器輸入中斷捕捉實(shí)驗(yàn)<<<2程序框架實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)器材硬件接線軟件功能程序清單備注說(shuō)明<<<3實(shí)驗(yàn)?zāi)康?了解程序根本框架4實(shí)驗(yàn)器材:1.SD-1型在線編程實(shí)驗(yàn)儀2.導(dǎo)線假設(shè)干5硬件接線:VCCPTC3PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTC0PTC1PTC2MOTOROLAGP32MCUPTC4PTB7PTB6PTB5PTB4PTB3PTB2PTB1PTB06軟件功能:PTA口的模擬量輸出,控制指示燈程序執(zhí)行指示燈閃爍7程序清單:文件說(shuō)明口地址定義數(shù)據(jù)區(qū)定義主程序系統(tǒng)初始化及中斷矢量延時(shí)子程序8*---------文件說(shuō)明------------------------------------*文件名:PrgFrame.ASM*硬件連接:PTA.1接指示燈*程序描述:指示燈PTA.1閃爍*目的:第一個(gè)MotorolaMCU程序框架*說(shuō)明:提供MotorolaMCU的編程框架,供教學(xué)入門(mén)使用*-----------------------------------------------------9*----口地址定義----------------------------PTAEQU$0000;A口數(shù)據(jù)存放器DDRAEQU$0004;A口數(shù)據(jù)方向存放器10RAMstartAddrequ$0040;RAM的起始地址〔因芯片不同可以更改〕FlashStartAddrequ$8000;程序開(kāi)始地址〔因芯片不同可以更改〕*數(shù)據(jù)區(qū)定義〔變量名定義〕——————————————————orgRAMstartAddr;RAM的起始地址N1rmb1;變量N1,緩沖使用11*主程序——————————————————————————————orgFlashStartAddr;程序起始地址MainInit:;復(fù)位后程序從此開(kāi)始執(zhí)行;系統(tǒng)初始化SEI;禁止所有中斷LDHX#$023F;堆棧初始化,放入GP32的RAM最高端TXSJSRInit0;調(diào)系統(tǒng)初始化子程序Init0,初始學(xué)習(xí)時(shí)跳過(guò)此處;I/O初始化BSET1,DDRA;設(shè)置PTA.1為輸出BSET1,PTA;初始時(shí),PTA.1指示燈"暗"MainLoop:;程序總循環(huán)入口BCLR1,PTA;PTA.1指示燈“亮〞MOV#$2,N1;延時(shí)子程序DelaySub的時(shí)間長(zhǎng)度入口JSRDelaySub;調(diào)用延時(shí)子程序BSET1,PTA;初始時(shí),PTA.1指示燈"暗"MOV#$4,N1;延時(shí)子程序DelaySub的時(shí)間長(zhǎng)度入口JSRDelaySub;調(diào)用延時(shí)子程序;-------------------------------------------------------JMPMainLoop;轉(zhuǎn)總循環(huán)入口處 12Init0:;系統(tǒng)初始化Init0子程序LDA#%00000001;初始化CONFIG2STA$001ELDA#%00111101;初始化CONFIG1STA$001FCLR$0036;初始化PTCLMOV#$01,$0036MOV#$01,$0038MOV#$2C,$0039MOV#$80,$003ABSET5,$0036BSET7,$0037BSET4,$0036RTS*----中斷矢量---------------------------------ORG$FFFE;復(fù)位矢量DWMainInit13延時(shí)子程序DelaySub:;延時(shí)0.1秒PSHH;保據(jù)存放器HXPSHXDelaySub1:LDHX#$FFFFDelaySub2:PSHA;保護(hù)存放器ALDA#$FFDelaySub3:DBNZADelaySub3PULADBNZXDelaySub2DBNZADelaySub1PULXPULHRTS14開(kāi)關(guān)量輸入輸出(IO)實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)器材硬件接線程序功能程序清單備注說(shuō)明<<<15實(shí)驗(yàn)?zāi)康?掌握I/O口的根本使用方法16實(shí)驗(yàn)器材:1.SD-1型在線編程實(shí)驗(yàn)儀2.導(dǎo)線假設(shè)干17vccvccPTC0PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0vccPTB1PTC1PTB0MOTOROLAGP32MCU黃線為學(xué)生接線硬件接線:18程序功能:開(kāi)關(guān)PTA7-4分別控制著指示燈PTA3-0亮暗開(kāi)關(guān)PTB0\PTC0其中之一閉合,指示燈PTB7-1與PTC1交替暗亮;假設(shè)兩個(gè)均未閉合,那么指示燈PTB1與PTC1均不亮;假設(shè)兩個(gè)均閉合,那么兩個(gè)指示燈均亮.19程序清單:程序說(shuō)明口地址定義變量定義主程序初始化子程序復(fù)位矢量20*------程序說(shuō)明--------------------------------**文件名:IOEXMA.ASM*硬件連接:PTA7-4接開(kāi)關(guān),PTA3-0接指示燈*PTB1接指示燈,PTB0接開(kāi)關(guān)*PTC1接指示燈,PTC0接開(kāi)關(guān)*程序描述:①開(kāi)關(guān)PTA7-4分別控制著指示燈PTA3-0暗*②開(kāi)關(guān)PTB0、PCT0其中之一閉合指示PTB7-1*與PTC1交替暗亮,假設(shè)兩個(gè)均未閉合那么指示燈*PTB1與PTC1均不亮,假設(shè)兩個(gè)均閉合那么兩排*指示燈均亮。*目的:I/O口的根本使用方法*說(shuō)明:僅作為根本教學(xué)例程*----------------------------------------------*21*-----口地址定義—————————————————DDRAequ$0004;A口數(shù)據(jù)方向存放器PTAequ$0000;A口數(shù)據(jù)存放器PTAPUEequ$000D;A口上拉電阻允許存放器DDRBequ$0005;B口數(shù)據(jù)方向存放器PTBequ$0001;B口數(shù)據(jù)存放器DDRCequ$0006;C口數(shù)據(jù)方向存放器PTCequ$0002;C口數(shù)據(jù)存放器RAMstartAddrequ$0040;RAM的起始地址〔因芯片不同可以更改〕FlashStartAddrequ$8000;程序開(kāi)始地址〔因芯片不同可以更改〕*-----數(shù)據(jù)區(qū)定義〔變量名定義〕——————————orgRAMstartAddrTmpVarrmb1;變量TmpVar,緩沖使用Light_BCrmb1;BC口燈的狀態(tài)22*------主程序————————————————orgFlashStartAddr;程序起始地址MainInit:NOP;初始化——————
SEI;禁止所有中斷LDHX#$023F;堆棧初始化,;放GP32的RAM最高端TXSJSRInit0;調(diào)系統(tǒng)初始化子程序Init0,
;初始學(xué)習(xí)時(shí)跳過(guò)此處
23LDA#%00001111;定義A口7-4為輸入,3-0為輸出STADDRALDA#%11110000;定義A口7-4有上拉電阻STAPTAPUELDA#%11111110;定義B口7-1為輸出,0為輸入STADDRBSTADDRC;定義C口7-1為輸出,0為輸入MOV#$FF,Light_BC;BC口燈的狀態(tài)賦初值24Start:;程序總循環(huán)入口——
NOPLDAPTA;讀取A口狀態(tài)NSA;A口7-4輸入控制A口3-0輸出
;剛好為A.7-4->A.3-0COMASTAPTALDAPTB;取開(kāi)關(guān)PTB0狀態(tài),0-閉合AND#%00000001;剩下PTB0位STATmpVar;放入變量TmpVar25NOPLDAPTC;取開(kāi)關(guān)PTC0狀態(tài),0-閉合AND#%00000001;剩下PTC0位NOPADDTmpVar;經(jīng)過(guò)此運(yùn)算假設(shè)A=0,兩個(gè)均閉合;假設(shè)=1,有一個(gè)閉合;=2,均未閉合CBEQA#$0,Light0;比較,相等轉(zhuǎn)移,A=0轉(zhuǎn)向Light026
NOPCBEQA#$1,Light1;A=1轉(zhuǎn)Light1NOP;A=2,兩排均不亮LDA#$FF;兩排燈均不亮1-不亮STAPTBSTAPTCBRAIO_End;轉(zhuǎn)IO_END,延時(shí)27Light0:LDA#$00;兩排燈均亮0-亮STAPTBSTAPTCBRAIO_End;無(wú)條件轉(zhuǎn)IO_ENDLight1:LDALight_BC;兩排燈之一亮0-亮STAPTB;驅(qū)動(dòng)B口燈NEGA;求補(bǔ)命令STAPTC;驅(qū)動(dòng)B口燈STALight_BC;保存狀態(tài)28IO_End:LDA#$FE;延時(shí)Delay1:LDX#$FCDelay2:NOPNOPNOPDBNZXDelay2DBNZADelay1BRAStart;無(wú)條件轉(zhuǎn)開(kāi)始處*-------------------------------------------29*------子程序--------------------------*Init0:;系統(tǒng)初始化Init0子程序LDA#%00000001;初始化CONFIG2STA$001ELDA#%00111101;初始化CONFIG1STA$001FCLR$0036;初始化PTCLMOV#$01,$0036MOV#$01,$0038MOV#$2C,$0039MOV#$80,$003A
30BSET5,$0036BSET7,$0037BSET4,$0036RTS*--------復(fù)位矢量----------------------------
ORG$FFFE;復(fù)位矢量DWMainInit31備注說(shuō)明:
僅作為根本教學(xué)例程32串行通信及AD轉(zhuǎn)換實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)器材硬件接線VB界面軟件功能程序清單備注說(shuō)明<<<33實(shí)驗(yàn)?zāi)康?A/D轉(zhuǎn)換,單片機(jī)異步串行通信
34實(shí)驗(yàn)器材:1.SD-1型在線編程實(shí)驗(yàn)儀2.導(dǎo)線假設(shè)干35硬件接線:VCCPTC3PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTC0PTC1PTC2MOTOROLAGP32MCUPTC4PTB7PTB6PTB5PTB4PTB3PTB2PTB1PTB0VCC36VB界面:37軟件功能:由PORTB口的模擬量輸入,通過(guò)單片機(jī)的A/D轉(zhuǎn)換器采集8路數(shù)據(jù),并放在ADBUF開(kāi)始的地址中。再在INBUF中放開(kāi)關(guān)量。發(fā)86給PC機(jī)作為握手信號(hào),進(jìn)行通信測(cè)試,PC機(jī)判斷后確認(rèn),發(fā)86作為確認(rèn)信號(hào),單片機(jī)收到86后,把模擬量0-7和開(kāi)關(guān)量送PC機(jī)顯示。38程序清單:文件說(shuō)明口地址定義SCI存放器A/D存放器數(shù)據(jù)區(qū)定義主程序A/D轉(zhuǎn)換串行通信輸出串行通信輸入從PC機(jī)接收數(shù)據(jù),并存儲(chǔ)后送PTA輸出把在INBUF和ADBUFF的數(shù)據(jù)送PC機(jī)輸出中斷矢量39*---------文件說(shuō)明-------------------------------------------**文件名:sci.as*硬件連接:PORTA口輸出它的PTA7-0接OUT的7-0號(hào)*指示燈〔A0作為運(yùn)行指示不受其它數(shù)據(jù)控制〕PORTB作為AD輸入連接,*PORTB口為模擬量輸入口,PORTC的C0-4接IN的5個(gè)撥位開(kāi)關(guān)0-4作為開(kāi)關(guān)*輸入串行口與微機(jī)串行口相接〔9600,N,8,1〕*程序描述:1.由PORTB口的模擬量輸入,通過(guò)單片機(jī)的A/D轉(zhuǎn)換器采集8*路數(shù)據(jù),并放在ADBUF開(kāi)始的地址中*2.再在INBUF中放開(kāi)關(guān)量*3.發(fā)86給PC機(jī)作為握手信號(hào),進(jìn)行通信測(cè)試,PC機(jī)判斷后確*認(rèn),發(fā)86作為確認(rèn)信號(hào),單片機(jī)收到86后,把模擬量0-7和*開(kāi)關(guān)量送PC機(jī)顯示*目的:A/D轉(zhuǎn)換,單片機(jī)異步串行通信*------------------------------------------------------------*40*----口地址定義----------------------------PTAEQU$0000;A口數(shù)據(jù)存放器PTBEQU$0001;B口數(shù)據(jù)存放器PTCEQU$0002;C口數(shù)據(jù)存放器PTDEQU$0003;D口數(shù)據(jù)存放器DDRAEQU$0004;A口數(shù)據(jù)方向存放器DDRBEQU$0005;B口數(shù)據(jù)方向存放器DDRCEQU$0006;C口數(shù)據(jù)方向存放器DDRDEQU$0007;D口數(shù)據(jù)方向存放器DDREEQU$0008;E口數(shù)據(jù)存放器41*----SCI存放器-----------------------------SCS1EQU$0016;SCI狀態(tài)存放器1B-SCTEEQU7;發(fā)送緩沖區(qū)空標(biāo)志位B-TCEQU6;發(fā)送完成標(biāo)志位B-SCRFEQU5;接收器滿標(biāo)志位SCDREQU$0018;SCI數(shù)據(jù)存放器*---A/D存放器-----------------------------ADSCREQU$003C;A/D轉(zhuǎn)換狀態(tài)和控制存放器B-COCOEQU7;轉(zhuǎn)換完成標(biāo)志位ADREQU$003D;A/D轉(zhuǎn)換數(shù)據(jù)存放器ADCLKEQU$003E;A/D轉(zhuǎn)換輸入時(shí)鐘存放器RAMstartAddrequ$0040;RAM的起始地址〔因芯片不同可以更改〕FlashStartAddrequ$8000;程序開(kāi)始地址〔因芯片不同可以更改〕42*----數(shù)據(jù)區(qū)定義〔變量定義〕--------------ORGRAMstartAddr;RAM的起始地址INBUFRMB1;1字節(jié)存放5位開(kāi)關(guān)量ADBUFRMB8;8字節(jié)存放8路A/D轉(zhuǎn)換結(jié)果ONOFFRMB1;1字節(jié)存放從PC的數(shù)據(jù)TMPVARRMB1;暫存使用43*----主程序---------------------------------ORGFlashStartAddr;程序起始地址MainInit::NOPLDA#$3E;A/D初始化2分頻、使用內(nèi)部總線時(shí)鐘STAADCLKLDA#$FF;定義PORTA輸出STADDRALDA#$00STAPTASTAONOFF;ONOFF=0LDA#$00;定義PORTB,PORTC作為輸入STADDRBSTADDRC 44*-------A/D轉(zhuǎn)換------------------------------Main:NOP;循環(huán)獲得8路AD值LDHX#$0;H:X=0GA-REPEAT:TXA;X存放器送到累加器STAADSCR;選定一路A/D,啟動(dòng)轉(zhuǎn)換BRCLR7,ADSCR,*;等待A/D轉(zhuǎn)換完成LDAADR;A/D轉(zhuǎn)換結(jié)果給ASTAADBUF,X;A給{ADBUF+X},儲(chǔ)存數(shù)據(jù)AIX#1;下一存儲(chǔ)單元CPX#$08;判斷8路轉(zhuǎn)換是否完成BNEGA-REPEAT;循環(huán)8次轉(zhuǎn)換8個(gè)通道模擬量45*----串行通信輸出-------------------------------GET-IN:LDAPTC;5位開(kāi)關(guān)量采集STAINBUF;暫放INBUFNOPLDA#$56;把86〔16進(jìn)制數(shù)56〕為握;手信號(hào)送出到PC中BRCLR7,SCS1,*;等待以前數(shù)據(jù)全部發(fā)出,;SCTE置1,發(fā)送緩沖區(qū)空STASCDR;發(fā)送緩沖區(qū)空時(shí),;可向SCI數(shù)據(jù)存放器送數(shù)46*----串行通信輸入-----------------------------NOPLDHX#0WS-REPE1:BRSET5,SCS1,WS-RECE1;測(cè)試SCRF位,
;判斷接收緩沖器是否滿NOPNOPAIX#1;延時(shí)等待CPHX#$FFFFBNEWS-REPE1BRADISP1;超時(shí)退出WS-RECE1:LDASCDR;讀取收到的數(shù)據(jù)
47CMP#$56;判斷是否為確認(rèn)信號(hào)86
BNEDISP1;不是退出,是就開(kāi)始通信NOPLDHX#0WS-REPE2:BRSET5,SCS1,WS-RECE2;測(cè)試SCRF位,
;判斷接收緩沖器是否滿NOPNOPAIX#1;延時(shí)等待CPHX#$6688BNEWS-REPE2;超時(shí)退出BRADISP148*----從PC機(jī)接收數(shù)據(jù),并儲(chǔ)存后送PTA輸出----------*----〔A.0不受影響〕----------------------------WS-RECE2LDASCDRNOPAND#$FE;A0=0STATMPVAR;暫時(shí)緩存LDAONOFFAND#$1;留下A.0ORATMPVAR;處理接收的數(shù)據(jù),放在A中STAONOFF;儲(chǔ)存接收數(shù)據(jù)在ONOFF中NOP;送A/D值49*----把在INBUF和ADBUFF的數(shù)據(jù)送PC機(jī)輸出--------LDHX#$0SA-REPEAT:LDAINBUF,XBRCLR7,SCS1,*;SCTE置1,
;發(fā)送緩沖區(qū)空STASCDR;A給SCDR,發(fā)送出去AIX#1CPX#$09;9個(gè)數(shù)據(jù)輸出BNESA-REPEAT50DISP1:NOPLDAONOFFEOR#$1;把原A.0取反,使燈閃爍STAONOFFSTAPTABRAMAIN***********************************************----中斷矢量---------------------------------ORG$FFFE;復(fù)位矢量DWMainInit:51備注說(shuō)明:單片機(jī)與PC機(jī)使用串行異步通信。在此程序下,通過(guò)PC機(jī)下的VB6.0控制程序構(gòu)成一定功能的微機(jī)控制系統(tǒng)。52鍵盤(pán)編程實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)器材硬件接線軟件功能程序清單備注說(shuō)明<<<53實(shí)驗(yàn)?zāi)康?鍵盤(pán)查詢,鍵盤(pán)中斷,鍵值識(shí)別,鍵盤(pán)編碼.54實(shí)驗(yàn)器材:1.SD-1型在線編程實(shí)驗(yàn)板2.導(dǎo)線假設(shè)干55硬件接線:紅線為學(xué)生接線PTC3PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTC0PTC1PTC2MOTOROLAGP32MCUPTC4內(nèi)置電阻VCC562
DE鍵值表:
1
EE3
BE
4
7E5
ED6
DD7
DD8
7D9
EB0
DBA
BBB
7BC
E7D
D7E
B7F
77鍵值定義57軟件功能:開(kāi)始運(yùn)行時(shí),指示燈7亮,等待鍵盤(pán)按鍵。按下“D〞鍵進(jìn)入運(yùn)行狀態(tài),指示燈7閃爍。在指示燈7閃爍狀態(tài),按“0-9〞任意一鍵,指示燈3-0顯示對(duì)應(yīng)的二進(jìn)制值〔0為燈亮,1為燈暗,如1的二進(jìn)制為0001,顯示應(yīng)為“亮亮亮暗〞〕,按“A-F〞任意一鍵,指示燈3-0全暗。58程序清單:程序說(shuō)明口地址定義數(shù)據(jù)區(qū)定義主程序鍵盤(pán)中斷初始化子程序掃描讀鍵值子程序鍵盤(pán)中斷子程序鍵盤(pán)轉(zhuǎn)化為具體值子程序延時(shí)程序子程序中斷矢量59*---------程序說(shuō)明----------------------------------------**文件名:key.asm*使用4*4鍵盤(pán)實(shí)現(xiàn)輸入控制*硬件連接:*PTA7-4接4根鍵盤(pán)列線〔X4-1〕,PTA3-0接4根鍵盤(pán)行線*〔Y4-1〕*PTC4接指示燈7〔OUT7〕,PTC3-0分別接指示燈3-0〔OUT3-0〕*程序描述:1.開(kāi)始運(yùn)行時(shí),指示燈7亮,等待鍵盤(pán)按鍵*2.按下“D〞鍵進(jìn)入運(yùn)行狀態(tài),指示燈7閃爍*3.在指示燈7閃爍狀態(tài),按“0-9〞任意一鍵,指示燈3-0*顯示對(duì)應(yīng)的二進(jìn)制值〔0為燈亮,1為燈暗,如1的二進(jìn)制為0001*顯示應(yīng)為“亮亮亮暗〞〕,按“A-F〞任意一鍵,指示燈3-0全暗。*目的:鍵盤(pán)查詢,鍵盤(pán)中斷,鍵值識(shí)別,鍵盤(pán)編碼*---------------------------------------------------------*60*----口地址定義-------------------------------------------------DDRAEQU$0004;A口數(shù)據(jù)方向存放器PTAEQU$0000;A口數(shù)據(jù)存放器PTAPUEEQU$000D;A口上拉電阻允許存放器DDRCEQU$0006;C口數(shù)據(jù)方向存放器PTCEQU$0002;C口數(shù)據(jù)存放器INTKBSCREQU$001A;鍵盤(pán)狀態(tài)和控制存放器INTKBIEREQU$001B;鍵盤(pán)中斷允許存放器61*-----數(shù)據(jù)區(qū)定義〔變量定義〕-----------------ORG$0090TMPVAR1RMB1;變量TMPVAR1,緩沖使用TMPVAR2RMB1;變量TMPVAR2,緩沖使用KBVALUERMB1;存放鍵盤(pán)按鍵值PTCSTATERMB1;PTC口狀態(tài)變量RAMstartAddrequ$0040;RAM的起始地址〔因芯片不同可以更改〕FlashStartAddrequ$8000;程序開(kāi)始地址〔因芯片不同可以更改〕*********************************************62ORGFlashStartAddr
;程序起始地址*----主程序----------------------------------------MainInit:NOPLDA#$00;定義C口之前復(fù)位PTCSTAPTCLDA#%00011111;定義C口4-0為輸出STADDRC;C口接指示燈STAPTC;初始時(shí)指示燈熄滅BCLR4,PTC;PTC4為0,指示燈7點(diǎn)亮;表示進(jìn)入開(kāi)始狀態(tài)63;--------A口接鍵盤(pán),查詢等待按鍵-----------LDA#$00;定義A口前復(fù)位PTASTAPTALDA#%00001111STADDRALDA#%11110000STAPTAPUE64MainIni1:JSRKBA;取得鍵值在A中STAKBVALUE;鍵值放在KBVALUE中;作為KBdef的入口JSRKBdef;具體值在A中cmp#$46;ASCII〔“F〞〕是否為$46BNEMainIni1;不是等待“F〞鍵;-------設(shè)置鍵盤(pán)中斷----------------------------JSRKBInit;已按“F〞鍵,進(jìn)入運(yùn)行狀態(tài),;執(zhí)行鍵盤(pán)中斷初始化子程序BCLR1,INTKBSCR;開(kāi)放鍵盤(pán)中斷CLI65
;----開(kāi)始總循環(huán)處理鍵盤(pán)------------------Start:NOP;----使燈閃爍-----------------------------BCLR4,PTC;PTA4=0,電亮指示燈7LDA#$08JSRDelaysubBSET4,PTC;PTA4=1,熄滅指示燈7LDA#$08JSRDelaysub
66JSRKbde;執(zhí)行鍵盤(pán)轉(zhuǎn)化為具體值子程序,;轉(zhuǎn)成鍵定義值CMP#$39;測(cè)試是否是0-9BHIStart1;大于ASCII〔“9〞〕到Start1SUB#$30;數(shù)字實(shí)際值=ASCII值-$30STAPTC;送PTC口,由指示燈3-0顯示BRAStartStart1:LDA#$FF;大于ASCII〔“9〞〕,消滅指示燈STAPTCJMPStart;繼續(xù)循環(huán)處理67*-鍵盤(pán)中斷初始化子程序〔從KBInit開(kāi)始〕---------------*功能:對(duì)被定義為鍵盤(pán)中斷的引腳初始化,但未開(kāi)放鍵盤(pán)中斷*占用CPU內(nèi)存放器:A*---------------------------------------------------KBInit:LDA#$00;定義A口之前復(fù)位PTASTAPTALDA#%00001111;定義A口7-4輸入作為列,;3-0輸出作為行STADDRALDA#%11110000;定義A口7-4有上拉電阻STAPTAPUEBSET1,INTKBSCR;屏蔽鍵盤(pán)中斷LDA#%11110000;允許KBIE7-4PIN中斷進(jìn)入STAINTKBIERBSET2,INTKBSCR;去除鍵盤(pán)中斷RTS68*----掃描讀鍵值子程序〔從KBA開(kāi)始〕----------------*功能:掃描一次接在PTA口的4*4鍵盤(pán)〔PTA7-4接4根鍵盤(pán)*〔X4-1〕,PTA3-0接4根鍵盤(pán)行線〔Y4-1〕上的按鍵〔使*用行掃描法〕,鍵值放在A中,假設(shè)無(wú)按鍵,A中值$FF*占用內(nèi)存:TMPVAR1〔緩沖使用〕*出口:A=鍵值*-------------------------------------------------KBA:MOV#%11111110,TMPVAR1;第一根行線為0LDX#$04;掃描4根行線KB1:LDAPTA;取PTA給AORA#%00001111;PTA7-4保存原態(tài),PTA3-0為1ANDTMPVAR1;令PTAn=0,n=0,1,2,3STAPTA;處理后給PTA以便查詢69NOPNOPLDAPTA;查第n列上是否有鍵按下AND#%11110000;保存PTA7-4列值,令低PTA3-0=0CBEQA#$F0,KB2;A等于$F0,本行線沒(méi)鍵按下;A不等于$F0,本行有鍵按下LDAPTA;A放鍵值BRAKB3;轉(zhuǎn)到KB3結(jié)束中斷KB2:SEC;令C=1ROLTMPVAR1;使下一個(gè)行線為0,查下一行DBNZXKB1;對(duì)行線循環(huán)LDA#$FF;沒(méi)有鍵被按下為$FFKB3:RTS70*---鍵盤(pán)中斷子程序〔從KBint開(kāi)始〕----------------*功能:鍵盤(pán)中斷程序,鍵值放入內(nèi)存KBVALUE中*調(diào)用子程序:掃描法讀鍵值子程序〔KBA〕,*鍵盤(pán)中斷初始化子程序〔KBInit〕*出口:第0頁(yè)內(nèi)存單元KBVALUE中為鍵值*------------------------------------------------Bint:PSHH;保護(hù)HSEIBSET1,INTKBSCR;禁止鍵盤(pán)中斷;----以下為中斷程序任務(wù)--------------------------JSRKBA;調(diào)子程序KBA,鍵值放在A中STAKBVALUE;放入內(nèi)存KBVALUE;----以上為中斷程序任務(wù)--------------------------71PULH;H出棧JSRKBInit;調(diào)用鍵盤(pán)中斷初始化子程序BCLR1,INTKBSCR;開(kāi)放鍵盤(pán)中斷CLIRTI*****************************************************----鍵盤(pán)轉(zhuǎn)化為具體值子程序〔從KBdef開(kāi)始〕----------*功能:鍵值轉(zhuǎn)為鍵盤(pán)外表具體的字符或符號(hào)代表值*入口:內(nèi)存第0頁(yè)中KBVALUE為鍵值,使用鍵值編號(hào)表*占用CPU存放器:X〔存放相對(duì)地址〕*出口:A=鍵定義值*---------------------------------------------------KBdef:LDHX#$000072KBkey1:LDAKBTABLE,XBEQKBkey3;=0,表示表中未定義此鍵值CMPKBVALUE;與KBVALUE入口鍵值相比較BNEKBkey2;不等,未找到轉(zhuǎn)KBkey2INCX;找到地址加1LDAKBTABLE,X;取鍵定義值給ABRAKBkeyrKBkey2:INCXINCXBRAKBkey173KBkey3:LDA#$FF;未定義鍵用FF標(biāo)志KBkeyr:RTSKBTABLEFCB$EE,"1",$DE,"2",$BE,"3",$7E,"4"FCB$ED,"5",$DD,"6",$BD,"7",$7D,"8"FCB$EB,"9",$DB,"0",$BB,"A",$7B,"B"FCB$E7,"C",$D7,"D",$B7,"E",$77,"F"FCB$00***********************************************74*-----程序延時(shí)程序子程序〔Delaysub〕-----------*功能:程序方法延時(shí),延時(shí)長(zhǎng)短由入口A中的數(shù)值決定*入口:A=延時(shí)長(zhǎng)度*占用內(nèi)存:無(wú)*占用存放器:A*----------------------------------------------Delaysub:PSHHPSHXDelay1:LDHX#$558875Delay2:NOPAIX#-1CPHX#$0000BNEDelay2DBNZADelay1PULXPULHRTS*********************************************------中斷矢量-------------------------------ORG$FFE0;鍵盤(pán)中斷矢量DWKBintORG$FFFE;復(fù)位矢量DWMainInit76液晶顯示實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)器材硬件接線VB界面軟件功能程序清單備注說(shuō)明<<<77實(shí)驗(yàn)?zāi)康?
不使用單片機(jī)串行外設(shè)接(SPI)進(jìn)行點(diǎn)陣字符型液晶顯示(LCD)編程78實(shí)驗(yàn)器材:1.SD-1型在線編程實(shí)驗(yàn)儀2.LCD(HD44780)3.導(dǎo)線假設(shè)干79硬件接線:16151413121110090807060504030201LCD(HD44780)PTA7PTA6PTA5PTA4PTA3PTA2PTA1PTA0PTC2PTC1PTC0MC68HC908GP32VCC80VB界面:81程序功能:開(kāi)始運(yùn)行時(shí),LCD顯示“WaitReceiving..〞等待接收字符,當(dāng)收到16個(gè)字符時(shí),顯示之,重復(fù)此功能82程序清單:程序說(shuō)明口地址定義SCI串行通信口地址變量定義主程序系統(tǒng)初始化串行口初始化LCD初始化子程序LCD命令執(zhí)行子程序LCD顯示子程序中斷矢量83*------程序說(shuō)明-------------------------------------**文件名:LCD.ASM*硬件連接:1.LCD的DB0-7與單片機(jī)的PORTA的PTA0-7連接作為*輸出*2.LCD的RS,R/W,E與單片機(jī)的PTC0,PTC1,PTC2連接*程序描述:1.開(kāi)始運(yùn)行時(shí),LCD顯示“WaitReceiving..〞*2.等待接收字符,當(dāng)收到16個(gè)字符時(shí)顯示之,重復(fù)*此功能*實(shí)驗(yàn)?zāi)康模翰皇褂脝纹瑱C(jī)串行外設(shè)接口(SPI)進(jìn)行點(diǎn)陣字符*型液晶顯示(LCD)編程*--------------------------------------------------*84*------口地址定義--------------------------------PTAEQU$0000;A口數(shù)據(jù)存放器DDRAEQU$0004;A口數(shù)據(jù)方向存放器PTCEQU$0002;C口數(shù)據(jù)存放器DDRCEQU$0006;C口數(shù)據(jù)方向存放器LCD-RSEQU0;LCD存放器選擇信號(hào)接PTC0LCD-RWEQU1;讀寫(xiě)信號(hào)接PTC1LCD-EEQU2;LCD使能信號(hào)接PTC285*----SCI串行通信口地址-----------------------------SCC1EQU$0013;SCI控制存放器1SCC2EQU$0014;SCI控制存放器2SCS1EQU$0016;串行通信接口狀態(tài)存放器地址SCDREQU$0018;串行通信接口數(shù)據(jù)存放器地址SCBREQU$0019;SCI波特率存放器FULLEQU5;用于SCI接收緩沖器是否滿標(biāo)志位RAMstartAddrequ$0040;RAM的起始地址〔因芯片不同可以更改〕FlashStartAddrequ$8000;程序開(kāi)始地址〔因芯片不同可以更改〕*-----變量定義----------------------------------------ORGRAMstartAddr;RAM的起始地址LCD-BUFFERRMB16;存放16字節(jié)86**************************************************-----主程序-------------------------------------ORGFlashStartAddr;程序起始地址MAININIT:NOPLDA#%11111111;A口為輸出STADDRALDA#%00010111;C口的PTC0-2為輸出STADDRC87*----串行口初始化-------------------------------LDA#%01000000;D6(ENSCI)=1,允許SCI,
;其它位為0,正常碼輸出
;8位數(shù)據(jù),無(wú)檢驗(yàn)STASCC1LDA#%00001100;允許發(fā)送器,允許接收器,
;不允許發(fā)送與接收中斷STASCC2LDA#%00000010;波特率為9600STASCBR88
LDHX#$00DISPLAY1:;把要顯示的16個(gè)初始字符
;放入LCD-BUFFER中LDADISPLAYBYTES,XSTALCD-BUFFER,XAIX#1CPHX#$10BNEDISPLAY1;循環(huán)16次BRASTARTDISPLAYBYTESFCB"WAITRECEIVING.."START:JSRINIT-LCD;LCD初始化JSRSHOW-LCD-BUFFER;把LCD-BUFFER中的16個(gè)字符
;送LCD顯示89LDHX#$00DISPLAY2:;從PC機(jī)接收16個(gè)字符放入;LCD-BUFFER開(kāi)始的內(nèi)存中BRCLRFULL,SCS1,*;與PC機(jī)串行通信,;判斷接收器是否滿LDASCDR;讀SCI數(shù)據(jù)存放器STALCD-BUFFER,XAIX#1CPHX#$10BNEDISPLAY2JMPSTART*************************************************90*---INIT-LCD(LCD初始化子程序)-------------------*入口:無(wú)*功能:初始化LCD(HD44780)*調(diào)用子程序:LCDCOMMAND(LCD命令執(zhí)行子程序)*占用CPU內(nèi)部存放器:A,X*------------------------------------------------INIT-LCD:BCLRLCD-RS,PTC;令LCD的RS=0,R/W=0,進(jìn)行LCD初始化BCLRLCD-RW,PTCLDA#%00111000;功能設(shè)置:8位數(shù)據(jù)接口,;2行顯示,5*7點(diǎn)陣模式91JSRLCDCOMMANDLDA#%00001000;顯示開(kāi)關(guān)控制:關(guān)顯示,
;關(guān)光標(biāo)顯示,不閃爍JSRLCDCOMMANDLDHX#$0020;等待40usDBNZX*BCLRLCD-RS,PTC;RS,RW清零開(kāi)始清屏BCLRLCD-RW,PTCLDA#%00000001;清屏指令JSRLCDCOMMANDLDHX#$2DF;等待清屏完畢,時(shí)間>1.6ms92
CLR-LCD-2-MS:;延時(shí)AIX#-1CPHX#0LDA#%00000110;輸入方式設(shè)置:數(shù)據(jù)讀寫(xiě)操作后,;AC自動(dòng)增1,顯示不動(dòng),光標(biāo)左JSRLCDCOMMANDLDA#%00010100;光標(biāo)移位設(shè)置:光標(biāo)右移一個(gè);字符位,AC自動(dòng)加1JSRLCDCOMMANDLDA#%00001100;顯示開(kāi)關(guān)設(shè)置:開(kāi)顯示,;關(guān)光標(biāo)顯示,不閃爍JSRLCDCOMMANDRTS93*----LCDCOMMAND(LCD命令執(zhí)行子程序)-----------------*入口:A*功能:對(duì)A中指令使用PORTA作為輸出口,*到LCD進(jìn)行命令執(zhí)行或字符顯示*占用CPU內(nèi)部存放器:A*--------------------------------------------------LCDCOMMAND:PSHH;保護(hù)現(xiàn)場(chǎng)PSHXLDHX#$0020;等待40usDBNZX*STAPTA;把指令碼送到A口94NOPNOPBSETLCD-E,PTC;LCD開(kāi)始接受數(shù)據(jù),置使能位為1NOPNOPBCLRLCD-E,PTC;LCD結(jié)束接受數(shù)據(jù),置使能位為0LDHX#$0020;等待40usDBNZX*PULX;恢復(fù)現(xiàn)場(chǎng)PULHRTS****************************************************95*----SHOW-LCD-BUFFEER(LCD顯示子程序)-----------------*入口:內(nèi)存LCD-BUFFER開(kāi)始的16個(gè)地址中存放要顯示的字符*編碼*功能:顯示內(nèi)存LCD-BUFFER開(kāi)始的16字節(jié)數(shù)據(jù)*調(diào)用:LCDCOMMAND子程序*占用CPU內(nèi)部存放器:A,HX*----------------------------------------------------SHOW-LCD-BUFFER:;進(jìn)行顯示數(shù)據(jù)存放器(DDRAM)地址設(shè)置BCLRLCD-RS,PTCBCLRLCD-RW,PTC;設(shè)置前8個(gè)字符首DDRAM地址LDA#%10000000JSRLCDCOMMANDLDHX#$0;顯示前8個(gè)字符96SHOW-FIRST-8BYTE:BSETLCD-RS,PTC;令LCD的RS=1,R/W=0,寫(xiě)入數(shù);據(jù)到DDRAM中BCLRLCD-RW,PTCLDALCD-BUFFER,X;將{LCD-BUFFER+X}的數(shù)據(jù);放入A作為入口JSRLCDCOMMANDAIX#1CPHX#$8BNESHOW-FIRST-8BYTE97
LDA#%11000000;設(shè)置后8個(gè)字符首DDRAM地址BCLRLCD-RS,PTCBCLRLCD-RW,PTCJSRLCDCOMMANDLDHX#$08;顯示后8個(gè)字符SHOW-NEXT-8BYTE:BSETLCD-RS,PTC;令LCD的RS=1,R/W=0,;寫(xiě)入數(shù)據(jù)到DDRAM中BCLRLCD-RW,PTC98
LDALCD-BUFFER,X;將{LCD-BUFFER+X}的數(shù)據(jù);放入A作為入口JSRLCDCOMMANDAIX#1CPHX#$10BNESHOW-NEXT-8BYTERTS*---中斷矢量--------------------------------------*ORG$FFFE;復(fù)位向量DWMAININIT99系統(tǒng)初始化Init0:;系統(tǒng)初始化Init0子程序LDA#%00000001;初始化CONFIG2STA$001ELDA#%00111101;初始化CONFIG1STA$001FCLR$0036;初始化PTCLMOV#$01,$0036MOV#$01,$0038MOV#$2C,$0039MOV#$80,$003ABSET5,$0036BSET7,$0037BSET4,$0036RTS100不使用單片機(jī)串行外設(shè)接口(SPI)和74HC164(移位存放器),使用A口作為輸出在LCD上顯示。備注說(shuō)明:101數(shù)碼管顯示實(shí)驗(yàn)實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)器材硬件接線VB界面軟件功能程序清單備注說(shuō)明<<<102實(shí)驗(yàn)?zāi)康?數(shù)碼管的顯示103實(shí)驗(yàn)器材:1.SD-1型在線編程實(shí)驗(yàn)儀2.數(shù)碼管3.導(dǎo)線假設(shè)干104硬件接線:PTB0PTB1PTB2PTB3PTB4PTB5PTB6PTB7PTC0PTC1PTC2PTC3MC68HC908GP32LALBLCLDLELFLGLDPL11L12L13L14LED105LED的VB界面:106軟件功能:從PC機(jī)收到數(shù)字(整數(shù)或小數(shù)),使4個(gè)數(shù)字并排在一個(gè)數(shù)碼管上顯示,由PC機(jī)的VB界面控制顯示。107程序清單:程序說(shuō)明口地址定義串行口地址定義內(nèi)存變量定義主程序串行口初始化子程序顯示子程序
轉(zhuǎn)碼子程序延時(shí)子程序中斷矢量108*--------程序說(shuō)明---------------------------------------------------*文件名:LED.ASM*使用數(shù)碼管對(duì)數(shù)字(整數(shù)或小數(shù))進(jìn)行顯示*硬件連接:PTB0,1,2,3,4,5,6,7分別接*LA,LB,LC,LD,LE,LF,LG,LDP*PTC0,1,2,3分別接L11,L12,L13,L14*功能描述:從PC機(jī)收到數(shù)字(整數(shù)或小數(shù)),使4個(gè)數(shù)字并排*在一個(gè)數(shù)碼管上顯示,由PC機(jī)的VB界面顯示控制*目的:數(shù)碼管的顯示*------------------------------------------------------------------------109*----口地址定義----------------------------------------------PTBEQU$0001;B口數(shù)據(jù)存放器DDRBEQU$0005;B口數(shù)據(jù)方向存放器PTCEQU$0002;C口數(shù)據(jù)存放器DDRCEQU$0006;C口數(shù)據(jù)方向存放器PTDEQU$0003;D口數(shù)據(jù)存放器DDRDEQU$0007;D口數(shù)據(jù)方向存放器110*----串行口地址定義-------------------------------------SCS1EQU$0016;SCI狀態(tài)存放器1SCDREQU$0018;SCI數(shù)據(jù)存放器SCC1EQU$0013;SCI控制存放器1SCC2EQU$0014;SCI控制存放器2SCBREQU$0019;SCI波特率存放器RAMstartAddrequ$0040;RAM的起始地址〔因芯片不同可以更改〕FlashStartAddrequ$8000;程序開(kāi)始地址〔因芯片不同可以更改〕*---內(nèi)存變量定義------------------------------------------ORGRAMstartAddrPC_BufferRMB4;存放從PC接收的數(shù)據(jù)Show_BufferRMB4;存放待顯示的數(shù)據(jù)CsRMB1;位選信號(hào)111*------主程序-------------------------------------------------ORGFlashStartAddr;初始化Main:LDA#$FF;定義B口為輸出STADDRBLDA#$FF;定義C口為輸出STADDRCLDA#$FF;定義D口為輸出STADDRD112*----串行口初始化-------------------------------------------LDA#%01000000;D6(ENSCI)=1,允許SCI,;其它位為0,正常碼輸出,;8位數(shù)據(jù),無(wú)檢驗(yàn)STASCC1LDA#%00001100;允許發(fā)送器,允許接收器,;不允許發(fā)送與接收中斷STASCC2LDA#%00000010;波特率為9600STASCBR113Display_Init:;起始數(shù)據(jù)賦值MOV#$1,PC_BufferMOV#$2,{PC_Buffer+$1}MOV#$3,{PC_Buffer+$2}MOV#$4,{PC_Buffer+$3}Start:JSRTranslate_Num;起始數(shù)據(jù)轉(zhuǎn)碼
JSRShow_Num
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年某咨詢公司與某企業(yè)咨詢服務(wù)合同
- 2024年物業(yè)買(mǎi)賣(mài)信息保密合同
- 鎂鉻質(zhì)耐火產(chǎn)品行業(yè)行業(yè)發(fā)展趨勢(shì)及投資戰(zhàn)略研究分析報(bào)告
- 高中語(yǔ)文教案模板
- 輔導(dǎo)員個(gè)人年終工作總結(jié)5篇范文
- 八年級(jí)生物教學(xué)工作總結(jié)【10篇】
- 教師個(gè)人工作辭職報(bào)告(合集15篇)
- 員工辭職報(bào)告(合集15篇)
- 計(jì)算機(jī)畢業(yè)實(shí)習(xí)報(bào)告合集五篇
- 2021年國(guó)慶節(jié)主題活動(dòng)總結(jié)五篇
- 江西省景德鎮(zhèn)市2023-2024學(xué)年高二上學(xué)期1月期末質(zhì)量檢測(cè)數(shù)學(xué)試題 附答案
- 2024年辦公樓衛(wèi)生管理制度模版(3篇)
- 保險(xiǎn)公司2024年工作總結(jié)(34篇)
- 2024年01月22503學(xué)前兒童健康教育活動(dòng)指導(dǎo)期末試題答案
- 2024年世界職業(yè)院校技能大賽中職組“嬰幼兒保育組”賽項(xiàng)考試題庫(kù)-上(單選題)
- 期末測(cè)評(píng)(基礎(chǔ)卷二)-2024-2025學(xué)年一年級(jí)上冊(cè)數(shù)學(xué)人教版
- 深圳大學(xué)《數(shù)值計(jì)算方法》2021-2022學(xué)年第一學(xué)期期末試卷
- 服裝廠安全培訓(xùn)
- 民法債權(quán)法學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024年9月時(shí)政題庫(kù)(附答案)
- 消防工程火災(zāi)自動(dòng)報(bào)警及聯(lián)動(dòng)控制系統(tǒng)安裝施工方案
評(píng)論
0/150
提交評(píng)論