《綜合創(chuàng)新訓練》研究報告(論文)單片機實現(xiàn)數(shù)字電壓表的訓練_第1頁
《綜合創(chuàng)新訓練》研究報告(論文)單片機實現(xiàn)數(shù)字電壓表的訓練_第2頁
《綜合創(chuàng)新訓練》研究報告(論文)單片機實現(xiàn)數(shù)字電壓表的訓練_第3頁
《綜合創(chuàng)新訓練》研究報告(論文)單片機實現(xiàn)數(shù)字電壓表的訓練_第4頁
《綜合創(chuàng)新訓練》研究報告(論文)單片機實現(xiàn)數(shù)字電壓表的訓練_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 單位代碼單位代碼 10006 學學 號號 38153219 分分 類類 號號 密密 級級 綜綜合合創(chuàng)創(chuàng)新新訓訓練練研研究究報報告告 研究題目:研究題目: 單片機實現(xiàn)數(shù)字電壓表的訓練單片機實現(xiàn)數(shù)字電壓表的訓練 完成人: 余武江 院(系):宇航學院 指導教師: 2010 年 12 月 21 日 工程訓練中心 目錄目錄 一一.試驗題目試驗題目 2 二二.實驗要求與任務實驗要求與任務.2 三三.實驗箱、仿真器的用途及使用的簡單說明實驗箱、仿真器的用途及使用的簡單說明.2 四四.實驗電路及說明(硬件設計)實驗電路及說明(硬件設計).3 1.硬件設計方案.3 2.8255 的基本工作原理 .4 3.82

2、55 與單片機的連接及電路譯碼 .6 4.鍵盤與 8255 的連接方式 .6 5.led 的顯示方法及其與 8255 的連接 .7 6.時鐘系統(tǒng)的工作原理及時鐘功能的實現(xiàn)方法.9 7.a/d 的工作原理.10 五五.程序編制及說明。程序編制及說明。 .11 1.主程序設計及說明.11 2.各子程序設計及說明.13 1)校時子程序.13 2)時鐘顯示子程序.14 3)電壓測量子程序.15 4)定時器 1 中斷服務程序.16 5)歡迎界面及班號顯示子程序:.17 六六.程序調試及問題、解決方法程序調試及問題、解決方法 .18 七七.實驗結果及結果分析實驗結果及結果分析.19 八八.結論及創(chuàng)新點結論

3、及創(chuàng)新點.20 九九.簡易數(shù)字電壓表(數(shù)字頻率表)操作手冊簡易數(shù)字電壓表(數(shù)字頻率表)操作手冊.21 附錄:全部程序附錄:全部程序.22 一一. 試驗題目試驗題目 80c196 單片機實驗箱數(shù)字電壓表訓練程序設計與調試 二二. 實驗要求與任務實驗要求與任務 1、熟悉實驗箱上鍵盤、led 顯示器與單片機的電路連接 2、熟悉仿真器的作用及文件建立、現(xiàn)場調試等軟件的使用 3、熟悉 80c196 的匯編語言程序的編制、編譯與調試。 4、完成實驗箱鍵盤上 led 顯示器程序的設計與調試 5、利用 80c196 的定時器完成時鐘程序的調試。 6、完成雙通道數(shù)字電壓表(含時鐘功能)程序的編制與調試。(要求實

4、現(xiàn)鍵 盤的判別及鍵盤數(shù)據(jù)的顯示,a/d 數(shù)據(jù)采集,數(shù)字電壓表的實現(xiàn),要實現(xiàn) 程序的主、從結構,程序調試完成后全速運行中可以任意鍵入鍵盤數(shù)據(jù), 并實時刷新顯示數(shù)據(jù),程序運行過程中不得死機)。通過鍵盤實現(xiàn)時鐘的校 時(校時要求實現(xiàn):小時、分、秒) 、電壓采集通道的轉換、不同功能(時 鐘與電壓表)的切換運行,鍵盤功能利用鍵盤已經提供的 09 數(shù)字鍵和 af 功能鍵自行定義。 7、編制簡易操作手冊 三三. 實驗箱、仿真器的用途及使用的簡單說明實驗箱、仿真器的用途及使用的簡單說明 實驗箱是集單片機應用技術、在線調試、在線仿真等功能于一體的開發(fā) 系統(tǒng)。 仿真器是用以實現(xiàn)硬件仿真的硬件。仿真器可以實現(xiàn)替代單

5、片機對程序 的運行進行控制,例如單步,全速,查看資源斷點等。盡管軟件仿真具有無 需搭建硬件電路就可以對程序進行驗證的優(yōu)點,但無法完全反映真實硬件的 運行狀況,因此還要通過硬件仿真來完成最終的設計。 目前的開發(fā)過程中 硬件仿真是必需的。 本實驗系統(tǒng)包括 aedk196w 仿真機和 exp96 實驗箱。實驗箱自帶電源, 仿真機 aedk196w 由仿真機主機、仿真電纜和仿真插頭三部分組成,可以通 過 exp96 實驗箱上的 xc1 兩芯電源插座供電。進行實驗時,實驗箱需要和仿 真機配合使用。仿真機通過仿真電纜接至實驗箱上的仿真插座。具體參看圖一。 四四. 實驗電路及說明(硬件設計)實驗電路及說明(

6、硬件設計) 1.硬件設計方案硬件設計方案 實驗箱配備了豐富的硬件電路,和詳細的實驗內容,同時模塊化、 積木化 的結構支持用戶自己開發(fā)實驗,以滿足 intel 96 系列單片機教學培訓需要。 硬件的配備使本實驗系統(tǒng)可以工作在二種狀態(tài),使用跳線 xb3(位于實驗 箱右下部)切換: (1)短路套 xb3 打在右端(vcc) ,實驗機上 64k 程序空間完全供用戶 使用。 (2)短路套 xb3 打在左端(gnd) ,實驗機上提供 16kram,3/4k i/o,37.25k rom 空間。 實驗箱電路中各接口芯片占用單片機地址如下: rom(27512)空間地址: 00000bcffh ram(626

7、4) 空間地址: 0c0000ffffh d/a 轉換芯片 0832 片選地址:0bd000bdffh 并行擴展芯片 244 : 0be000beffh 并行擴展芯片 8255 的 pa 口地址: 0bf00h 并行擴展芯片 8255 的 pb 口地址: 0bf02h 并行擴展芯片 8255 的 pc 口地址: 0bf04h 并行擴展芯片 8255 的控制寄存器地址:0bf06h 仿真器中晶體振蕩器參數(shù): 晶體振蕩器:11.0592mhz 仿真器在進行系統(tǒng)初始參數(shù)設置時,按以下數(shù)據(jù)進行設置: 1、cpu 類型:缺?。?0c196kb) 總線寬度:8 位 ale 管腳:ale 2、仿真器:aed

