![微機(jī)原理實(shí)例程序_第1頁](http://file4.renrendoc.com/view/037b0e19d2a10b1dea38df011bc4bca9/037b0e19d2a10b1dea38df011bc4bca91.gif)
![微機(jī)原理實(shí)例程序_第2頁](http://file4.renrendoc.com/view/037b0e19d2a10b1dea38df011bc4bca9/037b0e19d2a10b1dea38df011bc4bca92.gif)
![微機(jī)原理實(shí)例程序_第3頁](http://file4.renrendoc.com/view/037b0e19d2a10b1dea38df011bc4bca9/037b0e19d2a10b1dea38df011bc4bca93.gif)
![微機(jī)原理實(shí)例程序_第4頁](http://file4.renrendoc.com/view/037b0e19d2a10b1dea38df011bc4bca9/037b0e19d2a10b1dea38df011bc4bca94.gif)
![微機(jī)原理實(shí)例程序_第5頁](http://file4.renrendoc.com/view/037b0e19d2a10b1dea38df011bc4bca9/037b0e19d2a10b1dea38df011bc4bca95.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
《微機(jī)原理》學(xué)習(xí)實(shí)例程序〔非原創(chuàng),為收集的,都通過了實(shí)物測試〕2011-7,RTX數(shù)字錄音機(jī)一、實(shí)驗(yàn)?zāi)康模?、了解?shù)字錄音技術(shù)的基本原理。2、進(jìn)一步掌握A/D轉(zhuǎn)換器與D/A轉(zhuǎn)換器的使用方法。二、實(shí)驗(yàn)內(nèi)容1、按圖41連接電路,將聲傳感器接J2,把代表語音的電信號(hào)送給ADC0809通道2(IN2);D/A轉(zhuǎn)換器的輸出端通過K8跳線接喇叭。2、編程,以每秒鐘5000次的速率采集IN2輸入的語音數(shù)據(jù)并存入內(nèi)存,共采集60000個(gè)數(shù)據(jù)(錄12秒),然后再以同樣的速率將數(shù)據(jù)送DAC0832使喇叭發(fā)聲(放音)。三、實(shí)驗(yàn)提示1、將8253設(shè)置成方式0,計(jì)數(shù)200個(gè),(定時(shí)0.2ms),利用PA0查詢OUT0電平,若高電平表示定時(shí)時(shí)間到。2、ADC0809通道2(IN2)的口地址為298Hdatasegmentioport equ01400h-0280hluport equioport+29ah;錄音口地址fangport equioport+290h;放音口地址io8253a equioport+283hio8253b equioport+280hio8255c equioport+28bhio8255d equioport+288hdata_qudb60000dup(?);錄音數(shù)據(jù)存放數(shù)據(jù)區(qū)news_1db'Pressanykeytorecord:',24h;錄音提示news_2db0dh,0ah,'Playing:',24h;放音提示dataendscodesegment assumecs:code,ds:data,es:databegin: movax,data;初始化 movds,ax moves,ax movdx,offsetnews_1;顯示錄音提示 movah,9 int21htest_1: movah,1;等待鍵盤輸入 int16h jztest_1;若不是則循環(huán)等待 calllu;調(diào)用錄音子程序 movdx,offsetnews_2;顯示放音提示 movah,9 int21hfy: callfang;調(diào)用放音子程序 movax,0c07h int21h cmpal,20h jzfy movah,4ch;返回DOS int21hluprocnear;錄音子程序 movdi,offsetdata_qu;置數(shù)據(jù)區(qū)首地址為DI movcx,60000;錄60000個(gè)數(shù)據(jù) cldxunhuan: movdx,luport;啟動(dòng)A/D outdx,al calldelay;延時(shí) inal,dx;從A/D讀數(shù)據(jù)到AL stosb;存入數(shù)據(jù)區(qū),使DI加1 loopxunhuan;循環(huán) ret;子程序返回luendpfangprocnear;放音子程序 movcx,60000;放60000個(gè)數(shù)據(jù) movsi,offsetdata_qu;置數(shù)據(jù)區(qū)首地址為SI cldfang_yin: movdx,fangport lodsb;從數(shù)據(jù)區(qū)取出數(shù)據(jù) subal,30h outdx,al;放音 calldelay;延時(shí) loopfang_yin;循環(huán) ret;子程序返回fangendpdelayproc near;延時(shí)子程序 push dx mov al,10h;設(shè)8253通道0工作方式0 mov dx,io8253a out dx,al mov al,200;寫入計(jì)數(shù)器初值200 mov dx,io8253b out dx,al mov dx,io8255c;設(shè)8255的A口為輸入 mov al,9bh out dx,al mov dx,io8255d;從8255的A口輸入delay1: in al,dx and al,1;判斷PA0是否為1 jz delay1;若PA0不為1,轉(zhuǎn)de_lay pop dx ret;子程序返回delayendp codeends endbegin數(shù)模轉(zhuǎn)換器正弦波一、實(shí)驗(yàn)?zāi)康牧私鈹?shù)/模轉(zhuǎn)換器的基本原理,掌握DAC0832芯片的使用方法。二、實(shí)驗(yàn)內(nèi)容1、實(shí)驗(yàn)電路原理如圖36,DAC0832采用單緩沖方式,具有單雙極性輸入端(圖中的Ua、Ub),利用debug輸出命令(Out290數(shù)據(jù))輸出數(shù)據(jù)給DAC0832,用萬用表測量單極性輸出端Ua及雙極性輸出端Ub的電壓,驗(yàn)證數(shù)字與電壓之間的線性關(guān)系。2、編程產(chǎn)生以下波形(從Ub輸出,用示波器觀察)正弦波三、編程提示1、8位D/A轉(zhuǎn)換器DAC0832的口地址為290H,輸入數(shù)據(jù)與輸出電壓的關(guān)系為:(UREF表示參考電壓,N表示數(shù)數(shù)據(jù)),這里的參考電壓為PC機(jī)的+5V電源。2、產(chǎn)生正弦波可根據(jù)正弦函數(shù)建一個(gè)下弦數(shù)字量表,取值范圍為一個(gè)周期,表中數(shù)據(jù)個(gè)數(shù)在16個(gè)以上datasegmentioport equ0d400h-0280hio0832a equioport+290hsin db80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh db0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h db80h,66h,4eh,38h,25h,15h,09h,04h db00h,04h,09h,15h,25h,38h,4eh,66h;正弦波數(shù)據(jù)dataendscodesegmentassumecs:code,ds:datastart:movax,data movds,axll: movsi,offsetsin;置正弦波數(shù)據(jù)的偏移地址為SI movbh,32;一組輸出32個(gè)數(shù)據(jù)lll: moval,[si];將數(shù)據(jù)輸出到D/A轉(zhuǎn)換器 movdx,io0832a outdx,al movah,06h movdl,0ffh int21h jneexit movcx,1delay:loopdelay;延時(shí) incsi;取下一個(gè)數(shù)據(jù) decbh jnzlll;若未取完32個(gè)數(shù)據(jù)則轉(zhuǎn)lll jmpllexit: movah,4ch;退出 int21hcodeendsendstart鋸齒波一、實(shí)驗(yàn)?zāi)康牧私鈹?shù)/模轉(zhuǎn)換器的基本原理,掌握DAC0832芯片的使用方法。二、實(shí)驗(yàn)內(nèi)容1、實(shí)驗(yàn)電路原理如圖36,DAC0832采用單緩沖方式,具有單雙極性輸入端(圖中的Ua、Ub),利用debug輸出命令(Out290數(shù)據(jù))輸出數(shù)據(jù)給DAC0832,用萬用表測量單極性輸出端Ua及雙極性輸出端Ub的電壓,驗(yàn)證數(shù)字與電壓之間的線性關(guān)系。2、編程產(chǎn)生以下波形(從Ub輸出,用示波器觀察)鋸齒波三、編程提示1、8位D/A轉(zhuǎn)換器DAC0832的口地址為290H,輸入數(shù)據(jù)與輸出電壓的關(guān)系為: (UREF表示參考電壓,N表示數(shù)數(shù)據(jù)),這里的參考電壓為PC機(jī)的+5V電源。2、產(chǎn)生鋸齒波只須將輸出到DAC0832的數(shù)據(jù)由0循環(huán)遞增。ioport equ0d400h-0280hio0832acodesegmentassumecs:codestart:movcl,0movdx,io0832alll:moval,cl outdx,al inccl;cl加1 inccl inccl inccl inccl inccl inccl pushdx movah,06h;判斷是否有鍵按下 movdl,0ffh int21h popdx jzlll;若無則轉(zhuǎn)LLL movah,4ch;返回DOS int21hcodeendsendstart電壓轉(zhuǎn)16進(jìn)制數(shù)據(jù)一、實(shí)驗(yàn)?zāi)康牧私饽?數(shù)轉(zhuǎn)換的基本原理,掌握ADC0809的使用方法。二、實(shí)驗(yàn)內(nèi)容1、實(shí)驗(yàn)電路原理圖如圖38。通過實(shí)驗(yàn)臺(tái)左下角電位器RW1輸出0~5V直流電壓送入ADC0809通道0(IN0),利用debug的輸出命令啟動(dòng)A/D轉(zhuǎn)換器,輸入命令讀取轉(zhuǎn)換結(jié)果,驗(yàn)證輸入電壓與轉(zhuǎn)換后數(shù)字的關(guān)系。啟動(dòng)IN0開始轉(zhuǎn)換: Out02980讀取轉(zhuǎn)換結(jié)果: In02982、編程采集IN0輸入的電壓,在屏幕上顯示出轉(zhuǎn)換后的數(shù)據(jù)(用16進(jìn)制數(shù))。三、實(shí)驗(yàn)提示1、ADC0809的IN0口地址為298H,IN1口地址為299H。2、IN0單極性輸入電壓與轉(zhuǎn)換后數(shù)字的關(guān)系為: N=Ui/(Uref/256) 其中Ui為輸入電壓,UREF為參考電壓,這里的參考電壓為PC機(jī)的+5V電源。3、一次A/D轉(zhuǎn)換的程序可以為MOVDX,口地址OUTDX,AL;啟動(dòng)轉(zhuǎn)換;延時(shí)INAL,DX;讀取轉(zhuǎn)換結(jié)果放在AL中ioport equ0d400h-0280hio0809a equioport+298hcodesegment assumecs:codestart:movdx,io0809a;啟動(dòng)A/D轉(zhuǎn)換器 outdx,al movcx,0ffh;延時(shí)delay:loopdelay inal,dx;從A/D轉(zhuǎn)換器輸入數(shù)據(jù) movbl,al;將AL保存到BL movcl,4 shral,cl;將AL右移四位 calldisp;調(diào)顯示子程序顯示其高四位 moval,bl andal,0fh calldisp;調(diào)顯示子程序顯示其低四位 movah,02 movdl,20h;加回車符 int21h movdl,20h int21h pushdx movah,06h;判斷是否有鍵按下 movdl,0ffh int21h popdx jestart;若沒有轉(zhuǎn)START movah,4ch;退出 int21hdispprocnear;顯示子程序 movdl,al cmpdl,9;比較DL是否>9 jleddd;若不大于則為'0'-'9',加30h為其ASCII碼 adddl,7;否則為'A'-'F',再加7ddd:adddl,30h;顯示 movah,02 int21h retdispendpcodeendsendstart波形顯示一、實(shí)驗(yàn)?zāi)康牧私饽?數(shù)轉(zhuǎn)換的基本原理,掌握ADC0809的使用方法。二、實(shí)驗(yàn)內(nèi)容將JP3的1、2短接,使IN2處于雙極性工作方式,并給IN1輸入一個(gè)低頻交流信號(hào)(幅度為±5V),編程采集這個(gè)信號(hào)數(shù)據(jù)并在屏幕上顯示波形。三、實(shí)驗(yàn)提示1、ADC0809的IN0口地址為298H,IN1口地址為299H。2、IN0單極性輸入電壓與轉(zhuǎn)換后數(shù)字的關(guān)系為: N=Ui/(Uref/256) 其中Ui為輸入電壓,UREF為參考電壓,這里的參考電壓為PC機(jī)的+5V電源。3、一次A/D轉(zhuǎn)換的程序可以為MOVDX,口地址OUTDX,AL;啟動(dòng)轉(zhuǎn)換;延時(shí)INAL,DX;讀取轉(zhuǎn)換結(jié)果放在AL中ioport equ0d400h-0280hio0809b equioport+299hcodesegment assumecs:codestart: movax,0012h;設(shè)屏幕顯示方式為VGA640X480模示 int10h andcx,0;cx為橫坐標(biāo)draw: movdx,io0809b;啟動(dòng)A/D轉(zhuǎn)換器通道1 outdx,al movbx,500;延時(shí)delay: decbx jnzdelay inal,dx;讀入數(shù)據(jù) movah,0 movdx,368;dx為縱坐標(biāo) subdx,ax moval,0ah;設(shè)置顏色 movah,0ch;畫點(diǎn) int10h cmpcx,639;一行是否滿 jzstart;是則轉(zhuǎn)start inccx;繼續(xù)畫點(diǎn) pushdx movah,06h;是否有鍵按下 movdl,0ffh int21h popdx jedraw;無,則繼續(xù)畫點(diǎn) movax,0003;有恢復(fù)屏幕為字符方式 int10h movah,4ch;返回DOS int21hcodeendsendstart實(shí)驗(yàn)05_七段數(shù)碼管七段數(shù)碼管靜態(tài)顯示一、實(shí)驗(yàn)?zāi)康恼莆諗?shù)碼管顯示數(shù)字的原理二、實(shí)驗(yàn)內(nèi)容靜態(tài)顯示:按圖22連接好電路,將8255的A口PA0~PA6分別與七段數(shù)碼管的段碼驅(qū)動(dòng)輸入端a~g相連,位碼驅(qū)動(dòng)輸入端S1接+5V(選中),S0、dp接地(關(guān)閉)。編程從鍵盤輸入一位十進(jìn)制數(shù)字(0~9),在七段數(shù)碼管上顯示出來。三、編程提示實(shí)驗(yàn)臺(tái)上的七段數(shù)碼管為共陰型,段碼采用同相驅(qū)動(dòng),輸入端加高電平,選中的數(shù)碼管亮,位碼加反相驅(qū)動(dòng)器,位碼輸入端高電平選中。datasegmentioport equ0d400h-0280hio8255a equioport+288hio8255b equioport+28bhleddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmesg1db0dh,0ah,'Inputanum(0--9h):',0dh,0ah,'$'dataendscodesegment assumecs:code,ds:datastart:movax,data movds,ax movdx,io8255b;使8255的A口為輸出方式 movax,80h outdx,alsss:movdx,offsetmesg1;顯示提示信息 movah,09h int21h movah,01;從鍵盤接收字符 int21h cmpal,'0';是否小于0 jlexit;若是則退出 cmpal,'9';是否大于9 jgexit;若是則退出 subal,30h;將所得字符的ASCII碼減30H movbx,offsetled;bx為數(shù)碼表的起始地址 xlat;求出相應(yīng)的段碼 movdx,io8255a;從8255的A口輸出 outdx,al jmpsss;轉(zhuǎn)SSSexit:movah,4ch;返回DOS int21hcodeends七段數(shù)碼管動(dòng)態(tài)顯示(選作)一、實(shí)驗(yàn)?zāi)康恼莆諗?shù)碼管顯示數(shù)字的原理二、實(shí)驗(yàn)內(nèi)容動(dòng)態(tài)顯示(選作):使用圖23的電路,編程在兩個(gè)數(shù)碼管上循環(huán)顯示“00-99”。三、編程提示實(shí)驗(yàn)臺(tái)上的七段數(shù)碼管為共陰型,段碼采用同相驅(qū)動(dòng),輸入端加高電平,選中的數(shù)碼管亮,位碼加反相驅(qū)動(dòng)器,位碼輸入端高電平選中datasegmentioport equ0d400h-0280hio8255a equioport+28ahio8255b equioport+28bhio8255c equioport+288hleddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段碼buffer1db0,0;存放要顯示的十位和個(gè)位bzdw?;位碼dataendscodesegment assumecs:code,ds:datastart:movax,data movds,ax movdx,io8255b;將8255設(shè)為A口輸出 moval,80h outdx,almovdi,offsetbuffer1;設(shè)di為顯示緩沖區(qū)loop1: movcx,0300h;循環(huán)次數(shù)loop2: movbh,02lll: movbyteptrbz,bh pushdi decdi adddi,bz movbl,[di];bl為要顯示的數(shù) popdi movbh,0 movsi,offsetled;置led數(shù)碼表偏移地址為SI addsi,bx;求出對(duì)應(yīng)的led數(shù)碼 moval,byteptr[si] movdx,io8255c;自8255A的口輸出 outdx,al moval,byteptrbz;使相應(yīng)的數(shù)碼管亮 movdx,io8255a outdx,al pushcx movcx,3000 ;如果顯示過快,可更改cx值為最大0ffffhdelay: loopdelay;延時(shí) popcx movbh,byteptrbz shrbh,1 jnzlll looploop2;循環(huán)延時(shí) movax,wordptr[di] cmpah,09 jnzsetcmpal,09 jnzset movax,0000mov[di],al mov[di+1],ah jmploop1set: movah,01 int16h jneexit;有鍵按下則轉(zhuǎn)exit movax,wordptr[di] incal aaa mov[di],al;al為十位 mov[di+1],ah;ah中為個(gè)位 jmploop1exit: movdx,io8255a moval,0;關(guān)掉數(shù)碼管顯示 outdx,al movah,4ch;返回DOS int21hcodeends endstart七段數(shù)碼管動(dòng)態(tài)顯示一、實(shí)驗(yàn)?zāi)康恼莆諗?shù)碼管顯示數(shù)字的原理二、實(shí)驗(yàn)內(nèi)容動(dòng)態(tài)顯示:按圖23連接好電路,七段數(shù)碼管段碼連接不變,位碼驅(qū)動(dòng)輸入端S1,S0接8255C口的PC1,PC0。編程在兩個(gè)數(shù)碼管上顯示“56”三、編程提示實(shí)驗(yàn)臺(tái)上的七段數(shù)碼管為共陰型,段碼采用同相驅(qū)動(dòng),輸入端加高電平,選中的數(shù)碼管亮,位碼加反相驅(qū)動(dòng)器,位碼輸入端高電平選中。datasegmentioport equ0d400h-0280hio8255a equioport+28ahio8255b equioport+28bhio8255c equioport+288hleddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段碼buffer1db5,6;存放要顯示的個(gè)位和十位bzdw?;位碼dataendscodesegment assumecs:code,ds:datastart: movax,data movds,ax movdx,io8255b;將8255設(shè)為A口輸出 moval,80h outdx,al movdi,offsetbuffer1;設(shè)di為顯示緩沖區(qū)loop2: movbh,02lll:movbyteptrbz,bh pushdi decdi adddi,bz movbl,[di];bl為要顯示的數(shù) popdimoval,0movdx,io8255aoutdx,al movbh,0 movsi,offsetled;置led數(shù)碼表偏移地址為SI addsi,bx;求出對(duì)應(yīng)的led數(shù)碼 moval,byteptr[si] movdx,io8255c;自8255A的口輸出 outdx,al moval,byteptrbz;使相應(yīng)的數(shù)碼管亮 movdx,io8255a outdx,al movcx,3000delay: loopdelay;延時(shí) movbh,byteptrbz shrbh,1 jnzlll movdx,0ffh movah,06 int21h jeloop2;有鍵按下則退出 movdx,io8255a moval,0;關(guān)掉數(shù)碼管顯示 outdx,al movah,4ch;返回 int21hcodeends endstart實(shí)驗(yàn)01_IO地址譯碼一、實(shí)驗(yàn)?zāi)康恼莆誌/O地址譯碼電路的工作原理。二、實(shí)驗(yàn)原理和內(nèi)容實(shí)驗(yàn)電路如圖11所示,其中74LS74為D觸發(fā)器,可直接使用實(shí)驗(yàn)臺(tái)上數(shù)字電路實(shí)驗(yàn)區(qū)的D觸發(fā)器,74LS138為地址譯碼器。譯碼輸出端Y0~Y7在實(shí)驗(yàn)臺(tái)上“I/O地址“輸出端引出,每個(gè)輸出端包含8個(gè)地址,Y0:280H~287H,Y1:288H~28FH,……當(dāng)CPU執(zhí)行I/O指令且地址在280H~2BFH范圍內(nèi),譯碼器選中,必有一根譯碼線輸出負(fù)脈沖。例如:執(zhí)行下面兩條指令MOVDX,2A0HOUTDX,AL(或INAL,DX)Y4輸出一個(gè)負(fù)脈沖,執(zhí)行下面兩條指令MOVDX,2A8HOUTDX,AL(或INAL,DX)Y5輸出一個(gè)負(fù)脈沖。注意:命令中的端口地址D820、D82A是根據(jù)PCI卡的基址再加上偏移量計(jì)算出來的,不同的微機(jī)器PCI卡的基址可能不同,需要事先查找出來,查找方法見本書末尾文章中的介紹。計(jì)算公式如下:計(jì)算出的地址=查找出的PCI卡的基址+偏移量;(其中:偏移量=2A0H-280H或2A8H–A80H)利用這個(gè)負(fù)脈沖控制L7閃爍發(fā)光(亮、滅、亮、滅、……),時(shí)間間隔通過軟件延時(shí)實(shí)現(xiàn)。三、編程提示1、實(shí)驗(yàn)電路中D觸發(fā)器CLK端輸入脈沖時(shí),上升沿使Q端輸出高電平L7發(fā)光,CD端加低電平L7滅。2、由于TPC卡使用PCI總線,所以分配的IO地址每臺(tái)微機(jī)可能都不同,編程時(shí)需要了解當(dāng)前的微機(jī)使用那段IO地址并進(jìn)行設(shè)置,獲取方法請(qǐng)參看匯編程序使用方法的介紹。(也可使用自動(dòng)獲取資源分配的程序取得中斷號(hào))ioport equ0d400h-0280houtport1 equioport+2a0houtport2 equioport+2a8hcodesegment assumecs:codestart: movdx,outport1 outdx,al calldelay;調(diào)延時(shí)子程序 movdx,outport2 outdx,al calldelay;調(diào)延時(shí)子程序 movah,1 int16h jestart movah,4ch int21hdelayprocnear;延時(shí)子程序 movbx,2000lll:movcx,0ll:loopll decbx jnelll retdelayendpcodeendsendstart實(shí)驗(yàn)02_簡單并行接口簡單并行接口74LS273一、實(shí)驗(yàn)?zāi)康恼莆蘸唵尾⑿薪涌诘墓ぷ髟砑笆褂梅椒?。二、?shí)驗(yàn)內(nèi)容1、按下面圖12簡單并行輸出接口電路圖連接線路(74LS273插通用插座,74LS32用實(shí)驗(yàn)臺(tái)上的“或門”)。74LS273為八D觸發(fā)器,8個(gè)D輸入端分別接數(shù)據(jù)總線D0~D7,8個(gè)Q輸出端接LED顯示電路L0~L7。2、編程從鍵盤輸入一個(gè)字符或數(shù)字,將其ASCⅡ碼通過這個(gè)輸出接口輸出,根據(jù)8個(gè)發(fā)光二極管發(fā)光情況驗(yàn)證正確性。三、編程提示上述并行輸出接口的地址為2A8H,并行輸入接口的地址為2A0H,通過上述并行接口電路輸出數(shù)據(jù)需要3條指令:MOVAL,數(shù)據(jù)MOVDX,2A8HOUTDX通過上述并行接口輸入數(shù)據(jù)需要2條指令:MOVDX,2ADHINAL,DXioport equ0d400h-0280hls273 equioport+2a8hcodesegmentassumecs:codestart: movah,2;回車符 movdl,0dh int21h movah,1;等待鍵盤輸入 int21h cmpal,27;判斷是否為ESC鍵 jeexit;若是則退出 movdx,ls273;若不是,從2A8H輸出其ASCII碼 outdx,al jmpstart;轉(zhuǎn)startexit:movah,4ch;返回DOS int21hcodeendsendstart簡單并行接口74LS244一、實(shí)驗(yàn)?zāi)康恼莆蘸唵尾⑿薪涌诘墓ぷ髟砑笆褂梅椒?。二、?shí)驗(yàn)內(nèi)容1、按下面圖13簡單并行輸入接口電路圖連接電路(74LS244插通用插座,74LS32用實(shí)驗(yàn)臺(tái)上的“或門”)。74LS244為八緩沖器,8個(gè)數(shù)據(jù)輸入端分別接邏輯電平開關(guān)輸出K0~K7,8個(gè)數(shù)據(jù)輸出端分別接數(shù)據(jù)總線D0~D7。2、用邏輯電平開關(guān)預(yù)置某個(gè)字母的ASCⅡ碼,編程輸入這個(gè)ASCⅡ碼,并將其對(duì)應(yīng)字母在屏幕上顯示出來。三、編程提示1、上述并行輸出接口的地址為2A8H,并行輸入接口的地址為2A0H,通過上述并行接口電路輸出數(shù)據(jù)需要3條指令:MOVAL,數(shù)據(jù)MOVDX,2A8HOUTDX通過上述并行接口輸入數(shù)據(jù)需要2條指令:MOVDX,2ADHINAL,DXioport equ0d400h-0280hls244 equioport+2a0hcodesegment assumecs:codestart:movdx,ls244;從2A0輸入一數(shù)據(jù) inal,dx movdl,al;將所讀數(shù)據(jù)保存在DL中 movah,02 int21h movdl,0dh;顯示回車符 int21h movdl,0ah;顯示換行符 int21h movah,06;是否有鍵按下 movdl,0ffh int21h jnzexit jestart;若無,則轉(zhuǎn)startexit:movah,4ch;返回DOS int21hcodeendsendstart實(shí)驗(yàn)04_可編程并行接口(8255方式0,1)可編程并行接口(8255方式0)ASM一、實(shí)驗(yàn)?zāi)康恼莆?255方式0的工作原理及使用方法。二、實(shí)驗(yàn)內(nèi)容1.實(shí)驗(yàn)電路如圖20,8255C口接邏輯電平開關(guān)K0~K7,A口接LED顯示電路L0~L7。2.編程從8255C口輸入數(shù)據(jù),再從A口輸出.三、編程提示1、8255控制寄存器端口地址 28BHA口的地址 288HC口的地址 28AH2、參考流程圖(見圖21):ioport equ0d400h-0280hio8255a equioport+288hio8255b equioport+28bhio8255c equioport+28ahcodesegment assumecs:codestart:movdx,io8255b;設(shè)8255為C口輸入,A口輸出 moval,8bh outdx,alinout:movdx,io8255c;從C口輸入一數(shù)據(jù) inal,dx movdx,io8255a;從A口輸出剛才自C口 outdx,al;所輸入的數(shù)據(jù) movdl,0ffh;判斷是否有按鍵 movah,06h int21h jzinout;若無,則繼續(xù)自C口輸入,A口輸出 movah,4ch;否則返回DOS int21hcodeends endstart并行接口(8255方式一實(shí)驗(yàn)2)C一、實(shí)驗(yàn)?zāi)康模保莆?255工作方式1時(shí)的使用及編程。2.進(jìn)一步掌握中斷處理程序的編寫。二、實(shí)驗(yàn)內(nèi)容1.按圖33(B)8255方式1輸入電路,連好線路。2.編程:每按一次單脈沖按鈕產(chǎn)生一個(gè)正脈沖使8255產(chǎn)生一次中斷請(qǐng)求,讓CPU進(jìn)行一次中斷服務(wù):讀取邏輯電平開關(guān)預(yù)置的ASCII碼,在屏幕上顯示其對(duì)應(yīng)的字符,中斷8次結(jié)束。/*******************************//*可編程并行接口(二)*//*8255方式1輸入實(shí)驗(yàn)(A口)*//*******************************/#include<stdio.h>#include<conio.h>#include"ApiEx.h"#pragmacomment(lib,"ApiEx.lib")intCount=8; /*響應(yīng)中斷次數(shù)為8*/voidIntS();voidmain(){ printf("--------------------EXP21_10_8255-1_2---------------------\n"); printf("1.8255(PA0-PA7)===TPC(K0-K7)\n"); printf("2.I/O(288-28F)===8255(CS)\n"); printf("3.8255(PC3)===TPC(IRQ)\n"); printf("4.8255(PC4)===(K8(DMC))\n"); printf("Pressanykeytobegin!\n\n"); getch(); if(!Startup()) /*打開設(shè)備*/ { printf("ERROR:OpenDeviceError!\n"); return; } printf("PressDMC!Pressanykeytoexit!\n"); PortWriteByte(0x28b,0xb8); /*設(shè)8255工作方式1輸入*/ PortWriteByte(0x28b,0x09); /*將PC4置位*/ RegisterLocalISR(IntS); /*注冊中斷程序*/ EnableIntr(); /*開中斷*/ while(!kbhit())Sleep(10); DisableIntr(); /*關(guān)中斷*/ Cleanup(); /*關(guān)閉設(shè)備*/}voidIntS(){ BYTE data; PortReadByte(0x288,&data); /*以16進(jìn)制打印自A口輸入的數(shù)據(jù)*/ printf("ThisisaIntrupt!In=%x\n",data); Count--; if(Count==0) exit(0);}可編程并行接口(8255方式一實(shí)驗(yàn)1)C一、實(shí)驗(yàn)?zāi)康模保莆?255工作方式1時(shí)的使用及編程。2.進(jìn)一步掌握中斷處理程序的編寫。二、實(shí)驗(yàn)內(nèi)容1.按圖33(A)8255方式1的輸出電路連好線路。2.編程:每按一次單脈沖按鈕產(chǎn)生一個(gè)正脈沖使8255產(chǎn)生一次中斷請(qǐng)求,讓CPU進(jìn)行一次中斷服務(wù):依次輸出01H、02H,04H,08H,10H,20H,40H,80H使L0~L7依次發(fā)光,中斷8次結(jié)束。/*******************************//*可編程并行接口(二)*//*8255方式1輸出實(shí)驗(yàn)(A口)*//*******************************/#include<stdio.h>#include<conio.h>#include"ApiEx.h"#pragmacomment(lib,"ApiEx.lib")intCount=0x01; /*響應(yīng)中斷次數(shù)為8*/voidIntS();voidmain(){ printf("--------------------EXP21_10_8255-1_1---------------------\n"); printf("1.8255(PA0-PA7)===TPC(L0-L7)\n"); printf("2.I/O(288-28F)===8255(CS)\n"); printf("3.8255(PC3)===TPC(IRQ)\n"); printf("4.8255(PC6)===(K8(DMC))\n"); printf("Pressanykeytobegin!\n\n"); getch(); if(!Startup()) /*打開設(shè)備*/ { printf("ERROR:OpenDeviceError!\n"); return; } printf("PressDMC!Pressanykeytoexit!\n"); RegisterLocalISR(IntS); /*注冊中斷程序*/ EnableIntr(); /*開中斷*/ PortWriteByte(0x28b,0xa8); /*設(shè)8255工作方式1輸出*/ PortWriteByte(0x28b,0x0d); /*將PC6置位*/ while(!kbhit())Sleep(10); DisableIntr(); /*關(guān)中斷*/ Cleanup(); /*關(guān)閉設(shè)備*/}voidIntS(){ PortWriteByte(0x288,Count); /*從PA口輸出i,初值為0x80*/ printf("ThisisaIntrupt!Out=%x\n",Count); Count<<=1; /*Count左移一位*/ if(Count==0x100) exit(0);}8251串行通信實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康模薄⒘私獯型ㄓ嵉幕驹?。2、掌握串行接口芯?251的工作原理和編程方法。二、實(shí)驗(yàn)內(nèi)容1、 按圖43連接好電路,(8251插通用插座)其中8253計(jì)數(shù)器用于產(chǎn)生8251的發(fā)送和接收時(shí)鐘.TXD和RXD連在一起。2、 編程:從鍵盤輸入一個(gè)字符,將其ASCII碼加1后發(fā)送出去,再接收回來在屏幕上顯示。實(shí)現(xiàn)自發(fā)自收。三、實(shí)驗(yàn)提示1、 圖示電路8251的控制口地址為2B9H,數(shù)據(jù)口地址為2B8H。2、 8253計(jì)數(shù)器的計(jì)數(shù)初值=時(shí)鐘頻率/(波特率×波特率因子),這里的時(shí)鐘頻率接1MHz,波特率若選1200,波特率因子若選16,則計(jì)數(shù)器初值為52。3、 收發(fā)采用查詢方式。datasegmentioport equ0d400h-0280hio8253a equioport+280hio8253b equioport+283hio8251a equioport+2b8hio8251b equioport+2b9hmes1db'youcanplayakeyonthekeybord!',0dh,0ah,24hmes2ddmes1dataendscodesegmentassumecs:code,ds:datastart:movax,data movds,ax movdx,io8253b;設(shè)置8253計(jì)數(shù)器0工作方式 moval,16h outdx,al movdx,io8253a moval,52;給8253計(jì)數(shù)器0送初值 outdx,al movdx,io8251b;初始化8251 xoral,al movcx,03;向8251控制端口送3個(gè)0delay:callout1 loopdelay moval,40h;向8251控制端口送40H,使其復(fù)位 callout1 moval,4eh;設(shè)置為1個(gè)停止位,8個(gè)數(shù)據(jù)位,波特率因子為16 callout1 moval,27h;向8251送控制字允許其發(fā)送和接收 callout1 ldsdx,mes2;顯示提示信息 movah,09 int21hwaiti:movdx,io8251b inal,dx testal,01;發(fā)送是否準(zhǔn)備好 jzwaiti movah,01;是,從鍵盤上讀一字符 int21h cmpal,27;若為ESC,結(jié)束 jzexit movdx,io8251a incal outdx,al;發(fā)送 movcx,0F00hs51:loops51;延時(shí)next:movdx,io8251b inal,dx testal,02;檢查接收是否準(zhǔn)備好 jznext;沒有,等待 movdx,io8251a inal,dx;準(zhǔn)備好,接收 movdl,al movah,02;將接收到的字符顯示在屏幕上 int21h jmpwaitiexit:movah,4ch;退出 int21hout1procnear;向外發(fā)送一字節(jié)的子程序 outdx,al pushcx movcx,0F00hgg:loopgg;延時(shí) popcx retout1endpcodeendsendstart8250串行通訊實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、進(jìn)一步了解串行通信的基本原理2、掌握串行接口芯片8250的工作原理和編程方法二、實(shí)驗(yàn)內(nèi)容1、按圖-52連接線路,圖中8250芯片插在通用插座上。2、編程:從鍵盤輸入一個(gè)字符,將其ASCLL碼加1后發(fā)送出去,再接收回來在屏幕上加1后的字符顯示出來,實(shí)現(xiàn)自發(fā)自收三、實(shí)驗(yàn)提示1、8250介紹:INC8250是一個(gè)可編程序異步通訊單元芯片,在微機(jī)系統(tǒng)中起串行數(shù)據(jù)的輸入輸出接口作用。此外,它還包含有可編程序波特率發(fā)生器,它可用1~65535的因子對(duì)輸入時(shí)鐘進(jìn)行分頻,以產(chǎn)生波特率十六倍的輸入輸出時(shí)鐘。2、8250時(shí)鐘接2MHZ,若選波特率為9600,波特率因子為16,則因子寄存器中分頻數(shù)為13。所以因子寄存器低字節(jié)送13,高字節(jié)為00H。3、圖中CS接02B8H~02BFH:下表為各寄存器選擇地址一覽表。表中DLAB為線控制寄存器的最高位,也叫因子寄存器存取位。當(dāng)DLAB為0時(shí)選接收數(shù)據(jù)緩沖器,發(fā)送數(shù)據(jù)寄存器和中斷允許寄存器。當(dāng)DLAB為1時(shí)選因子寄存器的低字節(jié)和高字節(jié)。4、收發(fā)采用查詢方式DATASEGMENTioport equ0d400h-0280hPORT equioport+2b8hPORT1 equioport+2b9hPORT3 equioport+2bbhPORT5 equioport+2bdhMES DB'Youcanplayakeyonthekeybort!',0AH,0DH DB'ESCquittodos!',0AH,0DH,'$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL,80H MOV DX,PORT3 OUT DX MOV AL,13;setlightdivisor MOV DX,PORT OUT DX MOV AL,00;setlowdivisor9600boud MOV DX,PORT1 OUT DX MOV AL,00011011B;8bits1stop MOV DX,PORT3 OUT DX MOV AL,00H MOV DX,PORT1 OUT DX,AL MOV DX,OFFSETMES MOV AH,09H INT 21HWAITI: MOV DX,PORT5 IN AL,DX;GETLINESTATUS AND AL,20H TEST AL,20H JZ WAITI MOV AH,01 INT 21H CMP AL,27 JZ EXIT MOV DX,PORT INC AL OUT DX MOV CX,40HS50: LOOP S50NEXT: MOV DX,PORT5 IN AL,DX AND AL,01 TEST AL,01 JZ NEXT MOV DX,PORT IN AL,DX MOV DL,AL MOV AH,02 INT 21H JMP WAITIEXIT: MOV AH,4CH INT 21HCODEENDSENDSTART實(shí)驗(yàn)03_可編程定時(shí)器計(jì)數(shù)器8253可編程定時(shí)器計(jì)數(shù)器8253(一)一、實(shí)驗(yàn)?zāi)康恼莆?253的基本工作原理和編程方法。二、實(shí)驗(yàn)內(nèi)容按圖16虛線連接電路,將計(jì)數(shù)器0設(shè)置為方式0,計(jì)數(shù)器初值為N(N≤0FH),用手動(dòng)逐個(gè)輸入單脈沖,編程使計(jì)數(shù)值在屏幕上顯示,并同時(shí)用邏輯筆觀察OUT0電平變化(當(dāng)輸入N+1個(gè)脈沖后OUT0變高電平)。三、編程提示 8253控制寄存器地址 283H 計(jì)數(shù)器0地址 280H 計(jì)數(shù)器1地址 281H CLK0連接時(shí)鐘 1MHZioport equ0d400h-0280hio8253a equioport+283hio8253b equioport+280hcodesegment assumecs:codestart:moval,14h;設(shè)置8253通道0為工作方式2,二進(jìn)制計(jì)數(shù) movdx,io8253a outdx,al movdx,io8253b;送計(jì)數(shù)初值為0FH moval,0fh outdx,allll:inal,dx;讀計(jì)數(shù)初值 calldisp;調(diào)顯示子程序 pushdx movah,06h movdl,0ffh int21h popdx jzlll movah,4ch;退出 int21hdispprocnear;顯示子程序 pushdxandal,0fh;首先取低四位 movdl,al cmpdl,9;判斷是否<=9 jlenum;若是則為'0'-'9',ASCII碼加30H adddl,7;否則為'A'-'F',ASCII碼加37Hnum:adddl,30h movah,02h;顯示 int21h movdl,0dh;加回車符 int21h movdl,0ah;加換行符 int21h popdx ret;子程序返回dispendpcodeendsendstart可編程定時(shí)器計(jì)數(shù)器8253(二)一、實(shí)驗(yàn)?zāi)康恼莆?253的基本工作原理和編程方法。二、實(shí)驗(yàn)內(nèi)容按圖17連接電路,將計(jì)數(shù)器0、計(jì)數(shù)器1分別設(shè)置為方式3,計(jì)數(shù)初值設(shè)為1000,用邏輯筆觀察OUT1輸出電平的變化(頻率1HZ)三、編程提示1、 8253控制寄存器地址 283H 計(jì)數(shù)器0地址 280H 計(jì)數(shù)器1地址 281H CLK0連接時(shí)鐘 1MHZioport equ0d400h-0280hio8253a equioport+280hio8253b equioport+281hio8253c equioport+283hcodesegment assumecs:codestart:movdx,io8253c;向8253寫控制字 moval,36h;使0通道為工作方式3 outdx,al movax,1000;寫入循環(huán)計(jì)數(shù)初值1000 movdx,io8253a outdx,al;先寫入低字節(jié) moval,ah outdx,al;后寫入高字節(jié) movdx,io8253c moval,76h;設(shè)8253通道1工作方式2 outdx,al movax,1000;寫入循環(huán)計(jì)數(shù)初值1000 movdx,io8253b outdx,al;先寫低字節(jié)moval,ah outdx,al;后寫高字節(jié) movah,4ch;程序退出 int21hcodeends endstart實(shí)驗(yàn)21_鍵盤顯示控制實(shí)驗(yàn)鍵盤顯示2(中斷編程)C一、 實(shí)驗(yàn)?zāi)康?、掌握8279鍵盤顯示電路的基本功能及編程方法。2、掌握一般鍵盤和顯示電路的工作原理。3、進(jìn)一步掌握定時(shí)器的使用和中斷處理程序的編程方法。二、 實(shí)驗(yàn)內(nèi)容1、I/O編程本實(shí)驗(yàn)的實(shí)驗(yàn)電路如圖。它做在一塊擴(kuò)展電路板上,用一根20芯扁平電纜線將實(shí)驗(yàn)板擴(kuò)展插頭與實(shí)驗(yàn)臺(tái)上的擴(kuò)展插頭J7相連,為擴(kuò)展電路連接電源及外部總線。擴(kuò)展電路板上的數(shù)碼管、鍵盤陣列既能由8279控制,也可以由外部電路控制,其實(shí)現(xiàn)靠的是若干組短路子組成的控制選擇開關(guān)K1,K2,K3,K4,KB0,KB1,KB2。當(dāng)K1,K3,K4連接在8279一端時(shí),數(shù)碼管由8279控制,連接在LS273一端時(shí)由外部總線通過LS273直接控制。當(dāng)K2,KB1,KB2,KB3連接在8279一端時(shí),鍵盤陣列由8279控制,連接在8255一端時(shí)由外接芯片8255控制。因?yàn)楸緦?shí)驗(yàn)為8279控制實(shí)驗(yàn),所以除了連接J1和J7外,還需要將選擇開關(guān)K1,K2,K3,K4,KB0,KB1,KB2連接在8279一端,以使數(shù)碼管、鍵盤陣列由8279芯片控制。3、編程2:中斷編程利用實(shí)驗(yàn)臺(tái)上提供的定時(shí)器8253和擴(kuò)展板上提供的8279以及鍵盤和數(shù)碼顯示電路,設(shè)計(jì)一個(gè)電子鐘。由8253中斷定時(shí),小鍵盤控制電子鐘的啟停及初始值的預(yù)置。電子鐘顯示格式如下:XX.XX.XX.由左向右分別為時(shí)、分、秒。要求具有如下功能:①、C鍵:清除,顯示全零。②、G鍵:啟動(dòng),電子鐘計(jì)時(shí)。③、D鍵:停止,電子鐘停止計(jì)時(shí)。④、P鍵:設(shè)置時(shí)、分、秒值。輸入時(shí)依次為時(shí)、分、秒,同時(shí)應(yīng)有判斷輸入錯(cuò)誤的能力,若輸入有錯(cuò),則顯示:E-----。此時(shí)敲P鍵可重新輸入預(yù)置值。⑤、E鍵:程序退出。四、 編程2接線方法1. 用一根20芯扁平電纜將實(shí)驗(yàn)擴(kuò)展板與實(shí)驗(yàn)臺(tái)上擴(kuò)展插頭J7相連。2. 實(shí)驗(yàn)臺(tái)上8253CLK0接1MHZ,GATE0和GATE1接+5V,OUT0接CLK1,OUT1接IRQ,CS接280H~287H。/***************************//*8279鍵盤顯示控制器2*//***************************/#include<stdio.h>#include<conio.h>#include"ApiEx.h"#pragmacomment(lib,"ApiEx.lib")#define ioport 0x2b0 //8279數(shù)據(jù)口#define ioport1 0x2b1 //8279控制口#define time 0x280 //8253定時(shí)器0口地址#define time1 0x281 //8253定時(shí)器1口地址#define timec 0x283 //8253控制口地址intbuf=0; //計(jì)數(shù)單元intsign=1; //計(jì)數(shù)標(biāo)志intsec1=0,sec2=0; //秒高/低位intmin1=0,min2=0; //分高/低位inthour1=0,hour2=0;//時(shí)高/低位interr1=0; //出錯(cuò)標(biāo)志inthms; //預(yù)置時(shí),分,秒標(biāo)志intled[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C, 0x39,0x5E,0x79,0x71,0x67,0x37,0x73,0x31,0x3E,0x36,0x66,0x80,0x40}; //0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,g,m,P,r,w,x,y,.,-intkeyin=0;voidkey(); //鍵盤顯示子程序voiddisp(); //顯示子程序voidhigh(); //預(yù)置時(shí)、分、秒高位子程序voidlow(); //預(yù)置時(shí)、分、秒低位子程序voidint_proc(); //中斷處理子程序voiderror();voidmain(){ printf("--------------------EXP29_21_SYB---------------------\n"); printf("1.8253(CLK0)===TPC(1MHz)\n"); printf("2.8253(GATE0,GATE1)===TPC(+5V)\n"); printf("3.8253(OUT0)===8253(CLK1)\n"); printf("4.8253(OUT1)===TPC(IRQ)\n"); printf("5.I/O(280-287)===8253(CS)\n"); printf("6.SYB===J7\n"); printf("Pressanykeytobegin!\n\n"); getch(); printf("Presssmallkeybord:\n"); printf("C--CLEARTOZERO;\n"); printf("G--GOAHEAD\n"); printf("D--STOPTHEDISPLY;\n"); printf("P--POSITIONTHEBEGINNINGTIME\n"); printf("E--EXIT\n"); if(!Startup()) /*打開設(shè)備*/ { printf("ERROR:OpenDeviceError!\n"); return; } PortWriteByte(timec,0x36); //8253初始化 PortWriteByte(time,1000%256); PortWriteByte(time,1000/256); PortWriteByte(timec,0x74); PortWriteByte(time1,100%256); //定時(shí)器1每0.1S中斷1次 PortWriteByte(time1,100/256); //定時(shí)器1每0.1S中斷1次 PortWriteByte(ioport1,0xd3); //8279清零 PortWriteByte(ioport1,0x2a); //置8279時(shí)鐘命令 PortWriteByte(ioport1,0x40); //讀FIFO存儲(chǔ)器命令 PortWriteByte(ioport1,0x00); //置鍵盤顯示模式 PortWriteByte(ioport1,0x80); //寫顯示緩沖區(qū)命令 RegisterLocalISR(int_proc); /*注冊中斷程序*/ EnableIntr(); /*開中斷*/ do{ key(); //調(diào)鍵盤顯示子程序 if((hour2==0x0a)|(keyin==0x0c)) //是否'C'命令 { sign=0; hour2=0; hour1=0; min2=0; min1=0; sec2=0; sec1=0; } if(keyin==0x10) //是否'G'命令 { sign=0x01; }elseif(keyin==0x0d) //是否'D'命令 { sign=0x00; }elseif(keyin==0x12) //是否'P'命令 { sign=0x00; //'00'為預(yù)置時(shí)標(biāo)志 hms=0x00; high(); if(err1!=0x01) { low(); if(err1!=0x01) { hms=0x11; //'11'為預(yù)置分標(biāo)志 high(); if(err1!=0x01) { low(); if(err1!=0x01) { hms=0x22; //'22'為預(yù)置秒標(biāo)志 high(); if(err1!=0x01) { low(); } } } } } } }while(!(keyin==0x0e)); //'E'命令,退出程序 DisableIntr(); /*關(guān)中斷*/ Cleanup(); /*關(guān)閉設(shè)備*/}voidint_proc(){ if(sign!=0) //是否允許計(jì)數(shù) { buf++; //計(jì)數(shù)單元加1 if(buf==10) { buf=0; sec1++; if(sec1==10) { sec1=0; sec2++; if(sec2==6) { sec2=0; min1++; if(min1==10) { min1=0; min2++; if(min2==6) { min2=0; hour1++; if((hour1==4)&(hour2==2)) { hour2=0; hour1=0; } if(hour1==10) { hour1=0; hour2++; } } } } } } }}voidkey(){ BYTE data; PortWriteByte(ioport1,0xd1); //清顯示 Sleep(100); do{ disp(); //調(diào)顯示子程序 PortReadByte(ioport1,&data); }while(!(data&0x07)); PortReadByte(ioport,&data); //讀狀態(tài) keyin=data&0x07; data=data&0x38; data>>=3; if(data==0) //是否第一行鍵按下 keyin=keyin+0x08; //第一行,加8 elseif(data!=1) //是否第二行鍵按下 keyin=keyin+0x10; //第三行,加10H}voiddisp(){ PortWriteByte(ioport1,0x90); Sleep(100); PortWriteByte(ioport,led[sec1]); PortWriteByte(ioport,led[sec2]); PortWriteByte(ioport,led[min1]); PortWriteByte(ioport,led[min2]); PortWriteByte(ioport,led[hour1]); PortWriteByte(ioport,led[hour2]);}voidhigh(){ key(); err1=00; if(hms==0x00) //HMS是預(yù)置時(shí)、分、秒標(biāo)志,00預(yù)置時(shí) { if(keyin<=0x02) { hour2=keyin; }else { error(); } }elseif(hms==0x11) //11預(yù)置分 { if(keyin<=0x05) { min2=keyin; }else { error(); } }elseif(keyin<=0x05) //22預(yù)置秒 { sec2=keyin; }else { error(); }}voiderror(){ err1=0x01; hour2=0x0e; hour1=0x18; min2=0x18; min1=0x18; sec2=0x18; sec1=0x18;}voidlow(){ key(); err1=00; if(hms==0x00) //預(yù)置時(shí)、分、秒低位 { if(((keyin<=0x09)&(hour2==0))|((keyin<=0x09)&(hour2==1))|((keyin<=0x03)&(hour2==2))) { hour1=keyin; }else { error(); } }elseif(hms==0x11) //11預(yù)置分 { if(keyin<=0x09) { min1=keyin; }else { error(); } }elseif(keyin<=0x09) //22預(yù)置秒 { sec1=keyin; }else { error(); }}鍵盤顯示1一、 實(shí)驗(yàn)?zāi)康?、掌握8279鍵盤顯示電路的基本功能及編程方法。2、掌握一般鍵盤和顯示電路的工作原理。3、進(jìn)一步掌握定時(shí)器的使用和中斷處理程序的編程方法。二、 實(shí)驗(yàn)內(nèi)容1、本實(shí)驗(yàn)的實(shí)驗(yàn)電路如圖56。它做在一塊擴(kuò)展電路板上,用一根20芯扁平電纜與實(shí)驗(yàn)臺(tái)上擴(kuò)展插頭J7相連。2、編程1:使得在小鍵盤上每按一個(gè)健,6位數(shù)碼管上顯示出相應(yīng)字符,它們的對(duì)應(yīng)關(guān)系如下三、接線方法用一根20芯扁平電纜將實(shí)驗(yàn)擴(kuò)展板與實(shí)驗(yàn)臺(tái)上擴(kuò)展插頭J7相連/***************************//*8279鍵盤顯示控制器1*//********
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專利權(quán)許可與合作生產(chǎn)合同書
- 個(gè)人擔(dān)保借款合同范本
- 個(gè)人外匯借款合同范本
- 二手車買賣及貸款合同
- 借款居間服務(wù)合同書
- 正規(guī)離婚協(xié)議書
- 出租果樹合同范本
- 有關(guān)押運(yùn)員的聘用合同
- 音樂產(chǎn)業(yè)版權(quán)合作協(xié)議書
- 股權(quán)期權(quán)激勵(lì)協(xié)議書
- 殯儀服務(wù)員考試:殯儀服務(wù)員考試考試卷及答案
- 2024中智集團(tuán)招聘重要崗位(高頻重點(diǎn)提升專題訓(xùn)練)共500題附帶答案詳解
- Unit 1 Cultural Heritage單元整體教學(xué)設(shè)計(jì) 人教版必修第二冊單元整體教學(xué)設(shè)計(jì)
- 養(yǎng)老護(hù)理員試題及答案
- 2024年山東省高中學(xué)業(yè)水平合格考生物試卷試題(含答案詳解)
- 2025年中考英語復(fù)習(xí)熱點(diǎn)話題作文范文
- 小學(xué)數(shù)學(xué)教學(xué)工作交流數(shù)學(xué)教學(xué)中的體會(huì)總結(jié)經(jīng)驗(yàn)交流會(huì)課件
- 2024年美國智能馬桶和馬桶蓋市場現(xiàn)狀及上下游分析報(bào)告
- 中國成人暴發(fā)性心肌炎診斷和治療指南(2023版)解讀
- 復(fù)產(chǎn)復(fù)工六個(gè)一
- 招商引資項(xiàng)目落地工作方案
評(píng)論
0/150
提交評(píng)論