版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第9章可編程接口芯片及應(yīng)用9.1可編程接口芯片概述9.2可編程計(jì)數(shù)/定時(shí)器82539.3可編程并行接口芯片8255A第9章可編程接口芯片及應(yīng)用9.1可編程接口芯片概述CPU要與外設(shè)交換信息,必須通過(guò)接口電路,在接口電路中一般具有如下電路單元:⑴輸入/輸出數(shù)據(jù)緩沖器和鎖存器,以實(shí)現(xiàn)數(shù)據(jù)的I/O。⑵控制命令和狀態(tài)寄存器,用以存放對(duì)外設(shè)的控制命令,以及外設(shè)的狀態(tài)信息。⑶地址譯碼器,用來(lái)選擇接口電路中的不同端口(寄存器)。⑷讀寫控制邏輯。⑸中斷控制邏輯。
9.1可編程接口芯片概述CPU要與外設(shè)交換信息,必須通過(guò)接口電路,在接口電9.19.2可編程計(jì)數(shù)器/定時(shí)器8253計(jì)數(shù)/定時(shí)的工作原理計(jì)數(shù):對(duì)外部事件發(fā)生次數(shù)進(jìn)行計(jì)數(shù)定時(shí)和計(jì)數(shù)本質(zhì)上是相同的,它們都是對(duì)一個(gè)輸入脈沖進(jìn)行計(jì)數(shù),如果輸入脈沖的頻率一定,那么記錄脈沖的個(gè)數(shù)與所需的時(shí)間是一一對(duì)應(yīng)的關(guān)系。例如:輸入脈沖頻率為2MHz,那么計(jì)數(shù)2106
定時(shí)1秒因此,使用同一個(gè)芯片,既能計(jì)數(shù),又能定時(shí)——定時(shí)器/計(jì)數(shù)器9.2可編程計(jì)數(shù)器/定時(shí)器8253計(jì)數(shù)/定時(shí)的工作原理。
9.2.18253功能及結(jié)構(gòu)
Intel8253具有3個(gè)獨(dú)立的16位計(jì)數(shù)器,使用單一+5V電源,采用NMOS工藝,24腳雙排直插式封裝的大規(guī)模集成電路1.8253主要功能⑴每片有3個(gè)獨(dú)立的16位計(jì)數(shù)通道。⑵每個(gè)計(jì)數(shù)器可按二進(jìn)制或十進(jìn)制來(lái)計(jì)數(shù),時(shí)鐘脈沖下降沿使計(jì)數(shù)器進(jìn)行減1操作。⑶每個(gè)計(jì)數(shù)器最高計(jì)數(shù)速率可達(dá)2.6MHZ。⑷每個(gè)計(jì)數(shù)器可編程設(shè)定6種工作方式之一。⑸所有輸入、輸出均與TTL電平兼容,便于與外圍接口電路相連。。9.2.18253功能及結(jié)構(gòu)2.8253的內(nèi)部結(jié)構(gòu)和引腳特性2.8253的內(nèi)部結(jié)構(gòu)和引腳特性9.2.28253控制字1.8253控制字格式
9.2.28253控制字1.8253控制字格式2.8253端口地址
A1A0=00-------計(jì)數(shù)器001-------計(jì)數(shù)器110-------計(jì)數(shù)器211-------控制口3.編程步驟先寫控制字(到控制口)再寫計(jì)數(shù)器初值(到相應(yīng)的通道端口)2.8253端口地址9.2.38253工作方式與工作時(shí)序
1.方式0(單脈沖發(fā)生器)計(jì)數(shù)器只計(jì)一遍。控制字寫入后,OUT端為低;當(dāng)計(jì)數(shù)初值寫入后,在下一個(gè)CLK脈沖的下降沿將計(jì)數(shù)初值寄存器內(nèi)容裝入減1計(jì)數(shù)寄存器,然后計(jì)數(shù)器開(kāi)始減1計(jì)數(shù),在計(jì)數(shù)期間,當(dāng)減1計(jì)數(shù)器回0之前,輸出端OUT維持低電平。當(dāng)計(jì)數(shù)值回0時(shí),OUT輸出端變?yōu)楦唠娖剑⒈3值街匦聦懭胄碌目刂谱只蛐碌挠?jì)數(shù)值為止??勺鳛橹袛嗾?qǐng)求信號(hào)。在計(jì)數(shù)過(guò)程中,若GATE信號(hào)變?yōu)榈碗娖剑瑒t在低電平期間暫停計(jì)數(shù),減1計(jì)數(shù)寄存器值保持不變。在計(jì)數(shù)過(guò)程中,若重新寫入新的計(jì)數(shù)初值,則在下一個(gè)CLK脈沖的下降沿,減1計(jì)數(shù)寄存器以新的計(jì)數(shù)初值重新開(kāi)始計(jì)數(shù)過(guò)程。9.2.38253工作方式與工作時(shí)序1.方式0(單脈沖發(fā)8253方式0
三種情況時(shí)序波形:
8253方式0
三種情況時(shí)序波形:2.方式1(可重觸發(fā)單穩(wěn)態(tài)方式)
輸出單個(gè)負(fù)脈沖信號(hào),脈沖的寬度可通過(guò)編程來(lái)設(shè)定。當(dāng)寫入控制字后,輸出端OUT變?yōu)楦唠娖剑⒈3指唠娖綘顟B(tài)。然后寫入計(jì)數(shù)初值,只有在GATE信號(hào)的上升沿之后的下一個(gè)CLK脈沖的下降沿,才將計(jì)數(shù)初值寄存器內(nèi)容裝入減1計(jì)數(shù)寄存器,同時(shí)OUT端變?yōu)榈碗娖?。然后?jì)數(shù)器開(kāi)始減1計(jì)數(shù),當(dāng)計(jì)數(shù)值減到0時(shí),OUT端變?yōu)楦唠娖健?/p>
在OUT端輸出低電平期間,又來(lái)一個(gè)門控信號(hào)上升沿觸發(fā),則在下一個(gè)CLK脈沖的下降沿,重新將計(jì)數(shù)初值寄存器內(nèi)容裝入減1計(jì)數(shù)寄存器,并開(kāi)始計(jì)數(shù),OUT端保持低電平,直至計(jì)數(shù)值減到0時(shí),OUT端變?yōu)楦唠娖健T谟?jì)數(shù)期間CPU又送來(lái)新的計(jì)數(shù)初值,不影響當(dāng)前計(jì)數(shù)過(guò)程。一直等到下一次GATE信號(hào)的觸發(fā),才會(huì)將新的計(jì)數(shù)初值裝入,并以新的計(jì)數(shù)初值開(kāi)始計(jì)數(shù)過(guò)程。2.方式1(可重觸發(fā)單穩(wěn)態(tài)方式)輸出單個(gè)負(fù)脈沖信號(hào),脈沖的8253方式1三種情況時(shí)序波形:8253方式13.方式2(周期脈沖發(fā)生器)
可產(chǎn)生周期性的負(fù)脈沖信號(hào),負(fù)脈沖寬度為一個(gè)時(shí)鐘周期。寫入控制字后,OUT端變?yōu)楦唠娖?,若GATE為高電平,當(dāng)寫入計(jì)數(shù)初值后,在下一個(gè)CLK的下降沿將計(jì)數(shù)初值寄存器內(nèi)容裝入減1計(jì)數(shù)寄存器,并開(kāi)始減1計(jì)數(shù)。當(dāng)減1計(jì)數(shù)寄存器的值為1時(shí),OUT端輸出低電平;減1計(jì)數(shù)寄存器回0時(shí)OUT端輸出高電平,并開(kāi)始一個(gè)新的計(jì)數(shù)過(guò)程。在減1計(jì)數(shù)寄存器未減到1時(shí),GATE信號(hào)由高變低,則停止計(jì)數(shù)。但當(dāng)GATE由低變高時(shí),則重新將計(jì)數(shù)初值寄存器內(nèi)容裝入減1計(jì)數(shù)寄存器,并重新開(kāi)始計(jì)數(shù)。GATE信號(hào)保持高電平,但在計(jì)數(shù)過(guò)程中重新寫入計(jì)數(shù)初值,則當(dāng)正在計(jì)數(shù)的一輪結(jié)束并輸出一個(gè)CLK周期的負(fù)脈沖后,將以新的初值進(jìn)行計(jì)數(shù)。3.方式2(周期脈沖發(fā)生器)可產(chǎn)生周期性的負(fù)脈沖信號(hào),負(fù)脈8253方式2三種情況時(shí)序波形:8253方式24.方式3(方波發(fā)生器)
當(dāng)控制字寫入后,OUT輸出高電平。寫入計(jì)數(shù)初值后,下一個(gè)CLK的下降沿將計(jì)數(shù)初值裝入減1計(jì)數(shù)器,并開(kāi)始減1計(jì)數(shù),當(dāng)計(jì)數(shù)到一半時(shí),OUT端變?yōu)榈碗娖健p1計(jì)數(shù)寄存器繼續(xù)作減1計(jì)數(shù),計(jì)數(shù)到0時(shí),OUT端變?yōu)楦唠娖健V?,周而?fù)始地自動(dòng)進(jìn)行計(jì)數(shù)過(guò)程。當(dāng)計(jì)數(shù)初值為偶數(shù)時(shí),OUT輸出對(duì)稱方波;當(dāng)計(jì)數(shù)初值為奇數(shù)時(shí),OUT輸出不對(duì)稱方波。在計(jì)數(shù)過(guò)程中,若GATE變?yōu)榈碗娖?,則停止計(jì)數(shù);當(dāng)GATE由低變高時(shí),則重新啟動(dòng)計(jì)數(shù)過(guò)程。如果在輸出為低電平時(shí),門控信號(hào)GATE變?yōu)榈碗娖?,減1計(jì)數(shù)器停止,而OUT輸出立即變?yōu)楦唠娖?。在GATE又變成高電平后,下一個(gè)時(shí)鐘脈沖的下降沿,減1計(jì)數(shù)器重新得到計(jì)數(shù)初值,又開(kāi)始新的減1計(jì)數(shù)。在計(jì)數(shù)過(guò)程中,如果寫入新的計(jì)數(shù)值,那么,將不影響當(dāng)前輸出周期。但是,如果在寫入新的計(jì)數(shù)值后,又受到門控上升沿的觸發(fā),那么,就會(huì)結(jié)束當(dāng)前輸出周期,而在下一個(gè)時(shí)鐘脈沖的下降沿,減1計(jì)數(shù)器重新得到計(jì)數(shù)初值,又開(kāi)始新的減1計(jì)數(shù)。
4.方式3(方波發(fā)生器)當(dāng)控制字寫入后,OUT輸出高電平。8253方式3三種情況時(shí)序波形:
8253方式35.方式4(軟件觸發(fā)的選通信號(hào)發(fā)生器)
采用方式4,可產(chǎn)生單個(gè)負(fù)脈沖信號(hào),負(fù)脈沖寬度為一個(gè)時(shí)鐘周期。寫入控制字后,OUT端變?yōu)楦唠娖?,若GATE為高電平,當(dāng)寫入計(jì)數(shù)初值后,在下一個(gè)CLK的下降沿將計(jì)數(shù)初值寄存器內(nèi)容裝入減1計(jì)數(shù)寄存器,并開(kāi)始減1計(jì)數(shù),當(dāng)減1計(jì)數(shù)寄存器的值為0時(shí),OUT端輸出低電平,經(jīng)過(guò)一個(gè)CLK時(shí)鐘周期,OUT端輸出高電平。
如果在計(jì)數(shù)時(shí),又寫入新的計(jì)數(shù)值,則在下一個(gè)CLK的下降沿此計(jì)數(shù)初值被寫入減1計(jì)數(shù)寄存器,并以新的計(jì)數(shù)值作減1計(jì)數(shù)。5.方式4(軟件觸發(fā)的選通信號(hào)發(fā)生器)采用方式4,可產(chǎn)生單8253方式4三種情況時(shí)序波形:
8253方式46.方式5(硬件觸發(fā)的選通信號(hào)發(fā)生器)
方式5的計(jì)數(shù)過(guò)程由GATE的上升沿觸發(fā)。當(dāng)控制字寫入后,OUT端輸出高電平,并保持高電平狀態(tài)。然后寫入計(jì)數(shù)初值,只有在GATE信號(hào)的上升沿之后的下一個(gè)CLK脈沖的下降沿,才將計(jì)數(shù)初值寄存器內(nèi)容裝入減1計(jì)數(shù)寄存器,并開(kāi)始減1計(jì)數(shù),當(dāng)計(jì)數(shù)值減到0時(shí),OUT端變?yōu)榈碗娖?,并持續(xù)一個(gè)CLK周期,然后自動(dòng)變?yōu)楦唠娖?。在?jì)數(shù)過(guò)程中,若GATE端又來(lái)一個(gè)上升沿觸發(fā),則在下一個(gè)CLK脈沖的下降沿,減1計(jì)數(shù)寄存器將重新獲得計(jì)數(shù)初值,并按新的初值作減1計(jì)數(shù),直至減為0為止。在計(jì)數(shù)過(guò)程中,若寫入新的計(jì)數(shù)值,但沒(méi)有觸發(fā)脈沖,則當(dāng)前輸出周期不受影響。當(dāng)前周期結(jié)束后,在再觸發(fā)的情況下,將按新的計(jì)數(shù)初值開(kāi)始計(jì)數(shù)。若在計(jì)數(shù)過(guò)程中,寫入新的計(jì)數(shù)值,并在當(dāng)前周期結(jié)束前又受到觸發(fā),則在下一個(gè)CLK脈沖的下降沿,減1計(jì)數(shù)寄存器將獲得新的計(jì)數(shù)初值,并按此值作減1計(jì)數(shù)操作。
6.方式5(硬件觸發(fā)的選通信號(hào)發(fā)生器)方式5的計(jì)數(shù)過(guò)程由G8253方式5三種情況時(shí)序波形:8253方式59.2.48253的初始化編程1.寫入控制字
以便選擇計(jì)數(shù)器和規(guī)定計(jì)數(shù)器的工作方式,任一計(jì)數(shù)通道的控制字都要從8253的控制端口寫入。2.寫入計(jì)數(shù)初值
計(jì)數(shù)初值(TC)的計(jì)算公式為:t=TC/f,其中t為定時(shí)時(shí)間,TC為計(jì)數(shù)初值,f為輸入時(shí)鐘頻率。
注意:如果在方式控制字中的BCD位為1,則寫入的計(jì)數(shù)初值應(yīng)為十六進(jìn)制數(shù)。例如:計(jì)數(shù)初值為50,采用BCD碼計(jì)數(shù),則指令中的50必須寫為50H。9.2.48253的初始化編程1.寫入控制字3.讀計(jì)數(shù)值
在計(jì)數(shù)過(guò)程中,若要讀取當(dāng)前的計(jì)數(shù)值,則需采用以下方法:
先寫入一個(gè)方式控制字,該方式控制字的SC1SC0指明要讀取的計(jì)數(shù)通道,RW1RW0設(shè)為00即鎖定計(jì)數(shù)值;然后再按照初始化該計(jì)數(shù)器時(shí)的讀寫方法讀取計(jì)數(shù)值。
3.讀計(jì)數(shù)值9.2.58253應(yīng)用
【例1】8253在IBMPC機(jī)中的應(yīng)用。IBMPC機(jī)系統(tǒng)板上8253的接口電路如圖9.9所示,3個(gè)計(jì)數(shù)器的時(shí)鐘輸入頻率為1.1932MHZ。系統(tǒng)分配給8253的端口地址為40H~43H。9.2.58253應(yīng)用【例1】8253在IBMPCIBM-PC機(jī)系統(tǒng)板上8253接口電路
F=1.1932MHZ
IBM-PC機(jī)系統(tǒng)板上8253接口電路F=1.1932MH計(jì)數(shù)器0為方式3,先寫低字節(jié),后寫高字節(jié),二進(jìn)制計(jì)數(shù),計(jì)數(shù)初值為0。輸出端OUT0接至中斷控制器8259A的IR0,OUT0輸出的脈沖周期約為55ms(65536÷1193200),即計(jì)數(shù)器0每隔55ms產(chǎn)生一次中斷請(qǐng)求。
計(jì)數(shù)器1為方式2,只寫低字節(jié),二進(jìn)制計(jì)數(shù),計(jì)數(shù)初值為18。輸出端OUT1接至DMA控制器8237A通道0的DMA請(qǐng)求DREQ0,作為定時(shí)(15.08μs)刷新動(dòng)態(tài)存儲(chǔ)器的啟動(dòng)信號(hào)。計(jì)數(shù)器0為方式3,先寫低字節(jié),后寫高字節(jié),二進(jìn)制計(jì)數(shù),計(jì)數(shù)初IBM-PC機(jī)BIOS對(duì)CNT0的初始化程序:
MOVAL,00110110BOUT43H,ALMOVAL,0OUT40H,ALOUT40H,ALIBM-PC機(jī)BIOS對(duì)CNT1的初始化程序:
MOVAL,01010100BOUT43H,ALMOVAL,12HOUT41H,ALIBM-PC機(jī)BIOS對(duì)CNT0的初始化程序:MOVA
BIOS中BEEP子程序,功能為使CNT2輸出方波到揚(yáng)聲器。計(jì)數(shù)器2為方式3,先寫低字節(jié),后寫高字節(jié),二進(jìn)制計(jì)數(shù),計(jì)數(shù)初值為0533H。GATE2由8255A的PB0控制,當(dāng)GATE2為高電平時(shí),OUT2輸出頻率為896HZ的方波,經(jīng)功率放大器和濾波后驅(qū)動(dòng)揚(yáng)聲器發(fā)聲。
MOVAL,10110110BOUT43H,ALMOVAX,0533HOUT42H,ALMOVAL,AHOUT42H,ALIN61H,ALMOVAH,ALORAL,03HOUT61H,ALMOVBX,100;延時(shí)
MOVCX,0G7:LOOPG7DECBXJNZG7MOVAL,AHOUT61H,ALRETBIOS中BEEP子程序,功能為使CNT2輸出方波【例2】利用8253的通道0和通道1,設(shè)計(jì)并產(chǎn)生周期為1HZ的方波。設(shè)通道0的輸入時(shí)鐘頻率為2MHz,8253所占端口地址為80H~83H。方案:
8253通道0工作于方式2(周期脈沖發(fā)生器),輸出脈沖周期為10ms,則通道0的計(jì)數(shù)值為20000。周期為10ms的脈沖作為通道1的輸入,要求輸出端OUT1的波形為方波且周期為1s,則通道1工作于方式3,計(jì)數(shù)值為100?!纠?】利用8253的通道0和通道1,設(shè)計(jì)并產(chǎn)生周期為1HZ電路圖:電路圖:8253初始化程序如下:MOVAL,34H;通道0控制字OUT83H,ALMOVAX,20000;通道0時(shí)間常數(shù)OUT80H,ALMOVAL,AHOUT80H,ALMOVAL,56H;通道1控制字OUT83H,ALMOVAL,100;通道1時(shí)間常數(shù)OUT81H,AL8253初始化程序如下:MOVAL,34H;【例3】
8253應(yīng)用(鍵盤演奏音樂(lè)程序)【例3】8253應(yīng)用(鍵盤演奏音樂(lè)程序)初值之間的關(guān)系:
(fin=1.1932MHz=1193200Hz)(fin=1193200=1234F0H)給定fout在DI寄存器中,DX和AX存放1.1932MHz的十六進(jìn)制值1234F0H,則產(chǎn)生fout輸出的計(jì)數(shù)初值的程序段:(初值存于AX中)MOVDX,12HMOVAX,34F0H;DX和AX存放finDIVDI;DI存放fout結(jié)果在AX中1234567262294330349392440494頻率表頻率表(輸出頻率fout)初值之間的關(guān)系:12345672622943303410ms秒軟件延時(shí)程序:MOVCX,2801DELAY:LOOPDELAY如產(chǎn)生1秒的程序:MOVBX,100WAIT:MOVCX,2801DELAY:LOOPDELAYDECBXJNZWAIT10ms秒軟件延時(shí)程序:datasegmentfreqdw262,294,330,349,392,440,494dataendscodesegmentassumeds:data,cs:codemainprocfarstart:pushdsmovax,0pushaxmovax,datamovds,axmoval,0b6hout43h,alinal,61horal,03hout61h,alagain:movah,1int21hcmpal,1bh;jzexitleasi,freqandax,0fhshlax,1subax,2addsi,axmovdi,[si]movdx,12hmovax,34f0hdivdi;out42h,almoval,ahout42h,aljmpagainexit:inal,61handal,0fchout61h,alretmainendpcodeendsendstartdatasegmentleasi,freq【例4】現(xiàn)有一個(gè)高精密晶體振蕩電路,輸出信號(hào)是脈沖波,頻率為1MHz。要求將1MHz信號(hào)做輸入信號(hào),利用8253做一個(gè)秒信號(hào)發(fā)生器,其輸出接一發(fā)光二極管,以0.5秒點(diǎn)亮,0.5秒熄滅的方式閃爍指示。設(shè)8253的通道地址為80H~86H(偶地址)解:1、時(shí)間常數(shù)計(jì)算這個(gè)例子要求用8253作一個(gè)分頻電路,而且其輸出應(yīng)該是方波,否則發(fā)光二極管不可能等間隔閃爍指示。頻率為1MHz信號(hào)的周期為1微妙,而1Hz信號(hào)的周期為1秒,所以分頻系數(shù)N可按下式進(jìn)行計(jì)算:【例4】現(xiàn)有一個(gè)高精密晶體振蕩電路,輸出信號(hào)是脈沖波,頻率為
由于8253一個(gè)通道最大的計(jì)數(shù)值是65536,所以對(duì)于N=1000000這樣的大數(shù),一個(gè)通道是不可能完成上述分頻要求的。由于
即取兩個(gè)計(jì)數(shù)器,采用級(jí)聯(lián)方式可達(dá)到目的。
2、電路由于8253一個(gè)通道最大的計(jì)數(shù)值是65536,所以對(duì)8253OUT1GATE1CLK1OUT0GATE0CLK0+5V+5V1MHz1KHz1Hz驅(qū)動(dòng)LED8253OUT1GATE1CLK1OUT0GATE0CLK0
3、工作方式選擇由于通道1要輸出方波信號(hào)推動(dòng)發(fā)光二極管,所以通道1應(yīng)選工作方式3。對(duì)于通道0,只要能起分頻作用就行,對(duì)輸出波形不做要求,方式2或方式3選用。
對(duì)于通道0,取工作方式2,BCD計(jì)數(shù);對(duì)于通道1,取工作方式3,二進(jìn)制計(jì)數(shù)(當(dāng)然也可選BCD計(jì)數(shù))
3、工作方式選擇
4、程序
moval,00110101b ;通道0控制字
out86h,al moval,00
;通道0初始計(jì)數(shù)值
out80h,al moval,10h
;初值1000,以16進(jìn)格式
out80h,al moval,01110110b ;通道1控制字
out86h,almoval,0e8h ;通道1初始計(jì)數(shù)值, ;03E8H=1000BCD out82h,al moval,03h out82h,al4、程序可編程接口芯片及應(yīng)用課件【例5】計(jì)件系統(tǒng)。計(jì)件系統(tǒng)的功能就是記錄脈沖的個(gè)數(shù)。一個(gè)脈沖代表一個(gè)事件,比如交通道路檢測(cè)系統(tǒng)中通過(guò)檢測(cè)點(diǎn)的車輛,工業(yè)控制系統(tǒng)中流水線上已加工好的工件。要求在計(jì)件過(guò)程中,PC機(jī)可以顯示當(dāng)前計(jì)數(shù)器的內(nèi)容,當(dāng)完成10000個(gè)工件記錄后,系統(tǒng)發(fā)出1KHz信號(hào)推動(dòng)喇叭發(fā)音通知用戶?!纠?】計(jì)件系統(tǒng)。計(jì)件系統(tǒng)的功能就是記錄
解:1、電路。需要兩個(gè)通道,一個(gè)作為計(jì)數(shù),選用通道0。另一個(gè)產(chǎn)生1KHz信號(hào),選用通道1。工作原理如下,傳感器電路把物理事件轉(zhuǎn)換為脈沖信號(hào)輸入到通道0計(jì)數(shù),當(dāng)記錄10000個(gè)事件后,通道0計(jì)數(shù)器溢出,GATE端輸出高電平,這時(shí)通道1開(kāi)始工作,產(chǎn)生1KHz信號(hào)推動(dòng)喇叭發(fā)音。解:1、電路。
2、工作方式選擇對(duì)于通道1,由于要產(chǎn)生1KHz信號(hào),故選用工作方式3。對(duì)于通道0,要求初始計(jì)數(shù)值寫入計(jì)數(shù)通道后,計(jì)數(shù)器就可以工作,則通道0的啟動(dòng)方式應(yīng)是軟件啟動(dòng)。另外由于要求計(jì)數(shù)溢出后產(chǎn)生一個(gè)信號(hào)來(lái)啟動(dòng)一個(gè)事件,即喇叭發(fā)音,故可選的工作方式為方式0和方式4,對(duì)于圖所示方案,通道1的GATE信號(hào)由通道0的OUT信號(hào)產(chǎn)生,這個(gè)OUT信號(hào)應(yīng)該是電平型的,所以通道0應(yīng)選用方式0。
2、工作方式選擇3、時(shí)間常數(shù)
N0=10000=2710H4、程序3、時(shí)間常數(shù)
movdx,306H;控制端口
moval,01110111b ;通道1控制字,bcd計(jì)數(shù)
outdx,al
movdx,302H ;通道1端口
moval,00outdx,al
moval,10h
outdx,al
movdx,306H;控制端口
moval,00110000b ;通道0控制字,二進(jìn)制計(jì)數(shù)
outdx,almovdx,300H
;通道0端口
moval,10h , outdx,al
moval,27h
outdx,al4、程序8253地址:300H-306H movdx,306H;控制端口4、Getdat:calldelay movdx,306H;通道0鎖存計(jì)數(shù)值Moval,00000000BOutdx,al;讀通道0計(jì)數(shù)值Movdx,300hInal,dxMovcl,alInal,dxMovch,al;數(shù)據(jù)存入CXCalldisplayCmpcx,0JnzGetdatGetdat:calldelay【例4】利用PC機(jī)內(nèi)部定時(shí)器0,設(shè)計(jì)并實(shí)現(xiàn)一個(gè)數(shù)字式計(jì)時(shí)時(shí)鐘。顯示格式為hh:mm:ss(hh代表時(shí),mm代表分,ss代表秒)。分析:PC機(jī)內(nèi)部定時(shí)器0初始設(shè)定為每隔55ms中斷一次,即1秒中斷18.2(1000÷55)次,若按初始設(shè)定,無(wú)法實(shí)現(xiàn)1s精確定時(shí)。需重新設(shè)定定時(shí)器0的時(shí)間常數(shù),讓其每隔10ms中斷一次;再設(shè)定一個(gè)軟件計(jì)數(shù)器,初始值為100。每中斷一次,軟件計(jì)數(shù)器減1,當(dāng)軟件計(jì)數(shù)器減為0,則定時(shí)1s。在PC機(jī)系統(tǒng)中,定時(shí)器0的中斷類型號(hào)為08H,但在中斷向量表中,存放08H中斷服務(wù)程序入口地址的單元中實(shí)際存放的是INT1CH指令,因此,當(dāng)定時(shí)器0中斷時(shí),實(shí)際是轉(zhuǎn)至INT1CH的中斷服務(wù)程序入口處。其程序如下:
【例4】利用PC機(jī)內(nèi)部定時(shí)器0,設(shè)計(jì)并實(shí)現(xiàn)一個(gè)數(shù)字式計(jì)時(shí)時(shí)鐘datasegmentcountdb100;軟件計(jì)數(shù)器
tenhdb'0'hourdb'0',':'tenmdb'0'minudb'0',':'tensdb'0'secodb'0'dataendscodesegmentmainprocfarassumecs:code,ds:datastart:pushdsmovax,0pushaxmovax,datamovds,axdatasegmentcli;關(guān)中斷
movax,351chint21h;取中斷類型號(hào)為1ch的原系統(tǒng)中斷服務(wù)程序入口地址
pushes;保存中斷服務(wù)程序入口地址的段地址
pushbx;保存中斷服務(wù)程序入口地址的偏移地址
pushdsmovdx,offsettimer;設(shè)置用戶中斷服務(wù)程序偏移地址
movax,segtimer;設(shè)置用戶中斷服務(wù)程序段地址
movds,axmovax,251ch;設(shè)置中斷向量
int21hpopdscli;關(guān)中斷moval,36h;重設(shè)8253定時(shí)器0控制字
out43h,al movax,11932;重寫8253定時(shí)器0時(shí)間常數(shù)
out40h,al moval,ah out40h,al sti;開(kāi)中斷
fore:movah,1;檢測(cè)鍵盤按鍵
int16hcmpal,1bh;是按下“Esc”鍵嗎?
jzexit;是,退出moval,36h;重movbx,offsettenh;顯示hh:mm:ssmovcx,8dispclk:moval,[bx]calldisp incbx loopdispclk moval,0dh;顯示回車
calldisp moval,seco;取秒計(jì)數(shù)單元值
wait1:cmpal,seco;秒計(jì)數(shù)單元變化否?
jzwait1;無(wú)變化,等待
jmpshortfore;有變化,顯示新時(shí)間movbx,offsettenh
exit:climoval,36h;恢復(fù)定時(shí)器0的初始設(shè)定值
out43h,al movax,0 out40h,al moval,ah out40h,al popdx;恢復(fù)中斷類型號(hào)1cH的系統(tǒng)初始值
popds movax,251ch int21h sti retmainendpexit:cli
dispprocnear;顯示字符子程序
pushbxmovbx,0 movah,0eh int10h popbx retdispendptimerprocnear pushax
movax,datamovds,ax deccount;軟件計(jì)數(shù)器減1 jnzreturn;軟件計(jì)數(shù)器不為0,中斷返回
movcount,100
dispprocnearincseco;秒加1 cmpseco,'9' jlereturn movseco,'0' inctens cmptens,'6' jlreturn movtens,'0' incminu;分加1 cmpminu,'9' jlereturn movminu,'0' inctenm cmptenm,'6' jlreturn movtenm,'0'incsecoinchour;小時(shí)加1 cmphour,'9' jaadjhour cmphour,'4';判斷是否計(jì)時(shí)到24時(shí)?
jnzreturn cmptenh,'2' jnzreturn movhour,'0';若計(jì)時(shí)到24時(shí),則回到00時(shí)
movtenh,'0'jmpshortreturnadjhour:inctenh movhour,'0'inchour;小時(shí)加1return:moval,20h;送中斷結(jié)束命令
out20h,al popax iret;中斷返回
timerendpcodeendsendstartreturn:moval,20h9.3可編程并行接口芯片8255A
9.3.18255A內(nèi)部結(jié)構(gòu)及引腳功能
1.8255A內(nèi)部結(jié)構(gòu)8255A的內(nèi)部結(jié)構(gòu)如圖所示,它由數(shù)據(jù)總線緩沖器,數(shù)據(jù)端口A、B、C,A組控制和B組控制,讀/寫控制邏輯四部分組成。
9.3可編程并行接口芯片8255A9.3.18255A可編程接口芯片及應(yīng)用課件8255A的管腳分配
1
40
8255A20
218255A的管腳分配140⑴數(shù)據(jù)總線緩沖器
數(shù)據(jù)總線緩沖器是一個(gè)雙向三態(tài)的8位數(shù)據(jù)緩沖器,8255A通過(guò)它與系統(tǒng)總線相連。輸入數(shù)據(jù)、輸出數(shù)據(jù)、CPU發(fā)給8255A的控制字都是通過(guò)這個(gè)緩沖器進(jìn)行的。
⑵數(shù)據(jù)端口:PA、PB、PC
端口A對(duì)應(yīng)一個(gè)8位數(shù)據(jù)輸入鎖存器和一個(gè)8位數(shù)據(jù)輸出鎖存器/緩沖器。用端口A作為輸入或輸出時(shí),數(shù)據(jù)均受到鎖存。端口B和端口C均對(duì)應(yīng)一個(gè)8位輸入緩沖器和一個(gè)8位數(shù)據(jù)輸出鎖存器/緩沖器。⑴數(shù)據(jù)總線緩沖器數(shù)據(jù)總線緩沖器是一個(gè)雙向三態(tài)的8位數(shù)
⑶A組控制和B組控制
這兩組控制電路一方面接收CPU發(fā)來(lái)的控制字并決定8255A的工作方式;另一方面接收來(lái)自讀/寫控制邏輯電路的讀/寫命令,完成接口的讀/寫操作。
A組控制電路控制端口A和端口C的高4位的工作方式和讀/寫操作。
B組控制電路控制端口B和端口C的低4位的工作方式和讀/寫操作。
⑶A組控制和B組控制這兩組控制電路一方面接收
⑷讀/寫控制邏輯
讀/寫控制邏輯負(fù)責(zé)管理8255A的數(shù)據(jù)傳輸過(guò)程。它接收譯碼電路的和來(lái)自地址總線的A1,A0信號(hào),以及控制總線的RESET,,信號(hào),將這些信號(hào)進(jìn)行組合后,得到對(duì)A組控制部件和B組控制部件的控制命令,并將命令發(fā)給這兩個(gè)部件,以完成對(duì)數(shù)據(jù)信息、狀態(tài)信息和控制信息的傳輸。
⑷讀/寫控制邏輯讀/寫控制邏輯負(fù)責(zé)管理8255A的2.8255與CPU連接
D0-D7、A0、A1、/CS、/RD、/WR2.8255與CPU連接
3.8255的端口地址
A1A0=00-------PA(可讀/寫)
01-------PB(可讀/寫)
10-------PC(可讀/寫)
11-------控制口(可寫)
1.`方式選擇控制字
9.3.28255A控制字
1.`方式選擇控制字9.3.28255A控制字2.端口C置位/復(fù)位控制字
2.端口C置位/復(fù)位控制字
1.方式0——基本輸入輸出
在方式0下,每一個(gè)端口都作為基本的輸入或輸出口,端口C口的高4位和低4位以及端口A口、端口B都可獨(dú)立地設(shè)置為輸入口或輸出口。
CPU可以隨時(shí)對(duì)它們進(jìn)行讀或?qū)憽?/p>
PA口可工作于方式0、方式1、方式2;
PB口可工作于方式0、方式1;
PC口只能工作于方式0。9.3.38255A工作方式
1.方式0——基本輸入輸出PA口可工作于方2.方式1——選通輸入輸出
方式1下三個(gè)端口分為A、B兩組,端口A、端口B仍作為輸入或輸出口,端口C分成兩部分,一部分作為端口A和端口B的聯(lián)絡(luò)信號(hào),另一部分仍可作為基本的輸入輸出口。2.方式1——選通輸入輸出(1)方式1輸入
(1)方式1輸入信號(hào)說(shuō)明:/STB(Strobe):選通輸入,低電平有效。該信號(hào)有效時(shí),輸入數(shù)據(jù)被送入鎖存端口A或端口B的輸入鎖存器/緩沖器中。
IBF(InputBufferFull):輸入緩沖器滿。當(dāng)外設(shè)把數(shù)據(jù)寫入端口,IBF變?yōu)?。
INTR:中斷請(qǐng)求信號(hào),高電平有效。當(dāng)IBF變?yōu)?且INTE=1時(shí),INTR變?yōu)楦唠娖健.?dāng)CPU取數(shù)據(jù),/RD的下降沿使INTR復(fù)位,上升沿又使IBF復(fù)位。
INTE:中斷允許信號(hào)。端口A用PC4的置位/復(fù)位控制,端口B用PC2的置位/復(fù)位控制。信號(hào)說(shuō)明:/STB(Strobe):選通輸入,低電平(2)方式1輸出
(2)方式1輸出信號(hào)說(shuō)明:/OBF(OutBufferFull):輸出緩沖器滿。當(dāng)CPU將數(shù)據(jù)寫入到數(shù)據(jù)端口,/OBF變0,通知外設(shè)可讀取。
/ACK(Acknowledge):外設(shè)的響應(yīng)信號(hào)。由外設(shè)發(fā)給8255A,有效時(shí),表示外設(shè)已取走8255A的端口數(shù)據(jù)。8255A收到/ACK后/OBF變?yōu)?,且“可能”產(chǎn)生中斷。
INTR:中斷請(qǐng)求信號(hào),高電平有效。當(dāng)收到/ACK,中斷允許INTE=1時(shí),INTR變?yōu)楦唠娖?。INTR信號(hào)可作為CPU的查詢信號(hào),或作為向CPU發(fā)出中斷請(qǐng)求的信號(hào)。/WR的下降沿使INTR復(fù)位。
INTE:中斷允許信號(hào)。端口A用PC6的置位/復(fù)位控制,端口B用PC2的置位/復(fù)位控制。
信號(hào)說(shuō)明:/OBF(OutBufferFull)3.方式2——雙向選通輸入輸出
8255A的方式2可使8255A與外設(shè)進(jìn)行雙向通信,既能發(fā)送數(shù)據(jù),又能接收數(shù)據(jù)??刹捎貌樵兎绞胶椭袛喾绞竭M(jìn)行傳輸。方式2只適用于端口A
,端口C的PC7~PC3配合端口A的傳輸,其聯(lián)絡(luò)信號(hào)如圖所示。3.方式2——雙向選通輸入輸出8255A的方式2可8255A方式2的控制信號(hào)和時(shí)序:8255A方式2的控制信號(hào)和時(shí)序:【例】方式0(P156)設(shè)8255A的A口和B口工作在方式0,A口作為輸入端口,接有四個(gè)開(kāi)關(guān),且每一開(kāi)關(guān)接一上拉電阻。B口為輸出端,經(jīng)一8路反相驅(qū)動(dòng)器,接有一個(gè)發(fā)光二極管(LED)組成的七段數(shù)碼管,連接電路如圖所示。試編一程序,要求數(shù)碼管顯示開(kāi)關(guān)所撥通的二進(jìn)制編碼對(duì)應(yīng)的16進(jìn)制數(shù)字(字符)。9.3.48255A應(yīng)用
【例】方式0(P156)設(shè)8255A的A口和B口工作在方式0數(shù)碼管的字型與段碼段碼hgfedcba
hh字型LED顯示段碼hgfedcbahh字型LED顯示0111000171’F’0000011107’7’0111100179’E’011111017d’6’010111105e’d’011011016b’5’0011100139’C’0110011066’4’01111100
7c’b’010011114f’3’0111011177’A’010110115b’2’011011116f
’9’0000011006’1’011111117f’8’001111113f’0’返回?cái)?shù)碼管的字型與段碼段碼字型LED顯示段碼字型LED顯示011+5VA15M/IOA6A5A4A3
G1G2AG2BCBAA0Y4
A1A0CSRDWRRESETPA0PA1PA2PA3PB0PB1PB2PB3PB4PB5PB6PB7RDRWRESETA2A1+5V74LS1388255AKa
b
c
d
e
f
g
DPadecbfgDP顯示的字符0123456789AbCdEFLED段碼(H)3F065B4F666D7D077F6F777C395E7971段碼表
LED數(shù)碼管電路+5VA15G1A0PA0RDA2+5V74LS138825地址
A口:8020H,B口:8022H, C口:8024H,控制口:8026H.A口方式0輸入,B口方式0輸出,C口設(shè)為輸出.方式控制字
10010000B=90H
地址a_portequ8020hb_portequ8022hctrl_portequ8026h……moval,90h ;設(shè)置8255方式字movdx,ctrl_portoutdx,almovdx,a_portinal,dx ;讀取開(kāi)關(guān)(鍵盤)信息andal,0fh ;屏蔽高4位movbx,offsettab1;取段碼表首地址xlat ;開(kāi)關(guān)值→段碼變換movdx,b_port ;輸出顯示outdx,ala_portequ8020h8255A應(yīng)用
【例題】掃描鍵盤按鍵,并保存相應(yīng)鍵值,硬件圖如圖所示。設(shè)8255A的端口地址為300H~303H,接收100個(gè)按鍵后結(jié)束。
分析:檢測(cè)鍵盤輸入過(guò)程如下:PC4~PC7送全“0”,再讀取PC0~PC3,若全為“1”,則表示無(wú)鍵閉合。若有鍵閉合,則進(jìn)行鍵掃描。鍵掃描方法如下:使PC4為0,PC5~PC7為高電平,讀取PC0~PC3,如果是全“1”,表示該列無(wú)鍵閉合;否則閉合鍵在該列上,再進(jìn)一步判斷讀取的數(shù)據(jù)中哪一位為“0”,從而確定閉合鍵。若該列無(wú)鍵閉合,則依次使PC5,PC6,PC7進(jìn)行上述操作。
8255A應(yīng)用【例題】掃描鍵盤按鍵,并保存相應(yīng)鍵值,硬件
在鍵盤設(shè)計(jì)時(shí),除了對(duì)鍵碼識(shí)別外,還有抖動(dòng)和重鍵兩個(gè)問(wèn)題需要解決。對(duì)機(jī)械按鍵就是當(dāng)用手按下一個(gè)鍵時(shí),往往會(huì)出現(xiàn)按鍵在閉合和斷開(kāi)位置位置之間跳幾下才穩(wěn)定到閉合狀態(tài)的情況;在釋放一個(gè)鍵時(shí),也會(huì)出現(xiàn)類似的情況,這就是抖動(dòng)。抖動(dòng)持續(xù)時(shí)間一般為10ms左右。利用硬件,也可通過(guò)軟件延時(shí)來(lái)消除抖動(dòng)。所謂重鍵就是指兩個(gè)或多個(gè)鍵同時(shí)閉合。通常情況,則是只承認(rèn)先識(shí)別出來(lái)的鍵,對(duì)同時(shí)按下的其它鍵均不作識(shí)別,直到所有鍵都釋放以后,才讀下一個(gè)鍵。
在鍵盤設(shè)計(jì)時(shí),除了對(duì)鍵碼識(shí)別外,還有抖動(dòng)和重鍵兩個(gè)問(wèn)題需可編程接口芯片及應(yīng)用課件DATASEGMENTBUFFERDB100DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,BUFFERMOVCL,100;初始化按鍵次數(shù)
MOVAL,81H;8255A控制字
MOVDX,303HOUTDX,AL;8255A初始化
KS1:CALLKS;讀取按鍵
CMPAL,0FH;判有無(wú)鍵閉合
JZKS1;無(wú)鍵閉合,循環(huán)等待
CALLDELAY;延時(shí)12ms,消除抖動(dòng)
CALLKSDATASEGMENT
CMPAL,0FH;再次判有無(wú)鍵閉合
JZKS1MOVBL,0EFH;初始化列碼
MOVBH,0;初始化列計(jì)數(shù)器
AGAIN:MOVDX,302HMOVAL,BLOUTDX,AL;輸出列碼
INAL,DX;讀取行碼
ANDAL,0FHCMPAL,0FHJZNEXT;該列無(wú)鍵閉合,準(zhǔn)備下一列掃描
CMPAL0EH;判該列是否第一個(gè)鍵閉合?
JNZTWOMOVAL,0JMPFREETWO:CMPAL,0DH;判該列是否第二個(gè)鍵閉合?
JNZTHREEMOVAL,4JMPFREECMPAL,0FH
THREE:CMPAL,0BH;判該列是否第三個(gè)鍵閉合?
JNZFOURMOVAL,8JMPFREEFOUR:CMPAL,07H;判該列是否第四個(gè)鍵閉合?
JNZNEXTMOVAL,0CHFREE:PUSHAXWAIT1:CALLKSCMPAL,0FHJNZWAIT1;鍵未釋放,則等待
POPAXADDAL,BH;按鍵鍵值=掃描鍵值+列計(jì)數(shù)值
MOV[SI],AL;保存相應(yīng)按鍵鍵值
INCSIDECCLJZEXIT;判是否接收到100個(gè)按鍵?
JMPKS1THREE:CMPAL,0BH;
NEXT:INCBH;列計(jì)數(shù)值加1ROLBL,1;列碼循環(huán)左移一位
CMPBL,0FEH;判該輪鍵掃描是否結(jié)束?
JNZAGAINJMPKS1EXIT:MOVAH,4CH;返回DOSINT21H
KSPROCNEARMOVDX,302HMOVAL,0FHOUTDX,AL;使所有列線為低電平
INAL,DX;讀取行值
ANDAL,0FH;屏蔽高4位
RETKSENDPNEXT:INCBH
DELAYPROCNEAR;延時(shí)子程序
PUSHBXPUSHCXMOVBX,2000DEL1:MOVCX,0DEL2:LOOPDEL2DECBXJNZDEL1POPCXPOPBXRETDELAYENDPCODEENDPENDSTARTDELAYPROCNEAR【例題】試編程實(shí)現(xiàn)采用動(dòng)態(tài)掃描方法在LED數(shù)碼管上顯示0000~9999,硬件圖如圖所示。設(shè)8255A的端口地址為300H~303H。共陰極數(shù)碼管【例題】試編程實(shí)現(xiàn)采用動(dòng)態(tài)掃描方法在LED數(shù)碼管上顯示000LED(LightEmittingDiode)數(shù)碼管的主要部分是發(fā)光二極管,如圖所示。這七段發(fā)光管按順時(shí)針?lè)謩e稱為a、b、c、d、e、f、g,有的產(chǎn)品還附帶小數(shù)點(diǎn)h。LED數(shù)碼管有共陰極和公陽(yáng)極兩種結(jié)構(gòu)。通過(guò)7個(gè)發(fā)光段的不同組合,可顯示0~9和A~F以及某些特殊字符。LED(LightEmittingDiode)數(shù)碼管由于發(fā)光二極管發(fā)光時(shí),通過(guò)的平均電流為10mA~20mA,而通常的輸出鎖存器不能提供這么大的電流,所以LED各段必須接驅(qū)動(dòng)電路。點(diǎn)亮數(shù)碼管有靜態(tài)和動(dòng)態(tài)兩種方法。所謂靜態(tài)顯示,就是當(dāng)數(shù)碼管顯示某一個(gè)字符時(shí),相應(yīng)的發(fā)光二極管恒定地導(dǎo)通或截止。這種顯示方式每一個(gè)數(shù)碼管都需要有一個(gè)8位輸出口控制,而當(dāng)系統(tǒng)中數(shù)碼管較多時(shí),用靜態(tài)顯示所需的I/O口太多,一般采用動(dòng)態(tài)顯示方法。
由于發(fā)光二極管發(fā)光時(shí),通過(guò)的平均電流為10mA~20mA,而
所謂動(dòng)態(tài)顯示就是一位一位地輪流點(diǎn)亮各位數(shù)碼管(掃描),對(duì)于每一位數(shù)碼管來(lái)說(shuō),每隔一段時(shí)間點(diǎn)亮一次。數(shù)碼管的亮度既與導(dǎo)通電流有關(guān),也與點(diǎn)亮?xí)r間和間隔時(shí)間的比例有關(guān)。調(diào)整電流和時(shí)間參數(shù),可實(shí)現(xiàn)亮度較高較穩(wěn)定的顯示。這種顯示方法需有兩類控制端口,即位控制端口和段控制端口。位控制端口控制哪個(gè)數(shù)碼管顯示,段控制端口決定顯示代碼。此端口所有數(shù)碼管公用,因此,當(dāng)CPU輸出一個(gè)顯示代碼時(shí),各數(shù)碼管的輸入段都收到此代碼。但是,只有位控制碼中選中的數(shù)碼管才得到導(dǎo)通而顯示。
所謂動(dòng)態(tài)顯示就是一位一位地輪流點(diǎn)亮各位數(shù)碼管(掃描),對(duì)DATASEGMENTOUTBUFFDB4DUP(?)LEDTABDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHCOUNTDB100DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,80HMOVDX,303HOUTDX,AL;8255A初始化
MOVBX,0;初始化顯示值字型表DATASEGMENT字型表NEXT:LEASI,OUTBUFFMOVAX,BX;將顯示值轉(zhuǎn)換為十進(jìn)制數(shù)并保存
MOVDX,0MOVCX,1000DIVCXMOV[SI],ALINCSIMOVAX,DXMOVCL,100DIVCLMOV[SI],ALINCSIMOVAL,AHMOVAH,0MOVCL,10DIVCLNEXT:LEASI,OUTBUFF
MOV[SI],ALINCSIMOV[SI],AHAGAIN:MOVCH,08H;初始化位選碼
LEASI,OUTBUFFLEDDISP:MOVAL,[SI];取顯示值
MOVAH,0LEADI,LEDTABADDDI,AXMOVAL,[DI];轉(zhuǎn)換為段碼
MOVDX,300HOUTDX,AL;輸出段碼
MOVDX,302HMOVAL,CHOUTDX,AL;輸出位選碼
CALLDELAY;延時(shí)2msMOV[SI],AL
INCSIRORCH,1;指向下一個(gè)數(shù)碼管
CMPCH,80HJNZLEDDISP;判該輪是否顯示結(jié)束?
DECCOUNT;重復(fù)顯示某數(shù)100次,便于看清
JNZAGAINMOVCOUNT,100INCBX;顯示數(shù)值加1CMPBX,10000JZEXITJMPNEXTEXIT:MOVAH,4CH;返回DOSINT21HINCSIDELAYPROCNEAR;延時(shí)子程序
PUSHBXPUSHCXMOVBX,10;初值隨不同型號(hào)計(jì)算機(jī)應(yīng)作調(diào)整
DEL1:MOVCX,0;初值隨不同型號(hào)計(jì)算機(jī)應(yīng)作調(diào)整
DEL2:LOOPDEL2DECBXJNZDEL1POPCXPOPBXRETDELAYENDPCODEENDSENDSTARTDELAYPROCNEAR;延時(shí)子程序【例題】采用8255A作為與打印機(jī)接口的電路,CPU與8255A利用查詢方式輸出數(shù)據(jù),硬件如圖所示,試編程實(shí)現(xiàn)將若干個(gè)字節(jié)數(shù)據(jù)送打印機(jī)打印。設(shè)8255A的端口地址為90H~93H。分析:打印機(jī)一般有3個(gè)主要信號(hào),BUSY表示打印機(jī)是否處于“忙”狀態(tài),高電平表示打印機(jī)處于忙狀態(tài)。為選通信號(hào),低電平有效,該信號(hào)有效時(shí),CPU輸出的數(shù)據(jù)被鎖存到打印機(jī)內(nèi)部數(shù)據(jù)緩沖器。為打印機(jī)應(yīng)答信號(hào),當(dāng)打印機(jī)處理好輸入數(shù)據(jù)后發(fā)出該信號(hào),同時(shí)撤銷忙信號(hào)。CPU可利用BUSY信號(hào)或信號(hào)決定是否輸出下一個(gè)數(shù)據(jù)。【例題】采用8255A作為與打印機(jī)接口的電路,CPU與825
當(dāng)CPU通過(guò)打印接口要求打印機(jī)打印數(shù)據(jù)時(shí),一般先查詢BUSY信號(hào),BUSY為低電平時(shí),輸出數(shù)據(jù)至打印口,再發(fā)送信號(hào)。
當(dāng)CPU通過(guò)打印接口要求打印機(jī)打印數(shù)據(jù)時(shí),一般先查詢BUDATASEGMENTBUFFERDB‘45A……’COUNTDW$-BUFFERDATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,BUFFERMOVCX,COUNTMOVAL,81H;8255A初始化
OUT93H,ALMOVAL,0FH;使PC7=“1”O(jiān)UT93H,ALDATASEGMENTNEXT:INAL,92H;讀PC端口WAIT1:TESTAL,01H;測(cè)試BUSY信號(hào)
JNZWAIT1MOVAL,[SI];讀取一個(gè)數(shù)據(jù),送入PA端口
OUT90H,ALMOVAL,0EH;輸出選通脈沖
OUT93H,ALNOPNOPMOVAL,0FHOUT93H,ALINCSILOOPNEXTMOVAH,4CH;返回DOSINT21HCODEENDSENDSTARTNEXT:INAL,92H;讀PC【例題】在兩臺(tái)計(jì)算機(jī)之間利用8255A的端口A實(shí)現(xiàn)并行數(shù)據(jù)傳送。如圖所示,A機(jī)8255A工作于方式1輸出,B機(jī)8255A工作于方式0輸入。兩機(jī)的CPU與8255A接口之間均采用查詢方式交換數(shù)據(jù)。試編程實(shí)現(xiàn)將A機(jī)緩沖區(qū)0300:0000H開(kāi)始的1024個(gè)字節(jié)數(shù)據(jù)發(fā)送至B機(jī),并存放于B機(jī)從0400:0000開(kāi)始的緩沖區(qū)中。設(shè)兩機(jī)8255A的端口地址均為300H~303H?!纠}】在兩臺(tái)計(jì)算機(jī)之間利用8255A的端口A實(shí)現(xiàn)并行數(shù)可編程接口芯片及應(yīng)用課件A機(jī)發(fā)送程序段:
MOVDX,303HMOVAL,0A0HOUTDX,AL;8255A初始化,端口A方式1輸出
MOVAL,0DHOUTDX,AL;使PC6(INTEA)=1,允許中斷
MOVAX,0300HMOVDS,AXMOVBX,0MOVCX,1024NEXT:MOVDX,302HWAIT1:INAL,DX;查詢PC3(INTRA)=1?
TESTAL,08HJZWAIT1MOVDX,300H;發(fā)送數(shù)據(jù)
MOVAL,[BX]OUTDX,ALINCBXLOOPNEXTA機(jī)發(fā)送程序段:B機(jī)接收程序段:
MOVDX,303HMOVAL,98HOUTDX,AL;PA方式0輸入
MOVAL,01HOUTDX,AL;使PC0()=1MOVAX,0400HMOVDS,AXMOVBX,0MOVCX,1024NT:MOVDX,302HWT:INAL,DX;讀PC口
TESTAL,10H;查詢PC4()JNZWTMOVDX,300H;接收數(shù)據(jù)
INAL,DXMOV[BX],ALINCBXMOVDX,303H;產(chǎn)生信號(hào)
MOVAL,00OUTDX,ALNOPNOPMOVAL,01HOUTDX,ALLOOPNTB機(jī)接收程序段:JNZWT第9章可編程接口芯片及應(yīng)用9.1可編程接口芯片概述9.2可編程計(jì)數(shù)/定時(shí)器82539.3可編程并行接口芯片8255A第9章可編程接口芯片及應(yīng)用9.1可編程接口芯片概述CPU要與外設(shè)交換信息,必須通過(guò)接口電路,在接口電路中一般具有如下電路單元:⑴輸入/輸出數(shù)據(jù)緩沖器和鎖存器,以實(shí)現(xiàn)數(shù)據(jù)的I/O。⑵控制命令和狀態(tài)寄存器,用以存放對(duì)外設(shè)的控制命令,以及外設(shè)的狀態(tài)信息。⑶地址譯碼器,用來(lái)選擇接口電路中的不同端口(寄存器)。⑷讀寫控制邏輯。⑸中斷控制邏輯。
9.1可編程接口芯片概述CPU要與外設(shè)交換信息,必須通過(guò)接口電路,在接口電9.19.2可編程計(jì)數(shù)器/定時(shí)器8253計(jì)數(shù)/定時(shí)的工作原理計(jì)數(shù):對(duì)外部事件發(fā)生次數(shù)進(jìn)行計(jì)數(shù)定時(shí)和計(jì)數(shù)本質(zhì)上是相同的,它們都是對(duì)一個(gè)輸入脈沖進(jìn)行計(jì)數(shù),如果輸入脈沖的頻率一定,那么記錄脈沖的個(gè)數(shù)與所需的時(shí)間是一一對(duì)應(yīng)的關(guān)系。例如:輸入脈沖頻率為2MHz,那么計(jì)數(shù)2106
定時(shí)1秒因此,使用同一個(gè)芯片,既能計(jì)數(shù),又能定時(shí)——定時(shí)器/計(jì)數(shù)器9.2可編程計(jì)數(shù)器/定時(shí)器8253計(jì)數(shù)/定時(shí)的工作原理。
9.2.18253功能及結(jié)構(gòu)
Intel8253具有3個(gè)獨(dú)立的16位計(jì)數(shù)器,使用單一+5V電源,采用NMOS工藝,24腳雙排直插式封裝的大規(guī)模集成電路1.8253主要功能⑴每片有3個(gè)獨(dú)立的16位計(jì)數(shù)通道。⑵每個(gè)計(jì)數(shù)器可按二進(jìn)制或十進(jìn)制來(lái)計(jì)數(shù),時(shí)鐘脈沖下降沿使計(jì)數(shù)器進(jìn)行減1操作。⑶每個(gè)計(jì)數(shù)器最高計(jì)數(shù)速率可達(dá)2.6MHZ。⑷每個(gè)計(jì)數(shù)器可編程設(shè)定6種工作方式之一。⑸所有輸入、輸出均與TTL電平兼容,便于與外圍接口電路相連。。9.2.18253功能及結(jié)構(gòu)2.8253的內(nèi)部結(jié)構(gòu)和引腳特性2.8253的內(nèi)部結(jié)構(gòu)和引腳特性9.2.28253控制字1.8253控制字格式
9.2.28253控制字1.8253控制字格式2.8253端口地址
A1A0=00-------計(jì)數(shù)器001-------計(jì)數(shù)器110-------計(jì)數(shù)器211-------控制口3.編程步驟先寫控制字(到控制口)再寫計(jì)數(shù)器初值(到相應(yīng)的通道端口)2.8253端口地址9.2.38253工作方式與工作時(shí)序
1.方式0(單脈沖發(fā)生器)計(jì)數(shù)器只計(jì)一遍??刂谱謱懭牒螅琌UT端為低;當(dāng)計(jì)數(shù)初值寫入后,在下一個(gè)CLK脈沖的下降沿將計(jì)數(shù)初值寄存器內(nèi)容裝入減1計(jì)數(shù)寄存器,然后計(jì)數(shù)器開(kāi)始減1計(jì)數(shù),在計(jì)數(shù)期間,當(dāng)減1計(jì)數(shù)器回0之前,輸出端OUT維持低電平。當(dāng)計(jì)數(shù)值回0時(shí),OUT輸出端變?yōu)楦唠娖?,并保持到重新寫入新的控制字或新的?jì)數(shù)值為止??勺鳛橹袛嗾?qǐng)求信號(hào)。在計(jì)數(shù)過(guò)程中,若GATE信號(hào)變?yōu)榈碗娖?,則在低電平期間暫停計(jì)數(shù),減1計(jì)數(shù)寄存器值保持不變。在計(jì)數(shù)過(guò)程中,若重新寫入新的計(jì)數(shù)初值,則在下一個(gè)CLK脈沖的下降沿,減1計(jì)數(shù)寄存器以新的計(jì)數(shù)初值重新開(kāi)始計(jì)數(shù)過(guò)程。9.2.38253工作方式與工作時(shí)序1.方式0(單脈沖發(fā)8253方式0
三種情況時(shí)序波形:
8253方式0
三種情況時(shí)序波形:2.方式1(可重觸發(fā)單穩(wěn)態(tài)方式)
輸出單個(gè)負(fù)脈沖信號(hào),脈沖的寬度可通過(guò)編程來(lái)設(shè)定。當(dāng)寫入控制字后,輸出端OUT變?yōu)楦唠娖?,并保持高電平狀態(tài)。然后寫入計(jì)數(shù)初值,只有在GATE信號(hào)的上升沿之后的下一個(gè)CLK脈沖的下降沿,才將計(jì)數(shù)初值寄存器內(nèi)容裝入減1計(jì)數(shù)寄存器,同時(shí)OUT端變?yōu)榈碗娖?。然后?jì)數(shù)器開(kāi)始減1計(jì)數(shù),當(dāng)計(jì)數(shù)值減到0時(shí),OUT端變?yōu)楦唠娖健?/p>
在OUT端輸出低電平期間,又來(lái)一個(gè)門控信號(hào)上升沿觸發(fā),則在下一個(gè)CLK脈沖的下降沿,重新將計(jì)數(shù)初值寄存器內(nèi)容裝入減1計(jì)數(shù)寄存器,并開(kāi)始計(jì)數(shù),OUT端保持低電平,直至計(jì)數(shù)值減到0時(shí),OUT端變?yōu)楦唠娖?。在?jì)數(shù)期間CPU又送來(lái)新的計(jì)數(shù)初值,不影響當(dāng)前計(jì)數(shù)過(guò)程。一直等到下一次GATE信號(hào)的觸發(fā),才會(huì)將新的計(jì)數(shù)初值裝入,并以新的計(jì)數(shù)初值開(kāi)始計(jì)數(shù)過(guò)程。2.方式1(可重觸發(fā)單穩(wěn)態(tài)方式)輸出單個(gè)負(fù)脈沖信號(hào),脈沖的8253方式1三種情況時(shí)序波形:8253方式13.方式2(周期脈沖發(fā)生器)
可產(chǎn)生周期性的負(fù)脈沖信號(hào),負(fù)脈沖寬度
溫馨提示
- 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年反腐倡廉警示教育工作總結(jié)
- 美術(shù)鑒賞與創(chuàng)新思維
- 2006年貴州高考語(yǔ)文真題及答案
- 體育用品行政后勤工作總結(jié)
- 體育用品行業(yè)行政后勤工作總結(jié)
- 2023-2024年員工三級(jí)安全培訓(xùn)考試題附答案【完整版】
- 2024企業(yè)主要負(fù)責(zé)人安全培訓(xùn)考試題及答案(名校卷)
- 教師期末教學(xué)工作總結(jié)4篇
- 快樂(lè)的國(guó)慶節(jié)作文400字5篇
- 市場(chǎng)震動(dòng)月度報(bào)告
- 河北省百師聯(lián)盟2023-2024學(xué)年高二上學(xué)期期末大聯(lián)考?xì)v史試題(解析版)
- 2021年四川省涼山州九年級(jí)中考適應(yīng)性考試?yán)砜凭C合(試卷)
- 骨科疼痛的評(píng)估及護(hù)理
- 【MOOC】概率論與數(shù)理統(tǒng)計(jì)-南京郵電大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 2024年度軟件開(kāi)發(fā)分包合同技術(shù)要求與交底2篇
- 居家養(yǎng)老人員培訓(xùn)管理制度
- 抗菌藥物的合理應(yīng)用培訓(xùn)
- 初三數(shù)學(xué)老師家長(zhǎng)會(huì)發(fā)言稿
- 湖北第二師范學(xué)院《操作系統(tǒng)》2023-2024學(xué)年期末試卷
- 2021-2022學(xué)年河北省唐山市高一上學(xué)期期末語(yǔ)文試題
- 舒適化醫(yī)療麻醉
評(píng)論
0/150
提交評(píng)論