8、k96w 3、通訊:com1 2.8255 的基本工作原理的基本工作原理 8255 在單片機應用系統(tǒng)中被廣泛用于可編程外部 i/o 擴展接口使用 其構成(見圖 2): 數(shù)據(jù)總線緩沖(驅動)器:用于和單片機的數(shù)據(jù)總線(d-bus)連接, 1 以實現(xiàn)單片機與 8255 芯片的數(shù)據(jù)傳送。 并行 i/o 接口:8 位的 abc 口。這三個 8 位 i/o 接口功能通過編程決 2 定其輸入/輸出功能 讀/寫控制邏輯,用于管理 8255 所有數(shù)據(jù)、控制字、狀態(tài)字的傳送。 3 :片選控制, =0: 8255 選通 :讀控制, =0:允許單片機從 8255 讀取各口數(shù)據(jù)或狀態(tài)字 :寫控制, =0:允許單片機向

9、 8255 各口寫入數(shù)據(jù)或向控制寄 存器寫入命令字 a0 a1 口地址選擇 0 0 選通寄存器 a(a 口) 0 1 選通寄存器 b(b 口) 1 0 選通寄存器 c(c 口) 1 1 控制寄存器(控制口) reset:復位引腳,reset=1 8255 復位,控制寄存器清零,所有接口 (a、b、c)被設置為輸入方式 圖 2 8255 芯片組成結構圖 圖 3 8255 的控制字 圖 4 8255 芯片與 cpu 的連接 3.8255 與單片機的連接及電路譯碼與單片機的連接及電路譯碼 8255 占用 cpu 的地址如下 : pa8255 equ 0bf00h ;8255 的 pa 口地址 pb8

10、255 equ 0bf02h ;8255 的 pb 口地址 pc8255 equ 0bf04h ;8255 的 pc 口地址 c8255 equ 0bf06h ;8255 的控制字地址 4.鍵盤與鍵盤與 8255 的連接方式的連接方式 實驗箱上由 16 個鍵構成了鍵盤,該 16 個鍵分別與 8255 的 pb 口及 pc0、pc1 連接。其中, pb 口用于讀入鍵值,稱為行線,pc 口用于輸出鍵盤 掃描信號,稱為列線。 (見圖 6) 當 pc0、pc1 輸出均為 1,鍵盤封鎖 當 pc0、pc1 分別為 0,則可掃描鍵盤。通過 pb 口讀入數(shù)據(jù),判斷所操作 的鍵值。 pc0=0 pc1=1 p

11、b0pb7 分別為 0,表示所操作的鍵碼為 07 鍵 pc0=1 pc1=0 pb0pb7 分別為 0,表示所操作的鍵碼為 8f 鍵 鍵碼組合關系如下: 00000010b 11111110b ( 02h feh) 0 00000010b 11111101b ( 02h fdh) 1 00000010b 11111011b ( 02h fbh) 2 00000010b 11110111b ( 02h f7h) 3 00000010b 11101111b ( 02h efh) 4 00000010b 11011111b ( 02h dfh) 5 00000010b 10111111b ( 02h

12、 bfh) 6 00000010b 01111111b ( 02h 7fh) 7 00000001b 11111110b ( 01h feh) 8 00000001b 11111101b ( 01h fdh) 9 00000001b 11111011b ( 01h fbh) a 00000001b 11110111b ( 01h f7h) b 00000001b 11101111b ( 01h efh) c 00000001b 11011111b ( 01h dfh) d 00000001b 10111111b ( 01h bfh) e 00000001b 01111111b ( 01h 7f

13、h) f 5.led 的顯示方法及其與的顯示方法及其與 8255 的連接的連接 試驗箱采用共陰 led 數(shù)碼管: 圖 5 七段 led 顯示塊 如圖 6 所示,8255 芯片的 pa 口與各個 led 段碼引腳連接(pa0pa7 連 接 led dpa ) ,由此產生的數(shù)碼管字形表為: 顯示字符 0 1 2 3 4 5 6 7 段選碼 3fh 06h 5bh 4fh 66h 6dh 7dh 07h 顯示字符 8 9 a b c d e f 段選碼 7fh 6fh 77h 7ch 39h 5eh 79h 71h 6.時鐘系統(tǒng)的工作原理及時鐘功能的實現(xiàn)方法時鐘系統(tǒng)的工作原理及時鐘功能的實現(xiàn)方法 (

14、1)基本功能工作原理: 系統(tǒng)利用計數(shù)器 1 溢出中斷實現(xiàn)時鐘功能。 計數(shù)器 1 的計數(shù)脈沖來自對 ts 進行八分頻的電路。計數(shù)器在系統(tǒng)上電 后便自由運行,當計數(shù)器計滿產生溢出后,ios1.5 置“1” ( ios1.5 =1) , 讀 ios1.5 一次,ios1 與時間有關的各個標志清“0” ,同時溢出信號還可申 請定時器中斷。 定時器 1 溢出中斷參數(shù)計算如下: 計算每次溢出所需時間 t=(2*8/11.059)*65536 us=94.8165ms 計算每秒的溢出次數(shù) n=1000ms/94.8165ms=10.55 程序中,定義一個名為 t_buf 的六字節(jié)十進制時鐘數(shù)據(jù)存儲區(qū),一個

