接口課程設(shè)計報告
接口課程設(shè)計報告,接口,課程設(shè)計,報告
接口課程設(shè)計實(shí)驗報告 計算機(jī)學(xué)院0202班 徐亮 學(xué)號:012002013414宿舍安全系統(tǒng)設(shè)計報告一.實(shí)驗?zāi)康募耙竽康模航Y(jié)合一個實(shí)際的接口技術(shù)問題在實(shí)驗臺上編程模擬實(shí)現(xiàn)。要求:結(jié)合實(shí)際應(yīng)用,設(shè)計一微機(jī)應(yīng)用系統(tǒng),要求該系統(tǒng)綜合應(yīng)用并行接口、串行接口、其它接口(定時器接口、中斷接口、模擬接口可選)、編制對應(yīng)的程序,實(shí)現(xiàn)主控中心微機(jī)與下位機(jī)遠(yuǎn)距離傳送以及遠(yuǎn)程控制或監(jiān)測功能。二.系統(tǒng)功能本系統(tǒng)是用來驗證進(jìn)入宿舍人員的身份的。用戶從下位機(jī)刷卡,并錄入用戶名和密碼。下位機(jī)分別將用戶名和密碼發(fā)送給主控機(jī),主控機(jī)驗證之后,發(fā)送相應(yīng)的反饋信息給下位機(jī)。只有當(dāng)用戶名和密碼都被確認(rèn),用戶身份才合法。合法時下位機(jī)控制發(fā)光部件逐個亮燈提示,不合法時則下位機(jī)控制發(fā)聲部件鳴聲警報。三.系統(tǒng)設(shè)計1. 系統(tǒng)硬件由主控機(jī)(其中一臺微機(jī))、下位機(jī)(另一臺位微機(jī))和執(zhí)行部件組成。主控機(jī)與下位機(jī)通過串行通信線連接。2. 執(zhí)行部件:由接口電路等組成,將接收的數(shù)據(jù)送入到下位機(jī)或?qū)⑾挛粰C(jī)輸出的數(shù)據(jù)送到執(zhí)行部件。3. 下位機(jī):與主控機(jī)通信,控制執(zhí)行部件。4主控機(jī):與所有下位機(jī)進(jìn)行數(shù)據(jù)交換,必要時需建數(shù)據(jù)庫,進(jìn)行數(shù)據(jù)處理等。5主控機(jī)程序:串行(RS232/RS485)通信程序,數(shù)據(jù)處理程序等。6下位機(jī)程序:串行(RS232/RS485)通信程序,執(zhí)行部件控制程序。系統(tǒng)接口框圖見下頁所示:下圖中,8255是用來進(jìn)行下位機(jī)控制部件的接口單元。A口的8個引腳和控制板上的8個顯示燈相連,其輸出決定燈的狀態(tài);B口8個引腳和控制板上的撥碼開關(guān)的8位相連,編碼開關(guān)的狀態(tài)可由B口讀入下位機(jī);C口的PC0,PC1,PC3分別和控制板上的SW1,SW2,S24相連,可由下位機(jī)讀入各開關(guān)的狀態(tài),PC6則和喇叭相連,由PC6輸出方波控制喇叭發(fā)聲。主控機(jī)8251RS232RS232 8251下位機(jī)8255 A口 B口 C口顯示燈sw1,sw2,sw4和喇叭開關(guān)總線總線四程序設(shè)計本次課程設(shè)計的過程中,我主要負(fù)責(zé)下位機(jī)的程序的編寫,以及導(dǎo)線在實(shí)驗臺上的連接這兩部分的程序設(shè)計工作。系統(tǒng)的模塊框圖由系統(tǒng)設(shè)計的內(nèi)容可知,即8255芯片以上的部分是本系統(tǒng)的通訊模塊框圖,以下的部分為本程序的功能模塊框圖。系統(tǒng)的程序設(shè)計是緊密圍繞系統(tǒng)功能進(jìn)行的,程序要實(shí)現(xiàn)的功能就是系統(tǒng)的功能。流程框圖如下:1主控機(jī)程序流程圖程序設(shè)計過程中,為了模擬用戶的刷卡進(jìn)入,讓下位機(jī)去測試控制板上的開關(guān)sw4,其按下表示有用戶刷卡進(jìn)入,這時就可以發(fā)送插卡信號給主控機(jī),下圖中“接收用戶插卡信號”就是指這個信號。開始按鍵?結(jié)束接收用戶插卡信號合法?發(fā)確認(rèn)信號接收用戶密碼信息發(fā)確認(rèn)信號接收用戶名信息正確?合法?發(fā)確認(rèn)信號提示用戶可以進(jìn)入初始化提示用戶名錯誤發(fā)否認(rèn)信號提示密碼錯誤發(fā)否認(rèn)信號提示卡非法YYYYNNNN2下位機(jī)程序流程圖下位機(jī)部分需要操作控制板,這里要用到控制板上的8位編碼開關(guān),以及開關(guān)sw1,sw2,sw4。按下sw4表示用戶插卡進(jìn)入,然后撥動控制板上的編碼開關(guān),設(shè)置用戶名編碼,按下sw1發(fā)送給主控機(jī),若被主控機(jī)確認(rèn)無誤,則撥動控制板上的編碼開關(guān)設(shè)置密碼,再按下sw2發(fā)送給主控機(jī),等待主控機(jī)確認(rèn)。正確情況下的燈亮很好控制,只要A口輸出數(shù)據(jù)到燈的引腳,再設(shè)計一段程序控制燈的閃爍方式即可。喇叭的發(fā)聲要說明的是,此處并不是用8253的out端輸出方波來使之發(fā)聲,而是將C口的PC6交替置位和復(fù)位產(chǎn)生方波,使之發(fā)聲的。開始按鍵?結(jié)束發(fā)送用戶插卡信號接收確認(rèn)信號合法?發(fā)用戶密碼信息接收確認(rèn)信號發(fā)送用戶名信息接收確認(rèn)信號正確?合法?提示用戶可以進(jìn)入燈亮初始化聲音報警提示用戶名錯誤接收否認(rèn)信號聲音報警提示密碼錯誤接收否認(rèn)信號提示卡非法YYYYNNNN3.主控機(jī)源程序;每次驗證用戶名和密碼之前,都有退出提示,即3秒鐘內(nèi)按任意鍵退出,此時;按任意鍵方可退出datasegmentdata51 equ 308h ;8251A數(shù)據(jù)口ctr151 equ 309h ;8251A命令/狀態(tài)口defuserdb 65h,81h,24h,37h,02ah,54h;依次為各用戶名defpwddb 20h,17h,34h,25h,04ch,44h;依次為各用戶對應(yīng)的密碼usernodw 6;用戶數(shù)目YNdb 0;發(fā)送緩存userdb 0;存放接收的用戶名pwddb 0;存放接收的密碼tdw 0;延時初值 bufbdb 0ah,0dh,The domitory system is running.!$bufudb 0ah,0dh,username(4 characters):$;接收用戶名提示bufpdb 0ah,0dh,password(6 characters):$;接收密碼提示bufrdb 0ah,0dh,You can get in!$;正確提示bufus db 0ah,0dh,Error username!$;用戶名錯誤提示bufpd db 0ah,0dh,Error password!$;密碼錯誤提示buferr db 0ah,0dh,Can not identify the card!$;不可識別的卡bufexit db 0ah,0dh,Press any key within 3 seconds to exit!$dataendsstacksegment stackdb 200 dup(0)stack endscode segmentassume cs:code,ds:data,ss:stackhh macro;回車換行的宏mov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hendmint51 proc near ;8251A初始化子程 mov dx,ctr151 ;8251A命令口 mov al,0;空操作 out dx,al mov al,40h ;內(nèi)部復(fù)位 out dx,al mov al,4Eh ;8251A方式命令 out dx,al mov al,27h ;8251A工作命令 out dx,al retint51 endpdelay1 proc ;延時子程1 push bx mov bx,tdl1: dec bx jnz dl1 pop bx retdelay1 endp quit proc ;3秒鐘之內(nèi)按任意鍵退出程序push cxlea dx,bufexitmov ah,9int 21hmov cx,05fffhqxx:cmp cx,0je qxmov ah,1;檢測是否有鍵按下,有則退出int 16hjnz qnextmov t,0ffffhcall delay1dec cxjmp qxxqnext: mov ah,4chint 21hqx: pop cxretquit endpsend macroa;發(fā)送一個字符的宏,首先必須將要發(fā)送的字符送入變量YNmov dx,ctr151 a: in al,dx test al,01 ;發(fā)送準(zhǔn)備好?TXRDY=1? jz a ;未準(zhǔn)備好,則等待 mov dx,data51 ;已準(zhǔn)備好,則發(fā)送Y給下位機(jī) mov al,YN out dx,alendmreceive macrob;接收一個字符的宏,接收到alb: mov dx,ctr151 ;檢測接收準(zhǔn)備好沒 in al,dx test al,02 ;接收數(shù)據(jù)準(zhǔn)備好?RXRDY=1? jz b ;未準(zhǔn)備好則繼續(xù)檢測mov dx,data51;已準(zhǔn)備好,即有數(shù)據(jù)傳送過來,則接收1個字符 in al,dxendmbegin: mov ax,datamov ds,ax call int51 ;調(diào)用8251A子程序,初始化8251A k:call quit;延時3秒退出 hhlea dx,bufb;系統(tǒng)提示mov ah,9int 21hreceive o;接收插卡信號 cmp al,O jne errormov YN,Y;發(fā)送卡確認(rèn)信息send yyylea dx,bufu;用戶名提示信息mov ah,9int 21hmov al,0receive a;接收一個字符,用戶信息 mov user,al;保存接收的用戶信息mov dl,user ;顯示接收的字符 mov ah,02h int 21hjmp cmpusererror: lea dx,buferr ;無法識別的卡 mov ah,9 int 21h hh jmp kover: mov ax,4c00hint 21h cmpuser:mov al,userlea si,defuser;取用戶名數(shù)組的首地址mov cx,userno;取用戶數(shù)目cu:cmp cx,0je sendnucmp al,sije sy;和某一個用戶名相等則發(fā)送Y確認(rèn)信號inc sidec cxjmp cusy:push si;保存該用戶名的地址mov YN,Ysend ylea dx,bufp;密碼提示信息mov ah,9int 21h;接收密碼 receive ppmov pwd,al;保存接收的密碼pop simov ax,siadd ax,userno;得到該用戶名對應(yīng)的密碼在密碼數(shù)組中的地址mov si,axmov bl,sicmp pwd,bl;和密碼比較jne sendnp;不相等則發(fā)送N,相等則發(fā)送Ymov YN,Ysend yylea dx,bufr;顯示正確 mov ah,9int 21hhhjmp k;重新開始 sendnp:mov YN,Nsend nlea dx,bufpd;顯示密碼錯誤mov ah,9int 21h hhjmp k;重新開始sendnu:mov YN,Nsend nlea dx,bufus;顯示用戶名錯誤mov ah,9int 21h hhjmp k;重新開始code ends end begin4.下位機(jī)源程序;程序開始時,提示在3秒鐘內(nèi)按任意鍵退出,否則繼續(xù)執(zhí)行。若繼續(xù)執(zhí)行,首;先按sw4表示插卡,再由開;關(guān)狀態(tài)設(shè)置用戶名,按sw1發(fā)送之,顯示提示信息;仍然用開關(guān)狀態(tài)設(shè)置密碼,按sw2發(fā)送之,顯示提示;信息,回程序開始.datasegmentdata51 equ 308h ;8251A數(shù)據(jù)口ctr151 equ 309h ;8251A命令/狀態(tài)口ctr155 equ 303h ;8255命令口ctr155a equ 300h ;8255數(shù)據(jù)口actr155b equ 301h ;8255數(shù)據(jù)口bundb 0;存放讀入的用戶名pddb 0;存放讀入的密碼hhdb 0ah,0dh,$;回車換行 lightdb 0feh,0fdh,0fbh,0f7h,0efh,0dfh,0bfh,07fh;閃爍燈狀態(tài)tdw 0;延時初值 fdb 0 ;計數(shù)初始值jdb 0;計數(shù)初始值YN db 0bufexit db 0ah,0dh,Press any key within 3 seconds to exit!$buf1db 0ah,0dh,Press sw4 instand of inserting the card!$buf2db 0ah,0dh,Change the state of the switch to set username! Press sw1 to send it!$;提示錄入和發(fā)送用戶名buf3db 0ah,0dh,Change the state of the switch to set password! Press sw2 to send it!$;提示錄入和發(fā)送密碼buf4db 0ah,0dh,The user is not existed or you have the wrong password!$;錯誤提示信息buf5db 0ah,0dh,You can get in!$;成功登錄信息dataendsstack segment stackDB 200 DUP(0)stack endscode segmentassume cs:code,ds:data,ss:stackint51 proc near ;8251A初始化子程 mov dx,ctr151 ;8251A命令口 mov al,0;空操作 out dx,al mov al,40h ;內(nèi)部復(fù)位 out dx,al mov al,4Eh ;8251A方式命令 out dx,al mov al,27h ;8251A工作命令 out dx,al retint51 endpsend macro a;發(fā)送一個字符的宏,首先必須將要發(fā)送的字符送入變量YNmov dx,ctr151 a: in al,dx test al,01 ;發(fā)送準(zhǔn)備好?TXRDY=1? jz a ;未準(zhǔn)備好,則等待 mov dx,data51 ;已準(zhǔn)備好,則發(fā)送一個字符給下位機(jī) mov al,YN out dx,alendmclear macro c;置口c某一位,c為置位控制字 mov dx,303hmov al,cout dx,alendmreceive macrob;接收一個字符的宏,接收到alb: mov dx,ctr151 ;檢測接收準(zhǔn)備好沒 in al,dx test al,02 ;接收數(shù)據(jù)準(zhǔn)備好?RXRDY=1? jz b ;未準(zhǔn)備好則繼續(xù)檢測mov dx,data51 ;已準(zhǔn)備好,即有數(shù)據(jù)傳送過來,則接收1個字符 in al,dxendmdelay1 proc ;延時子程1 push bx mov bx,tdl1: dec bx jnz dl1 pop bx retdelay1 endp delay2 proc;延時子程2push cxmov cx,00fffhxx:cmp cx,0je xmov t,0ffffhcall delay1dec cxjmp xxx: pop cxretdelay2 endpquit proc ;3秒鐘之內(nèi)按任意鍵退出程序push cxlea dx,bufexitmov ah,9int 21hmov cx,07fffhqxx:cmp cx,0je qxmov ah,1;檢測是否有鍵按下,有則退出int 16hjnz qnextmov t,0ffffhcall delay1dec cxjmp qxxqnext: mov ah,4chint 21hqx: pop cxretquit endpflutter proc ;燈閃爍函數(shù),8個燈依次亮,循環(huán)3次lea di,lightmov f,3wyyy: cmp f,0je wy mov cx,8l:cmp cx,0je wyymov al,di;燈亮mov dx,ctr155aout dx,al call delay2;延時2mov al,0ffh;燈滅mov dx,ctr155aout dx,al inc didec cxjmp lwyy: lea di,light dec fjmp wyyywy: retflutter endpnoise proc ;聲音報警子函數(shù),3次長鳴 push cxmov f,3jj:cmp f,0je ejj;產(chǎn)生一定頻率的方波,使喇叭發(fā)聲mov cx,00dffhxxkk1:cmp cx,0je xkkmov dx,ctr155;pc6置1mov al,0dhout dx,almov t,0ffffhcall delay1;延時mov dx,ctr155;pc6置0mov al,0chout dx,almov t,0ffffhcall delay1;延時dec cxjmp xxkk1xkk:call delay2;不產(chǎn)生方波,停止發(fā)聲dec fjmp jjejj:pop cxretnoise endpbegin: mov ax,datamov ds,ax call int51 ;調(diào)用8251A子程序,初始化8251A mov dx,ctr155 ;初始化8255A mov al,10000011b out dx,alww:lea dx,hh;回車換行 mov ah,9int 21hcall quit;延時退出程序lea dx,hh;回車換行 mov ah,9int 21hlea dx,buf1;提示按sw4表示插卡mov ah,9int 21h;檢測sw4是否按下clear 07h;清sw4狀態(tài)wait4:mov dx,302in al,dx;sw4按下? pc3=0?test al,08h;否,則繼續(xù)檢測jnz wait4;是則發(fā)送卡插入信號mov YN,Osend omov al,0;接收主控機(jī)反饋信息receive icmp al,Y;確認(rèn)則繼續(xù),否則重新開始jne wwlea dx,buf2;提示設(shè)置用戶名并發(fā)送之mov ah,9int 21h;檢測sw1狀態(tài)clear 01h;清sw1狀態(tài)wait1:mov dx,302h ;檢測sw1是否按下 in al,dxtest al,01h;sw1按下? pc0=0?jnz wait1;否則繼續(xù)檢測;按下則讀開關(guān)狀態(tài)(口b),得到用戶名mov dx,ctr155b ;讀b口 in al,dxmov un,al;保存用戶名mov YN,al;發(fā)送用戶名send usjmp receivover: mov ax,4c00h ;程序退出 int 21h;接收主控機(jī)反饋信息receiv: receive ycmp al,Y;接收的字符和Y比較jne wrong;不合法就提示錯誤信息lea dx,buf3;合法則提示設(shè)置密碼并發(fā)送之mov ah,09hint 21hclear 02h;清sw2狀態(tài)wait2:mov dx,302h ;檢測sw2是否按下 in al,dxtest al,02h;sw2按下? pc1=0?jnz wait2;否則繼續(xù)檢測;按下則讀開關(guān)狀態(tài)(口b),得到密碼mov dx,ctr155b ;讀口b in al,dxmov pd,al;保存密碼mov YN,al;發(fā)送密碼send pd;接收主控機(jī)反饋回來的信息receive yycmp al,Y;接收的字符和Y比較jne wrong;不相等就提示錯誤信息,相等則提示登錄成功lea dx,buf5;提示登錄成功mov ah,9int 21h;此處亮燈提示call flutterjmp ww;準(zhǔn)備第二次刷卡wrong:lea dx,buf4;顯示錯誤提示信息mov ah,9int 21h;此處聲音報警call noise jmp ww;準(zhǔn)備第二次刷卡code ends end begin五心得體會此次程序設(shè)計我們小組同心協(xié)力,通過三天多的時間,終于完成了接口的課程設(shè)計。通過這個課程設(shè)計,我真正掌握了8255,8251等芯片的功能和使用方法,以前在課堂上一知半解的知識通過這次課程設(shè)計都徹底弄清楚了。通過寫8255,8251等芯片的命令口,可以使得各種芯片工作在不同的狀態(tài),這可以發(fā)揮這些芯片的使用范圍,特別是撥碼開關(guān)的地方,通過撥碼開關(guān)可以設(shè)置8255的PB口的值,而這些值可以通過8251發(fā)送出去,這就是卡號和車費(fèi)輸入的地方。通過這次課程設(shè)計,我認(rèn)識到了匯編語言的強(qiáng)大功能,匯編語言是計算機(jī)能夠提供給用戶使用的最快而又最有效的語言,也是能夠利用計算機(jī)所有硬件特性并能直接控制硬件的唯一語言。但是,匯編語言作為一種低級語言,有他自身無法克服的缺點(diǎn),他的圖形用戶界面效果,遠(yuǎn)遠(yuǎn)不能和C語言或者C語言相提并論,最好的方法是匯編語言和C/C混合編程,高級語言編程方便簡潔,匯編語言能充分發(fā)揮計算機(jī)硬件特性并且程序運(yùn)行效率高,二者相結(jié)合,效果勝過單獨(dú)一門語言體現(xiàn)出來的效果。我還想提一個建議,那就是實(shí)驗室最好為我們的控制板提供一本使用說明或指南,這樣我們就可以徹底拋棄控制板的束縛,靈活地從單個接口芯片的功能特性出發(fā),設(shè)計出更好更精彩的程序。
收藏