




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、軍械工程學(xué)院計(jì)算機(jī)硬件技術(shù)基礎(chǔ)課程創(chuàng)新型實(shí)驗(yàn)設(shè)計(jì)報(bào)告題 目: 基于8086的電子萬年歷設(shè)計(jì)組長(zhǎng):吳明春組員:謝林峰,宋群奇,洪鑫強(qiáng),加央旦增指導(dǎo)教員: 謝方方 起止時(shí)間: 2016年11月25日-2016年12月28日目 錄第一章 實(shí)驗(yàn)簡(jiǎn)介21.1 目的意義21.2 功能2第二章 相關(guān)硬件知識(shí)介紹22.1 可編程并行接口芯片8255A22.2 可編程計(jì)數(shù)器82533第三章 系統(tǒng)設(shè)計(jì)43.1 總體設(shè)計(jì)43.2 硬件電路設(shè)計(jì)53.3 軟件編程設(shè)計(jì)63.3.1 匯編程序流程圖63.3.2 程序解析7第四章 系統(tǒng)實(shí)現(xiàn)174.1 proteus仿真實(shí)驗(yàn)17第五章 小結(jié)195.1 設(shè)計(jì)總結(jié)195.2 設(shè)計(jì)
2、存在的問題195.3 心得體會(huì)19第一章 實(shí)驗(yàn)簡(jiǎn)介1.1 目的意義學(xué)習(xí)和掌握計(jì)算機(jī)中常用接口電路的應(yīng)用和設(shè)計(jì)技術(shù),學(xué)會(huì)針對(duì)不同的要求設(shè)計(jì)匯編程序代碼,充分認(rèn)識(shí)理論知識(shí)對(duì)應(yīng)用技術(shù)的指導(dǎo)性作用,進(jìn)一步加強(qiáng)理論知識(shí)與應(yīng)用相結(jié)合的實(shí)踐和鍛煉。通過這次設(shè)計(jì)實(shí)踐能夠進(jìn)一步加深對(duì)專業(yè)知識(shí)和理論知識(shí)學(xué)習(xí)的認(rèn)識(shí)和理解,使自己的設(shè)計(jì)水平和對(duì)所學(xué)知識(shí)的應(yīng)用能力以及分析問題解決問題的能力得到全面提高。1.2 功能電子萬年歷是人們生活中不可或缺的一種生活用品,對(duì)人們的生活起到了極大的幫助,我們通過它來知道今夕是何年、何月、何日、何時(shí)。本課題要設(shè)計(jì)一個(gè)電子萬年歷,以8086芯片組成的最小系統(tǒng)為基礎(chǔ),來設(shè)計(jì)一個(gè)電子萬年歷。
3、該電子萬年歷實(shí)現(xiàn)了以下幾個(gè)功能:(1) 自動(dòng)定時(shí),該功能為電子萬年歷的基本功能,這里不做贅述;(2) 自動(dòng)計(jì)算星期,在程序中引用蔡勒公式實(shí)現(xiàn)了自動(dòng)計(jì)算星期。(3) 整點(diǎn)報(bào)時(shí),該電子萬年歷實(shí)現(xiàn)了整點(diǎn)報(bào)時(shí)功能,極大地豐富了我們的生活。第2章 相關(guān)硬件知識(shí)介紹2.1 可編程并行接口芯片8255A 可編程并行接口芯片8255A是一種可編程并行I/O接口芯片,通過對(duì)它進(jìn)行編程,選擇不同的工作方式,可將其應(yīng)用于基本輸入輸出、鍵盤接口等。本實(shí)驗(yàn)中,我們用了2片8255A芯片,將8255A作為時(shí)鐘輸入接口和數(shù)碼管的輸出接口。8255A的整體結(jié)構(gòu)圖如圖1所示。圖1 8255A連接圖1.與CPU連接部分8255A
4、能并行傳送8位數(shù)據(jù),其數(shù)據(jù)線為D0D7,對(duì)應(yīng)連接8086CPU的低八位;8086CPU數(shù)據(jù)線低八位與8255A相連,所以8255A內(nèi)部各個(gè)端口使用偶地址,即8255A的A0、A1分別接8086CPU的A1、A2。此外CPU要對(duì)8255A進(jìn)行讀、寫與片選操作,所以控制線為片選、復(fù)位、讀、寫信號(hào)。2.與外設(shè)接口部分8255A有3個(gè)并行接口A、B、C與外設(shè)連接,每個(gè)并行接口又有8根線與外設(shè)連接,所以8255A可以用24根線與外設(shè)連接,各并行接口的引腳編號(hào)如下:A口:編號(hào)為PA0PA7,用于8255A向外設(shè)輸出8位并行數(shù)據(jù)B口:編號(hào)為PB0PB7,用于8255A向外設(shè)輸出8位并行數(shù)據(jù)。C口:編號(hào)為PC
5、0PC7,用于8255A從外設(shè)讀取8位并行數(shù)據(jù)。2.2 可編程計(jì)數(shù)器82531.與CPU連接部分8253能并行傳送8位數(shù)據(jù),其數(shù)據(jù)線為D0D7,對(duì)應(yīng)連接8086CPU的低八位;8086CPU數(shù)據(jù)線低八位與8253相連,所以8253內(nèi)部各個(gè)端口使用偶地址,即8253的A0、A1分別接8086CPU的A1、A2。此外CPU要對(duì)8253進(jìn)行寫入控制字和初值與片選操作,所以控制線為片選、寫信號(hào)。2. 與外設(shè)連接部分8253的數(shù)據(jù)線D0D7與CPU的低八位數(shù)據(jù)線相連,傳送8253的相關(guān)控制字,用來設(shè)定8253各端口的工作狀態(tài)和輸入計(jì)數(shù)初值。在本項(xiàng)目中,我們使用了8253的A口和B口,其中,A口CLK0與
6、信號(hào)源鏈接,工作于方式三,OUT0輸出所需頻率,與8255(U10)芯片的C口相連,實(shí)現(xiàn)定時(shí);B口CLK1同樣與信號(hào)源相連,工作于方式一,用以產(chǎn)生整點(diǎn)報(bào)時(shí)的信號(hào)。8253的整體結(jié)構(gòu)圖如圖2所示。圖2 8253連接圖第三章 系統(tǒng)設(shè)計(jì)3.1 總體設(shè)計(jì)系統(tǒng)總設(shè)計(jì)圖見圖3。數(shù)碼管8255A 8 0 8 6 CPU 時(shí)間數(shù)據(jù)數(shù)據(jù)8253 CLK(定時(shí))圖3 總體設(shè)計(jì)圖系統(tǒng)運(yùn)行后,由8253產(chǎn)生時(shí)鐘信號(hào),輸入8255A(U10)的C口,掃描C口的狀態(tài),當(dāng)掃描到一個(gè)時(shí)鐘信號(hào)的時(shí)候,控制秒加一,這樣就實(shí)現(xiàn)了定時(shí)。3.2 硬件電路設(shè)計(jì)8086CPU與三片74LS373和兩片74LS245組成最小系統(tǒng),使8086
7、工作在最小系統(tǒng)模式,三片74LS373的輸出作為8086的地址總線(A0-A19),兩片74LS245的輸出作為8086的數(shù)據(jù)總線(D0-D15)。以一片74LS138作為片選,74LS138的輸入是A12-A15,輸出為,分別作為兩片8255A和8253的片選信號(hào)。第一片8255A(U10)的A口和B口和C口都工作在方式0(基本輸入輸出模式),其中A口和B口輸出,C口輸入(掃描時(shí)鐘信號(hào)),A口作為年月日輸出數(shù)碼管的片選信號(hào),B口輸出年月日到八位數(shù)碼管。第二片8255A(U8)的A口和B口和C口都工作在方式0(基本輸入輸出模式),其中A口不用,B口和C口輸入,C口用來作為時(shí)分秒和星期輸出數(shù)碼管
8、的片選信號(hào),B口用來輸出時(shí)分秒和星期到數(shù)碼管。8253的0口輸出時(shí)鐘信號(hào)連接到第一片8255A(U10)的C口,工作在方式3,用以定時(shí)。1口用以產(chǎn)生鬧鐘信號(hào),工作在方式0,驅(qū)動(dòng)蜂鳴器發(fā)聲。八位數(shù)碼管用以顯示年月日,片選信號(hào)接入8255A(U10)的A口,顯示信號(hào)接入8255A(U10)的B口。三個(gè)兩位數(shù)碼管和一個(gè)單位數(shù)碼管用來顯示時(shí)分秒和星期,片選信號(hào)都接入8255A(U8)的C口,顯示信號(hào)接入8255A(U8)的B口。硬件電路連接圖:3.3 軟件編程設(shè)計(jì)開始3.3.1 匯編程序流程圖初始化兩片8255和8253 寫入數(shù)據(jù)產(chǎn)生片選信號(hào)和時(shí)間信號(hào)送入數(shù)碼管顯示判斷閏年、月大、月小,時(shí)間處理圖3
9、匯編程序流3.3.2 程序解析/第一片8255#define IOCON 8006H#define IOA 8000H#define IOB 8002H#define IOC 8004H/第二片8255#define IOCON1 9006H#define IOA1 9000H#define IOB1 9002H#define IOC1 9004H/8253#define A_0 0xA000#define A_1 0xA002#define A_2 0xA004#define A_CON 0xA006int table10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82
10、,0xf8,0x80,0x90; /共陽極編碼0.9int xqing=0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8;/星期1.7int shuma8=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;/變量聲明int n1;/年份的千位int n2;/年份的百位int n3;/年份的十位int n4;/年份的個(gè)位int nianx;int y1;/月份的十位int y2;/月份的個(gè)位int yuex;int t1;/天的十位int t2;/天的個(gè)位int tianx;int s1;/小時(shí)的十位int s2;/小時(shí)的個(gè)位int f1;/分鐘
11、的十位int f2;/分鐘的個(gè)位int fenx;int m1;/秒的十位int m2;/秒的個(gè)位int miaox;int xq;/星期int btn;/io接口int count=0;void outp(unsigned int addr, char data)/ Output byte to port _asm mov dx, addr mov al, data out dx, al char inp(unsigned int addr)/ Input byte from port char result; _asm mov dx, addr in ax, dx mov result,
12、ax return result; void delay() /延遲函數(shù) int t=0; for(t=0;t<100;t+) ; void nian(int x)/對(duì)年份進(jìn)行處理 n1=x/1000; x=x-1000*n1; n2=x/100; x=x-100*n2; n3=x/10; n4=x-10*n3; void yue(int x)/對(duì)月進(jìn)行處理 if(x>9) y2=x%10; x=x-y2; y1=x/10; else y2=x;y1=0; void tian(int x)/對(duì)日進(jìn)行處理 t2=x%10; x=x-t2; t1=x/10; void shi(int
13、x)/對(duì)時(shí)進(jìn)行處理 s2=x%10; x=x-s2; s1=x/10; void fen(int x)/對(duì)分進(jìn)行處理 f2=x%10;x=x-f2;f1=x/10; void miao(int x)/對(duì)秒進(jìn)行處理 m2=x%10; x=x-m2; m1=x/10; void xingqi(void)/對(duì)星期處理 if(y2=1&&y1=0) y1=1; y2=3; else if(y2=2&&y1=0) y1=1; y2=4; xq=(10*n1+n2)/4-2*(10*n1+n2)+(10*n3+n4)+(10*n3+n4)/4+13*(10*y1+y2+1)
14、/5+10*t1+t2+1)%7; void xienian()/寫年到數(shù)碼管 int i=0; outp(IOA,shumai); outp(IOB,tablen1); i+; delay(); outp(IOA,shumai); outp(IOB,tablen2); i+; delay(); outp(IOA,shumai); outp(IOB,tablen3); i+; delay(); outp(IOA,shumai); outp(IOB,tablen4); delay(); void xieyue()/寫月到數(shù)碼管 int i=4; outp(IOA,shumai); outp(IO
15、B,tabley1); i+; delay(); outp(IOA,shumai); outp(IOB,tabley2); i+; delay(); void xietian()/寫天到數(shù)碼管 int i=6; outp(IOA,shumai); outp(IOB,tablet1); i+; delay(); outp(IOA,shumai); outp(IOB,tablet2); i+; delay(); void xieshi()/寫小時(shí)到數(shù)碼管 int i=0; outp(IOC1,shumai); outp(IOB1,tables1); delay(); i+; outp(IOC1,s
16、humai); outp(IOB1,tables2); delay(); void xiefen()/寫分鐘到數(shù)碼管 int i=3; outp(IOC1,shumai); i+; outp(IOB1,tablef1); delay(); outp(IOC1,shumai); outp(IOB1,tablef2); delay(); void xiemiao()/寫秒到數(shù)碼管 int i=6; int x=0; outp(IOC1,shumai); i+; outp(IOB1,tablem1); delay(); outp(IOC1,shumai); outp(IOB1,tablem2); d
17、elay(); void xiexingqi()/寫星期到數(shù)碼管 int i=2; outp(IOC1,shumai); outp(IOB1,xqing(xq+4)%7); delay(); void runnian()/判斷閏年 nianx=1000*n1+100*n2+10*n3+n4; tianx=10*t1+t2; yuex=10*y1+y2; if(nianx%4=0)&&(nianx%100!=0)|(nianx%400=0) if(yuex=2&&tianx>29) t1=0; t2=1; y2+; else if(yuex=2&&a
18、mp;tianx>28) t1=0; t2=1; y2+; void yueda()/月大(31天) yuex=10*y1+y2; tianx=10*t1+t2; if(yuex=1|yuex=3|yuex=5|yuex=7|yuex=8|yuex=10|yuex=12) if(tianx>31) t1=0; t2=1; y2+; if(yuex>11) y1=0; y2=1; n4+; if(n4>9) n4=0; n3+; if(n3>9) n3=0; n2+; if(n2>9) n2=0; n1+; void yuexiao()/月?。?0天) yue
19、x=10*y1+y2; tianx=10*t1+t2; if(yuex=4|yuex=6|yuex=9|yuex=11) if(tianx>30) t1=0; t2=1; y2+; if(y2>9) y2=0; y1+; void zhengdian()/整點(diǎn)報(bào)時(shí) fenx=10*f1+f2; miaox=10*m1+m2; if(fenx=0&&miaox=0) outp(A_CON,0x51); outp(A_1,0x04); void shijianchuli() /時(shí)間處理 yuex=10*y1+y2; tianx=10*t1+t2; if(btn=0b11
20、11111111111111) count+; if(count=40) count=0; m2+; if(m2>9) m2=0; m1+; if(m1>5) m1=0; f2+; if(f2>9) f2=0; f1+; if(f1>5) f1=0; s2+; if(s2>9) s2=0; s1+; else if(s1=2&&s2=4) s1=0; s2=0; f1=0; f2=0; m1=0; m2=0; t2+; xq+; runnian(); yuexiao(); yueda(); zhengdian(); if(t2>9) t2=0
21、; t1+; void main() outp(IOCON,0x89); outp(IOCON1,0x80); outp(A_CON,0x17); outp(A_0,0x02); btn=inp(IOC); nian(2017); yue(11); tian(30); xingqi(); shi(23); fen(59); miao(59); yue(11); while(1) xiexingqi(); xienian(); xieyue(); xietian(); xieshi(); xiefen(); xiemiao(); xiexingqi(); shijianchuli(); 第四章
22、系統(tǒng)實(shí)現(xiàn)4.1 proteus仿真實(shí)驗(yàn)圖4 Proteus仿真圖2.硬件部分遇到的困難及解決方法(1)在初次連接好后我們進(jìn)行了調(diào)試,但不能正常工作,經(jīng)檢查有連線錯(cuò)誤,改正后可以顯示。(對(duì)于數(shù)碼管的動(dòng)態(tài)顯示理解不夠深刻,傳輸數(shù)據(jù)的數(shù)據(jù)的時(shí)候有時(shí)候顯示不完全) (2)可以運(yùn)行工作后,顯示亂碼,原因是只用了一片8255,用B口輸出年月日時(shí)分秒和星期,導(dǎo)致數(shù)據(jù)混亂,所以,之后改為了兩片8255。 第五章 小結(jié)5.1 設(shè)計(jì)總結(jié)通過對(duì)基于8086的電子萬年歷的設(shè)計(jì),從電路到程序設(shè)計(jì),再到對(duì)程序的調(diào)試,在整個(gè)的設(shè)計(jì)過程中學(xué)到了很多。用到了8255A的并行接口,將二進(jìn)制的控制信息傳入8086CPU中處理。在使用8255A接口的時(shí)候,都要對(duì)其進(jìn)行初始化,這初始化程序的編寫,有助于對(duì)這些接口芯片的工作原理的理解??傊趯?shí)驗(yàn)中自己動(dòng)手,把理論知識(shí)用于實(shí)踐,從中能夠?qū)W到
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 寵物料配方師考試題庫及答案
- 超市營(yíng)業(yè)員考試題及答案
- 測(cè)量工程師職稱 考試題及答案
- 采耳師證書考試題型及答案大全
- 保師附小數(shù)學(xué)考試題及答案
- 班組長(zhǎng)安全考試題及答案
- 兒童漢字教學(xué)課件
- 2025年金融科技賦能財(cái)富管理新趨勢(shì)下的客戶滿意度分析報(bào)告
- 2025年金融反欺詐技術(shù)革新與大數(shù)據(jù)在欺詐識(shí)別中的實(shí)戰(zhàn)策略報(bào)告
- 葡萄課件教學(xué)目標(biāo)
- DB37-T5311-2025建筑工程消防設(shè)計(jì)文件編制標(biāo)準(zhǔn)
- 成都市高新區(qū)2023年七年級(jí)《歷史》下冊(cè)期末試卷與參考答案
- 中國(guó)上市銀行2024年回顧及未來展望-安永-202505
- TSG Z7002-2022特種設(shè)備檢測(cè)機(jī)構(gòu)核準(zhǔn)規(guī)則
- 裝修售后維修合同協(xié)議
- 2025年數(shù)字經(jīng)濟(jì)下的創(chuàng)業(yè)政策調(diào)整策略試題及答案
- 第30課 在線安全防范-2024-2025學(xué)年三年級(jí)全一冊(cè)《信息技術(shù)》教案
- 政治 (道德與法治)八年級(jí)下冊(cè)自由平等的追求教案
- 山東省濟(jì)南市高新區(qū)學(xué)卷B2024-2025學(xué)年數(shù)學(xué)五下期末教學(xué)質(zhì)量檢測(cè)試題含答案
- 訂單外發(fā)合同協(xié)議
- 山東省2024年藝術(shù)類本科批音樂類第1次志愿投檔情況表(公布)
評(píng)論
0/150
提交評(píng)論