15、名為 dis_buf 的 8 字節(jié)顯示緩存區(qū),s_buf、m_buf、h_buf 分別為秒、分、 時二進制數(shù)據(jù)存放單元。程序運行時,定時器 1 每中斷 11 次,使秒單元加 1;秒單元每增加 60 次,使分單元加 1,同時秒單元清零;分單元每增加 60 次,使時單元加 1,同時分單元清零;時單元每增加 24 次(12 次)清零。 每次中斷,均將 s_buf、m_buf、h_buf 的值經過二十進制轉換為十進制, 存入 t_buf 中。將 t_buf 的值依次取出,在 table 中尋找其相應的顯示代碼, 并送入 dis_buf 中,再經過顯示移位,送至 8255a 口,再通過對 8255c 口

16、 的動態(tài)掃描實現(xiàn)時鐘的動態(tài)顯示。 (2)校時原理: 圖 6 鍵盤及 led 顯示管與 8255 的連接 圖 7 計數(shù)器 1 原理圖 校時用到 6 鍵及 7 鍵。6 鍵實現(xiàn)時鐘秒單元、分單元、時單元的轉換, 7 鍵實現(xiàn)對應單元具體值的調整。在主程序中不斷掃描是否按下 6 鍵,若按 下 6 鍵,進入校時子程序,關中斷。此時對應秒單元的調整,6 鍵繼續(xù)按下 1、2、3 次,分別對應調整分單元、調整時單元以及跳出校時,開中斷顯示 時鐘。在相應調整單元每按下 7 鍵一次,相應單元二進制寄存器 (s_buf,m_buf,h_buf)加 1。 7.a/d 的工作原理的工作原理 將被測的外部模擬信號轉換為計算

17、機所能接受的數(shù)字量。 (如圖 8) 8098 集成 a/d 轉換器是 8 通道 10 位逐次逼近 a/d 轉換器由一個 8 通 道的模擬多路轉換開關、一個采樣/保持電路、一個 10 位逐次逼近型 a/d 轉換器、a/d 命令寄存器、a/d 結果寄存器等組成。在 80196 中,該 a/d 轉換器還可以選擇 8 位與 10 位精度兩檔。 a/d 轉換器的模入通道與 p0.0p0.7 共享。a/d 轉換可以通過 hso 命 令選擇 f、通道或將 a/d 命令寄存器 ad_command(02h)的 go 位置 1 的辦法來啟動。 在實驗中,程序將通道采集的十六進制轉化為以 mv 為單位的十進制 數(shù)

18、值。原理為:標準電壓 vref(4710mv)經過內部的 256 個梯形電阻網絡分 壓(20mv) ,再經過電容分壓至 1024 個標準電壓( 4.6mv)。 啟動 a/d 轉換后,經過 88 個狀態(tài)周期(ts),完成轉換并將轉換碼存入 ad 結果單元。 ad 的分辨率=vref/1023 被測電壓計算: vin= ad 的分辨率*n =(vref/1023)*n(n 為從 a/d 結果寄存器中取出 的結果) 轉換時間:88ts 圖 8 a/d 轉換原理圖 五五. 程序編制及說明程序編制及說明。 1.主程序設計及說明主程序設計及說明 功能說明: 時鐘程序:進行初始化,開放定時器 1 溢出中斷,

19、運行歡迎界面 (hello)子程序,并提供功能鍵的掃描。當 c 鍵按下時,運行 24 小時 制時鐘子程序;當 6 鍵按下,進入時鐘設置子程序,設置完需退出校時子 程序;當 1 或 2 鍵按下時,運行電壓測量子程序,分別測量 ach6 和 ach7 兩個通道電壓值,此時若按下 3 鍵,則實現(xiàn) ach6 和 ach7 通道的 巡檢,交替顯示兩通道的電壓值;當 0 鍵按下時,顯示班號 381532。 流程圖:(見下頁) 初初始始化化 鍵鍵盤盤掃掃描描 是是否否有有鍵鍵按按下下 是是 是是0 0按按下下嗎嗎? m m= =1 1, ,n n= =1 1, ,n nn n= =0 0 m m= =0 0

20、, ,n n= =0 0? ?m m= =0 0, ,n n= =1 1? ?m m= =1 1, ,n n= =0 0? ? 是是 否否否否否否否否 調調用用歡歡迎迎界界面面子子程程序序調調用用電電壓壓測測量量子子程程序序調調用用時時鐘鐘顯顯示示程程序序調調用用班班號號顯顯示示程程序序 是是是是是是 是是1 1, ,2 2按按下下 嗎嗎? 是是c c按按下下嗎嗎?是是6 6按按下下嗎嗎? 否否 否否 否否 m m= =0 0, ,n n= =1 1, ,n nn n= =0 0 m m= =1 1, ,n n= =0 0, ,n nn n= =0 0 跳跳至至調調整整子子程程序序 是是 是是

