1.設計一套完整的單片機應用系統(硬件圖紙,軟件程序流程圖)
2.9路2mA~20mA模擬量輸入(需轉化為1V~5V)
3.5位數碼管顯示(1路顯示測量的通道數,4路顯示測量結果)
4.10位AD轉換,顯示范圍:000.0~999.9
5.每一秒檢測1路,自動跳過無輸入的測量通道
6.用“停止/巡檢”按鈕使其只測量/顯示1路
7.給出理論上的測量精度
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
線性關系y=12x-2503計算過程:根據ad轉換結果的0.2倍~1倍(1V~5V)對應輸出結果0.000~999.9這一映射。
仿真器件選擇:
1.單片機型號為P16F877
2.晶振4MHz
3.數碼管選擇六位,第一位顯示路數,后四位顯示轉化結果。
相關寄存器定義:
temp equ 20h temp1 equ 21h dishc equ 25h count equ 30h wei equ 31h s1h equ 50h s1l equ 51h s2h equ 52h s2l equ 53h r1h equ 54h r1l equ 55h r2h equ 56h r2l equ 57h p1h equ 58h p1l equ 59h
r1z equ 5ah
單片機AD轉換程序如下:
;AD轉換 atod bcf pir1,adif;ADIF清零標志位 bsf adcon0,go;go置1,啟動AD轉換 adwait btfss pir1,adif btfsc adcon0,go;AD轉換結束后GO位自動置0 goto adwait;未轉換完成,返回繼續轉換 movf adcon0,w;將通道數放入寄存器 andlw b'00111000';將adcon0取第345位,右移三次存入dishc movwf dishc rrf dishc rrf dishc rrf dishc banksel porta btfsc porta,ra4;檢測按鍵RA4 call jia;若為1,通道數加1;不為1,即按下按鈕不加1 movf dishc,w;檢測通道數是非為8 sublw .8 btfsc status,z call zhi;若等于8,將通道數置零 movf adresh,w sublw .51 btfsc status,c;判斷AD轉換是非在1V~5V之間 goto atod;不在范圍內,跳轉回AD轉換 call switch movlw 00h;與12相乘 movwf s2h movlw .12 movwf s2l call mpxy;調用乘法程序 movf r2h,w;與2503相減 movwf s2h movf r2l,w movwf s2l movlw 09h movwf s1h movlw 0c7h movwf s1l call subxy movf r1h,w;轉入bcd轉換 movwf s1h movf r2h,w movwf s1l call bintobcd;調用bcd轉換程序 movf r1z,w;第四位 andlw 0f0h movwf dishc+1 swapf dishc+1 movf r1z,w;第三位 andwf 0fh movwf dishc+2 movf r1l,w;第二位 andlw 0f0h movwf dishc+3 swapf dishc+3 movf r1l,w;第一位 andwf 0fh movwf dishc+4 call disp call delay1s
goto atod
具體內容見附件,程序純手打,有參考書本,設計思路等如有問題望告知,謝謝。 全部資料51hei下載地址:
pic大作業.zip
(95.53 KB, 下載次數: 63)
2019-1-16 09:27 上傳
點擊文件名下載附件
|