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)
|