21、 是是 m m= =1 1,n n= =0 0, ,n nn n= =0 0 否否 設設置置堆堆棧棧指指針針 內內存存單單元元清清零零;標標志志位位m,n,nn清清零零 8 82 25 55 5初初始始化化 主主程程序序 是是3 3按按下下嗎嗎? 否否 m m= =0 0, ,n n= =1 1, ,n nn n= =1 1 2.各子程序設計及說明各子程序設計及說明 1) 校時子程序 校時子程序功能說明:校時過程中中斷關閉,通過按鍵 6 進行選位, 通過按鍵 7 對所選位進行加 1 調整。第三次按 6 鍵時確認修改,重新開中 斷,在輸入數(shù)值的基礎上運行時鐘程序。 校時程序 是否有鍵輸入 是6按

22、下嗎?是7按下嗎? 調用時鐘顯示子 程序 關中斷,令x=1 x=x+1 x=4? 跳回主程序 x=1? 秒單元二進制寄 存器自加1 x=2? 分單元二進制寄 存器自加1 時單元二進制寄 存器自加1 否 是 是否 否 否 否 是 2) 時鐘顯示子程序 功能說明:將時鐘十進制數(shù)值送入顯示緩沖區(qū),尋找各自相應的顯示 代碼,經過顯示移位,通過對 8255a 口和 c 口的控制,實現(xiàn)動態(tài)顯示時鐘 基本功能。 時時鐘鐘顯顯示示 子子程程序序 將將二二進進制制時時、分分、秒秒單單元元 ( (s s_ _b bu uf f, ,m m_ _b bu uf f, ,h h_ _b bu uf f) )的的數(shù)數(shù)轉

23、轉換換成成 b bc cd d碼碼 將將t t_ _b bu uf f中中的的數(shù)數(shù)通通過過t ta ab bl le e列列 表表一一一一對對應應,存存入入緩緩存存區(qū)區(qū) d d_ _b bu uf f中中 用用8 82 25 55 5動動態(tài)態(tài)顯顯示示顯顯示示代代碼碼存存 放放緩緩沖沖區(qū)區(qū)中中的的內內容容 將將相相應應b bc cd d碼碼送送至至十十進進制制數(shù)數(shù) 時時、分分、秒秒單單元元t t_ _b bu uf f 將將d d_ _b bu uf f中中的的數(shù)數(shù)通通過過 移移位位(57 7、4 46 6、3 35 5、2 24 4)送送至至d di is s_ _b bu uf f 中中,同

24、同時時送送“”顯顯示示代代碼碼到到其其第第2、5位位 r re et t 3) 電壓測量子程序 功能說明:將 a/d 采集到的電壓數(shù)值顯示在低五位的顯示器,同時判 定所采集的通道號,顯示在最高位顯示器上。 流程圖:(見下頁) 電電壓壓測測量量 子子程程序序 開開a ad d轉轉換換,選選擇擇 按按鍵鍵相相應應通通道道 n nn n= =1 1? a ad d轉轉換換是是否否完完 成成 跳跳至至主主程程序序 定定時時改改變變a ad d轉轉換換 通通道道實實現(xiàn)現(xiàn)巡巡檢檢功功 能能 調調用用電電壓壓顯顯示示子子 程程序序 讀讀a ad d轉轉換換結結果果 處處理理轉轉換換結結果果送送 至至h hs

25、 si ir re es s 是是 否否 否否 是是 4) 定時器 1 中斷服務程序 功能說明:定時器 1 每 94.8165ms 中斷一次,每中斷 11 次秒單元加 1,秒 單元每增加 60 次分單元加 1,分單元每增加 60 次時單元加 1,時單元分增加 24 次清零。從而實現(xiàn)時鐘基本功能 。 定定時時器器1 1中中斷斷 服服務務程程序序 保保護護現(xiàn)現(xiàn)場場 重重裝裝定定時時器器1命命 令令、數(shù)數(shù)據(jù)據(jù) 時時鐘鐘計計數(shù)數(shù)器器減減 1=0? 計計數(shù)數(shù)器器重重賦賦初初值值 秒秒單單元元加加1 =60? 秒秒單單元元清清0 分分單單元元加加1 =60? 分分單單元元清清0 時時單單元元加加1 1 =

26、24? 時時、分分、秒秒單單元元 清清零零 恢恢復復現(xiàn)現(xiàn)場場 秒秒單單元元數(shù)數(shù)據(jù)據(jù) 二二十十轉轉換換 分分單單元元數(shù)數(shù)據(jù)據(jù) 二二十十轉轉換換 時時單單元元數(shù)數(shù)據(jù)據(jù) 二二十十轉轉換換 中中斷斷返返回回 是是 否否 是是 是是 是是 否否 否否 否否 5) 歡迎界面及班號顯示子程序: 功能說明:當單片機最初運行時顯示“hello”歡迎界面,當按下 0 鍵時 顯示班號 381532。 歡歡迎迎界界面面 子子程程序序 將將字字符符h he el ll lo o的的顯顯示示代代 碼碼送送入入顯顯示示緩緩存存區(qū)區(qū) 選選擇擇8 82 25 55 5初初始始顯顯示示 位位 初初始始化化8 82 25 55 5

27、 循循環(huán)環(huán)掃掃描描h he el ll lo o顯顯示示代代碼碼的的每每一一 位位,同同時時逐逐位位改改變變顯顯示示位位 8 82 25 55 5初初始始顯顯示示位位加加1 1 跳跳回回主主程程序序 顯顯示示班班號號 子子程程序序 將將字字符符3 38 81 15 53 32 2的的顯顯示示代代 碼碼送送入入顯顯示示緩緩存存區(qū)區(qū) 選選擇擇8 82 25 55 5初初始始顯顯示示 位位 初初始始化化8 82 25 55 5 循循環(huán)環(huán)掃掃描描3 38 81 15 53 32 2顯顯示示代代碼碼的的每每 一一位位,同同時時逐逐位位改改變變顯顯示示位位 8 82 25 55 5初初始始顯顯示示位位加加

