基于单片机简易信号测量仪所有专业(编辑修改稿)内容摘要:

附:简易信号测量仪的 C 语言程序 和原理图 /********************简易信号测量仪的 C 源程序 ***********************/ include //52 单片机的头文件 define uint unsigned int define uchar unsigned char //宏定义 unsigned long int resh_1。 //保存波形的周期 uchar flag。 //标号用于识别是正弦波还是方波 float resh_3。 //保存波形的占空比 sbit ST=P3^2。 sbit EOC=P3^3。 sbit OE=P3^6。 sbit CLK=P3^7。 //AD0809 与单片机的接口 sbit RS=P2^0。 sbit RW=P2^1。 sbit E=P2^2。 //1602 液 晶与单片机的接口 sbit p3_4=P3^4。 //被测信号的输入接口 sbit S2=P2^4。 sbit S3=P2^5。 sbit S4=P2^6。 sbit S5=P2^7。 //四个独立键盘 /*****用定时器 0 定时,计数器 1 计数测量频率 *****/ unsigned long int time0() { unsigned long int count。 uint i。 uchar scount。 TMOD=0x61。 //定时器 0 工作在定时方式 1,定时 器 1 工作在计数方式 2 TH0=0xb8。 TL0=0x53。 //定时 20 毫秒 TH1=0x38。 TL1=0x38。 //计数 200 次 scount=50。 //定时 1 秒 TR0=1。 //启动定时器和计数器 TR1=1。 do { if(TF1==1) { i++。 //计算经过了多少个 200 次 TF1=0。 } if(TF0==1) { scount。 TF0=0。 TH0=0xb8。 TL0=0x53。 } }while(scount)。 //1S 时间到 TR0=0。 TR1=0。 //停止定时器和计数器 count=i*200。 //被测信号的频率 return count。 } /*********计数器 0 测周期 ***********/ unsigned long int count() { uchar a,b,i=0,j=0。 uint resh1,resh_2。 unsigned long int resh2。 TMOD=0x01。 //用定时器 0 计时 TL0=0x00。 TH0=0x00。 do{}while(p3_4)。 //刚到低电平就开启定时器 0,以保证测量的是一个完整的周期 TR0=1。 do { if(TF0==1) TF0=0。 i++。 j++。 //测出低电平的时间,以便求出占空比 }while(p3_4==0)。 a=TH0。 b=TL0。 //将低电平的计数个数保存 do { if(TF0==1) TF0=0。 i++。 //测出波形的周期 }while(p3_4)。 TR0=0。 //停止定时器 resh1=TH0。 resh1=resh18。 resh1=resh1|TL0。 //将两个 8 位数合成一个 16 位数 resh2=i*65536+resh1。 //算出波形一个周期内计数的个数 resh_2=a。 resh_2=resh_28。 resh_2=resh_2|b。 resh_3=resh_2+j*65536。 //算出波形低电平时计数的个数 resh_3=(resh2resh_3)/resh2。 //算出波形的占空比 resh2=resh2*。 //精确到个位 return resh2。 } /********ADC0809 测量信号的电压 ********/ void init() //初始化函数 { EA=1。 //开总中断 TMOD=0x02。 //设定定时器。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。