28、1 1 跳跳回回主主程程序序 六六. 程序調試及問題、解決方法程序調試及問題、解決方法 1.顯示子程序調試問題分析:顯示子程序調試問題分析: (1) 在 key_led 子程序中,若延時過短,顯示亮度高,但是數(shù)碼無法辨 認,無法讀數(shù);若延時過長,顯示亮度低,閃爍嚴重,顯示不清晰。 我們經過反復的調整,找到了一個合適的延時時間,使顯示碼清晰可 辨,而且穩(wěn)定,亮度適宜。 (2) 在校時子程序中,延時不僅影響顯示,而且,將影響輸入值的采集。 延時過短,鍵盤掃描過快,一次可能輸入幾位;延時過長掃描過慢, 需按下鍵較長時間才能響應。所以我們在每次大循環(huán)當中,利用多次 調用顯示子程序,使顯示清晰,同時由于

29、顯示子程序占用了一次大循 環(huán)的大部分時間,鍵盤掃描的時間間隔也變得更加適宜,可謂是一箭 雙雕! (3) 由于 a/d 轉換過快,電壓采集值也變化很快,造成電壓的低位顯示 不穩(wěn)定,處于不斷改變的狀態(tài),可以適當增加延時時間或取平均值, 最后多調用顯示程序,這樣既保證了穩(wěn)定性,又保證了顯示亮度。 2.歡迎界面及班號顯示問題分析:歡迎界面及班號顯示問題分析: (1) 要實現(xiàn) hello 及 381532 兩個代碼在數(shù)碼管上的循環(huán)移位顯示的動 態(tài)效果,就是要實現(xiàn)數(shù)碼管位選和數(shù)碼管段選的同時變化。這是我們 亟待解決的技術問題。 (2) 為此我們先將要顯示的字符所對應的顯示代碼存放在顯示緩存區(qū)中, 然后依次

30、將顯示緩存區(qū)中的代碼送至 8255a 端口,同時將 8255 位選 即 c 端口逐次加上 20h,以實現(xiàn)移位,這樣就實現(xiàn)了代碼的一次掃描 顯示。 (3) 當再次掃描時,我們將位選的初始位在上一次的基礎上右移一位,再 次掃描顯示緩存區(qū)中的內容。周而復始,即可實現(xiàn) hello 及 381532 的動態(tài)移位顯示。 3.電壓巡檢子程序中的問題分析:電壓巡檢子程序中的問題分析: (1) 為實現(xiàn)電壓巡檢功能,需定時交替掃描 ach6 與 ach7 兩個通道的電壓 值,這就要求定時改變 a/d 通道,即改變 a/d 通道選擇寄存器的值, 同時在改變顯示的通道號。 (2) 我們通過設置巡檢標志寄存器 nn,在

31、未開啟巡檢功能時 nn=0,而開 啟后 nn=1。在主程序中,當檢測到 nn=1 時,則顯示某一通道一定 時間后切換到另一通道,如此往復。 七七. 實驗結果及結果分析實驗結果及結果分析 1.標準數(shù)據(jù)與測量數(shù)據(jù)表(電壓表):標準數(shù)據(jù)與測量數(shù)據(jù)表(電壓表): 測量電壓誤差 序號 標準電壓 (mv) ach6ach7ach6ach7 備注 100000最小測量值 2172151161-12.21%-6.40% 3916896906-2.18%-1.09% 4149814791489-1.27%-0.60% 5211020922107-0.85%-0.14% 6260025772592-0.88%-0

32、.31% 7308030473062-1.07%-0.58% 8356035323547-0.79%-0.37% 9409040674086-0.56%-0.10% 104710472347330.28%0.49%最大測量值 2.誤差分析:誤差分析: 整體上看,電壓較低時,誤差相對較大,電壓較高時,誤差相對較小, 測量精度較高。 誤差來源主要有三方面,首先是系統(tǒng)誤差,這主要由 a/d 轉換自身的 誤差決定,無法消除;其次是由 a/d 基準電壓不是標準的 5.12v 所致,若 輸入為 5.12v,則輸入電壓計算公式為:vin= 5120/1023*n(n 為從 a/d 結 果寄存器中取出的結果)

33、 ,理論 a/d 的分辨率約為 5mv,但若實際的 a/d 參考電壓與標準值相差較大時就會帶來較大的誤差,這一誤差可通過測量 真實的參考電壓,求得實際的分辨率來提高精度;最后一點是測量儀器 (數(shù)字電壓表)本身存在誤差,這一誤差也無法消除。 最后我們還通過更改不同的分辨率來測量輸入電壓,再將其與實驗測量 值進行比較和校正,從而尋找到最佳的分辨率。 八八. 結論及創(chuàng)新點結論及創(chuàng)新點 1.課題完成情況課題完成情況 我們圓滿完成了要求的所有任務,并且加入了要求之外的一些功能, 同時還對整個系統(tǒng)進行了多次改進和優(yōu)化,用較少數(shù)目的按鍵實現(xiàn)了所有 功能,并且各按鍵功能獨立,互不干擾,這樣既提高了按鍵的利用率

34、,又 有利于系統(tǒng)的進一步擴展。除此之外,我們還編寫了多位數(shù)輸入右移顯示 的小程序。 2.課題創(chuàng)新點或新思路課題創(chuàng)新點或新思路 (1) 程序的歡迎界面 (2) 電壓的雙通道獨立測量和巡檢 (3) 校時的同步顯示調整 (4) 各功能鍵相互獨立,互不干擾 (5) 按鍵數(shù)目少,鍵的利用率高 3.目前存在的問題及解決的方案目前存在的問題及解決的方案 存在問題: (1) 校準時間時還不能很直觀的看出是對哪個單元進行更改 (2) 電壓顯示尚不夠穩(wěn)定,波動較大 解決方案: (1) 在調整相應單元時,相應單元閃爍 (2) 取多次電壓值的平均值 1.收獲與體會收獲與體會 經過將近一個學期的學習,我們的程序終于臻于

35、完善。作為第一次接 觸單片機的實際應用,我們磕磕絆絆地走過來,經歷了很多很多的坎坎坷 坷,從對單片機的一無所知到似乎已經開始入門,我們克服很多困難,也 因此收獲巨大。 由于大二的時候學習了足夠多的數(shù)字電路知識,我們本學期也同時學 習微機原理,所以理解單片機的理論知識并不太難,而由理論進入編程, 用了太長的時間。起初的幾個周,我們主要鍛煉一些小程序,對比著實驗 指導書,我們從第一個實驗做起,一點一點摸索,當又一個小程序成功寫 出,當又一個流程圖從手中畫出,當實驗目的成功被達到,我們都被這一 個一個小小的勝利鼓舞。第一個實驗程序是最艱辛的,就像所有的事情, 第一步總是最難的,而當我們做到時,后面的

36、就容易了很多。 編程的時候,首先要把思路認清。在我們編寫校時子程序的時候,由 于剛開始沒有將時鐘程序的原理弄清楚,白費了一上午的時間,后來仔細 地學習了程序原理,將思路弄清楚,畫出大致流程圖,程序很快就出來了。 最重要的是耐心和細心。在編寫電壓程序的時候,我們決定采用中斷 法。程序的草稿很快出來了,但運行后顯示數(shù)值總不能隨外部電壓動態(tài)變 化,這個問題折磨了我們兩天,就在筋疲力盡就要放棄時,忽然發(fā)現(xiàn)進入 中斷后沒有 pushf修改之后,問題迎刃而解。 我在期間得到的最大教訓是:有一些細節(jié)的東西必須注意到,否則可 能擾亂整個程序。例如:地址的存放占據(jù)一個字的空間;如果 a/d 中服程 序如果有 p

37、ushf,那么同時也關閉了軟件定時器的中斷;調用子程序 (lcall 或 scall)必須有 ret 和它配套;堆棧時注意“先進后出”這些都 讓我們或多或少的吃了點虧,也因此記憶深刻,牢牢掌握。 團隊精神發(fā)揮著很大的作用。盡管大家原來都沒有學過,但一起來摸 索,一方面可以想得更詳細,更周到,可以產生更多的想法和思路;一方 面也能相互鼓勵,尤其在檢查程序的時候,一個人做很容易有挫敗感。 不管怎么說,我們最終實現(xiàn)了程序要求的所有功能,可謂圓滿完成任 務。這次學習經歷使我進一步接觸了實踐操作,更為以后更深層次的操作 打下了基礎。雖然還有很多路要有,但我更有自信。 感謝陳老師耐心的教導,深入淺出的教學

38、使我能抓住重點,在我們程 序毫無頭緒時給予關鍵的指點。 九九. 簡易數(shù)字電壓表(數(shù)字頻率表)操作手冊簡易數(shù)字電壓表(數(shù)字頻率表)操作手冊 運行程序后,顯示歡迎界面“hello” 。 說明 按鍵 功能備注 0按下后動態(tài)移位顯示班號 381532 1按下后顯示 ach6 通道的輸入電壓值 2按下后顯示 ach7 通道的輸入電壓值 3按下后實現(xiàn) ach6 與 ach7 雙通道巡檢 6 按下后進入校時環(huán)節(jié),此時選通秒單元,每按 下 7 鍵一次,秒單元加一;再次按下 6 鍵 1、2、3 次分別對應選通分單元、選通時單元、 返回時鐘顯示,7 鍵的功能同上。 c按下后顯示時間 除 7 鍵外各按 鍵功能獨立,

39、且可 實現(xiàn)任意功能間的 切換(校時環(huán)節(jié)需 先完成時間設置) , 時鐘可由按下 c 鍵 或通過校時開啟, 一旦開啟便一直運 行。 附錄:全部程序附錄:全部程序 cpu 80c196kb ax equ 20h al equ 20h ah equ 21h bx equ 22h bl equ 22h bh equ 23h cx equ 24h cl equ 24h ch equ 25h dx equ 26h dl equ 26h dh equ 27h ex equ 28h el equ 28h eh equ 29h fx equ 2ah fl equ 2ah fh equ 2bh gx equ 5ah

40、 gl equ gx gh equ gx+1 hx equ 5ch hl equ hx hh equ hx+1 ix equ 5eh il equ ix ih equ ix+1 lx equ 60h ll equ lx lh equ lx+1 kx equ 62h kl equ kx kh equ kx+1 count3 equ 6ah ;通用計數(shù)器 3 count4 equ 6bh ;通用計數(shù)器 4 t_count equ 6ch ;定時計數(shù)器 t_vt equ 11 ;t11秒=11 dis_buf_p equ 70h ;顯示代碼存放緩沖區(qū) d_buf equ 80h t_buf equ

41、8ah s_buf equ 90h ;二進制數(shù)秒單元 m_buf equ 91h ;二進制數(shù)分單元 h_buf equ 92h;二進制數(shù)時單元 dt equ4ch;延時系數(shù) bcdequ 0c00eh;bcd 碼存放地址 tableequ 0c014h;段碼存放地址 hsires equ 0c00ah ;ad 計算結果(二進制) hsireshequ 0c00ch pa8255equ 0bf00h;8255 的 pa 口地址 pb8255equ 0bf02h;8255 的 pb 口地址 pc8255equ 0bf04h;8255 的 pc 口地址 c8255 equ0bf06h;8255 的控

42、制字地址 ;*變量* count2equ 30h adselequ 50h;ad 轉換通道選擇變量 ledselequ4fh;led 掃描顯示位選變量 channal equ 4bh;顯示通道號 tspequ48h;tsp 地址不能為 4ah sp1equ 46h;段碼查找時的段碼地址偏移量 adkeyequ2ch;ad 轉換開關標志 ddtt equ 32h nequ 34h m equ 35h xequ36h yequ37h zequ38h zzequ39h mmequ40h nnequ42h org 2000h ;定時器中斷向量 dw 2800h ;*初始化* org2080h ldsp

43、,#0ffh;設堆棧指針首地址 ldax,#c8255;8255 初始化. ldbbl,#82h;a,b,c 口均工作在方式 0 stbbl,ax;寫 8255 控制字 ldbcl,#1 stbcl,pc8255 ldcx,#hsires;hsires 存儲區(qū)清零 lddx,#0 ldex,#0 stdx,cx+ stex,cx ldbledsel,#0 ldbddtt,#0 ldbn,#0 ldbm,#0 ldbx,#1 ldbz,#0 ldnn,#0 ldmm,#0 clrbadkey;清 ad 轉換開關標志 ;*主程序* main: addb zz,#1 cmpb zz,#0ffh je

44、resetz ldbah,pc8255;讀 pc 口狀態(tài) xorb ah,#3;pc1,pc0 兩位進行異或 stbah,pc8255;鍵盤掃描移位 ldbal,pb8255;讀 pb 口狀態(tài) cmpb al,#0ffh;是否有鍵按下? jenext2;否,轉到 next2 ldbal,pb8255;讀 pb 口狀態(tài) ldbah,pc8255;讀 pc 口狀態(tài) andb ah,#3;提取鍵碼 cmpax,#02fdh;是1鍵按下嗎? jek1;是,轉去 k1 cmpax,#02fbh ;是2鍵按下嗎? jek2;是,轉去 k2 cmpax,#02f7h;是3鍵按下嗎? jek3;是,轉去 k3

45、 cmpax,#01efh;是c鍵按下嗎? jekckc;是,轉去 kc cmpax,#02bfh;是6鍵按下嗎 jeclkt;是,轉去 clk_set cmpax,#02feh;是0鍵按下嗎 jekbkb;是,轉去 kb sjmpnext2;跳轉到 next2 kckc:ljmpkc kbkb:ljmpkb clkt: ljmpclk_set resetz: ldbz,#0 sjmpmain k1:ldnn,#0 ldbm,#0 ldbn,#1 lcall key1;調用 key1 子程序 sjmpnext2;跳轉到 next2 k2:ldnn,#0 ldbm,#0 ldbn,#1 lcal

46、l key2;調用 key2 子程序 sjmpnext2 k3:ldnn,#1 ldbm,#0 ldbn,#1 lcall key1 sjmpnext2 next2: cmpb n,#1 jnedis_play cmpb m,#1 jedis_play2;顯示 38153219-26 lcall display;調用電壓顯示子程序 cmpb adkey,#1;ad 轉換開關標志=1 嗎? jnemaint;否,跳轉到 main cmpnn,#1 jechancha next2_2: ldbal,ad;是,讀 ad 轉換結果的低 8 位 jbsal,3,maint;ad 轉換完嗎?否,跳轉到 m

47、ain ldbah,adh;是,讀 ad 轉換結果的高 8 位 shrax,#6;ad 轉換結果右移 6 位 mulu ax,#49;計算電壓值 clrbx divax,#10 stax,hsires;電壓值存入 hsires 存放區(qū) str0,hsiresh;hsires 存放區(qū)的高 16 位為 0 ldbadcom,adsel;再次開動 ad 轉換 sjmpmain;跳轉到 main dis_play2: scall display3 sjmpmain dis_play: cmpb m,#1 jeloopswitch;clock 顯示子程序 scall display1;hello 子程序

48、 sjmpmain loopswitch: ljmploop1 chancha: addmm,#1 cmpmm,#1ffh jnenext2_2 sjmpkeykey keykey: ldmm,#0 xoradsel,#00000001b cmpb channal,#60h jesetchannal ldbchannal,#60h sjmpnext2_2 setchannal: ldbchannal,#0dah sjmpnext2_2 maint: ljmpmain kc:orb ioc1,#04h ;接通 t1 中斷源 clrb int_pending ldb int_mask,#01h;開

49、放 t1 中斷 ei ldnn,#0 ldbz,#0 cmpb n,#0 jnekc_dis cmpb m,#1 jekc_dis;跳轉 keyc 子程序 ljmpclock kc_dis: ljmploop1 kb:ldnn,#0 ldbm,#1 ldbn,#1 sjmpnext2 ;*時鐘設置子程序* clk_set: cmpb z,#1 jenextnext di ldby,#035h ldbah,pc8255;讀 pc 口狀態(tài) xorb ah,#3;pc1,pc0 兩位進行異或 stbah,pc8255;鍵盤掃描移位 ldbal,pb8255;讀 pb 口狀態(tài) cmpb al,#0ff

50、h;是否有鍵按下? jedis_p2;否,轉到 next2 ldbal,pb8255;讀 pb 口狀態(tài) ldbah,pc8255;讀 pc 口狀態(tài) andb ah,#3;提取鍵碼 cmpax,#02bfh;是6鍵按下嗎? jek6;是,轉去 k6 cmpax,#027fh ;是7鍵按下嗎? jek7;是,轉去 k7 nextnext: ljmpnext2 dis_p2: lcall display2 lcall delay1 djnzy,dis_p2 sjmpclk_set k6:cmpb x,#3 jeback addb x,#1 sjmpclk_set back:ldbx,#1 ldbz,

51、#1 ldbzz,#0 orb ioc1,#04h ;接通 t1 中斷源 clrb int_pending ldb int_mask,#01h;開放 t1 中斷 ei ljmploop1 k7:cmpb x,#4 jeback cmpb x,#1 jeset_s cmpb x,#2 jeset_m cmpb x,#3 jeset_h set_s: addb s_buf,#1 cmpb s_buf,#60 jne change1 ldbs_buf,#0 st0h,t_buf sjmpclk_set set_m: addb m_buf,#1 cmpb m_buf,#60 jne change2 l

52、dbm_buf,#0 st0h,t_buf+2 sjmpclk_set set_h: addb h_buf,#1 cmpb h_buf,#24 jne change3 ldbh_buf,#0 st0h,t_buf+4 sjmpclk_set change1: ldb ll,s_buf clrb lh ld gx,#d_buf lcall b_d_ih ld gx,#d_buf ld hx,#t_buf ldb il,gx+ stb il,hx+ ldb il,gx stb il,hx sjmpclk_set change2: ldb ll,m_buf ;分單元數(shù)據(jù)二-十轉換并存入 t_buf

53、clrb lh ld gx,#d_buf lcall b_d_ih ld gx,#d_buf ld hx,#t_buf add hx,#2 ldb il,gx+ stb il,hx+ ldb il,gx stb il,hx sjmpclk_set change3: ldb ll,h_buf ;時單元數(shù)據(jù)二-十轉換并存入 t_buf clrb lh ld gx,#d_buf lcall b_d_ih ld gx,#d_buf ld hx,#t_buf add hx,#4 ldb il,gx+ stb il,hx+ ldb il,gx stb il,hx sjmpclk_set ;*clock 子

54、程序* clock: lcall clr_ram ld hx,#0bf06h ;設置 8255 工作方式 ldb gl,#82h stb gl,hx nop ldb t_count,#t_vt ;t1 溢出次數(shù) loop1:ldbn,#0 ldbm,#1 lcall display2 ljmp main ;*顯示子程序* display: lcall btobcd;二進制轉換成 bcd 碼 lcall bcdtol;bcd 碼轉換成段碼 ldbal,pc8255;讀 pc 口 andb al,#03h;高 3 位清零,pc0,pc1 位不變 ldbledsel,al;指向最右一個 led ld

55、btsp,#0;指向第一個顯示段碼 ldbcl,#8;led 掃描次數(shù)=8 loop: ldbbl,#0;bl=0 ldax,#pa8255 stbbl,ax;滅 led ldax,#pc8255 stbledsel,ax;送出 led 位選 ldax,#pa8255 ldbbl,tabletsp;取段碼放入 bl stbbl,ax;送出段碼 lcall delay;延時(約 1ms) decbcl;是否掃描完? jemain1;是,轉到 main addb ledsel,#00100000b;否,位選左移一位 incbtsp;取下一段碼 sjmploop;繼續(xù)顯示下一個 led main1:

56、ret ;*顯示子程序 hello* display1: ldbtsp,#14;指向第一個顯示段碼 ldbcl,#5;led 掃描次數(shù)=8 addb ddtt,#1 cmpb ddtt,#4fh jneloop2 ldbddtt,#0 addb ledsel,#21h loop2: ldbbl,#0 ldax,#pa8255 stbbl,ax;滅 led ldax,#pc8255 stbledsel,ax;送出 led 位選 ldax,#pa8255 ldbbl,ledtsp;取段碼放入 bl stbbl,ax;送出段碼 lcall delay;延時(約 1ms) decbcl;是否掃描完?

57、jemain2;是,轉到 main addb ledsel,#20h;否,位選左移一位 decbtsp;取下一段碼 sjmploop2;繼續(xù)顯示下一個 led main2: subbledsel,#80h ret ;*顯示子程序 38153219-25* display3: ldbtsp,#20;指向第一個顯示段碼 ldbcl,#6;led 掃描次數(shù)=8 addb ddtt,#1 cmpb ddtt,#8fh jneloop3 ldbddtt,#0 addb ledsel,#21h loop3: ldbbl,#0 ldax,#pa8255 stbbl,ax;滅 led ldax,#pc8255

58、 stbledsel,ax;送出 led 位選 ldax,#pa8255 ldbbl,ledtsp;取段碼放入 bl stbbl,ax;送出段碼 lcall delay;延時(約 1ms) decbcl;是否掃描完? jemain3;是,轉到 main addb ledsel,#20h;否,位選左移一位 decbtsp;取下一段碼 sjmploop3;繼續(xù)顯示下一個 led main3: subbledsel,#0a0h ret ; *延時子程序* delay: lddt,#420;循環(huán)次數(shù)=420 dloop:nop;(2+2+9)*420*0.182=1ms nop djnzdt,dloo

59、p;dt-1=0 嗎?否,繼續(xù)循環(huán) ret;返回 delay1: ld dx,#0fh delay3:lddt,#0fh ;延時子程序 delay2: dec dt jnedelay2 decdx jne delay3 ;若 z=0,轉移 ret ;*b to bcd 轉換子程序* btobcd: clrbcount2;清十進制結果位數(shù)記錄變量 ldax,#hsires ldex,ax+;低 16 位送到 ex ldfx,ax;高 16 位送到 fx ldax,#bcd bloop:ldcx,fx;fx 放入 cx clrdx;高 16 位擴展成 32 位 divucx,#10;dx,cx 組

60、成的 32 位除以 10 ldfx,dx;余數(shù)存入 fx divuex,#10;fx,ex 組成的 32 位除以 10 stbfl,ax+;余數(shù)存入 bcd 存儲區(qū) incbcount2;記下十進制結果的位數(shù) ldfx,cx;高位商存入 fx cmpex,#0;低位商為 0 嗎? jnebloop;否,跳轉到 bloop ret;返回 ;*bcd to 段碼 子程序* bcdtol: ldax,#bcd ldex,#table ldbbl,channal stbbl,7ex;通道號存入 table 區(qū) ldbcl,count2 next: ldbsp1,ax+;取 bcd 碼放到 sp1 中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論