基于S08的简易频率计设计_第1页
基于S08的简易频率计设计_第2页
基于S08的简易频率计设计_第3页
基于S08的简易频率计设计_第4页
基于S08的简易频率计设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 微控制原理课程设计题 目: 基于S08的简易频率计设计 院系名称: 电气工程学院 专业班级: 学生姓名: 学 号: 评语:成 绩:任课教师:目 录一 我的课题设计3二 方案比较与选择3 1方案比较3 2方案论证4 3方案选择4三 系统设计原理5四 S08AW简介5五 电路设计6 1 显示电路6 2 电路图8六 程序设计9 1 程序流程图9 2 C语言程序设计10七 功能分析17 1 外围电路的理论分析17 2 频率的测量 17八 总结17 参考文献19一 我的课题设计本设计是基于s08单片机设计的简易频率计。技术指标:频率(F)为:1Hz100MHz,周期(T)为:1S10E-7S

2、,精度为:10%。二 方案比较与选择1 方案比较方案一:本方案主要以数字器件为核心,主要分为时基电路,逻辑控制电路,放大整形电路,闸门电路,计数电路,锁存电路,译码显示电路七大部分。其原理框图如图1.1所示:逻辑控制电路译码显示器锁存器闸门电路计数器时基电路放大整形电路图1.1 方案一原理框图方案二:本方案主要以单片机为核心,利用单片机的计数定时功能来实现频率的计数并且利用单片机的动态扫描把测出的数据送到数字显示电路显示。其原理框图如1.2所示: 信号放大电路信号整形单片机S08电路数字显示电路图1.2 方案二原理图2 方案论证方案一:本方案使用大量的数字器件,被测量信号经过放大整形电路变成计

3、数器所要求的脉冲信号,其频率与被测信号的频率相同。同时时基电路提供标准时间基准信号,其高电平持续时间1s,当1s信号来到时,闸门开通,被测脉冲信号通过闸门,计数器开始计数,直到1s信号结束闸门关闭,停止计数。若在闸门时间1s内计数器计得的脉冲个数为N,则被测信号频率F(X)=N Hz。逻辑控制电路的作用有两个:一是产生锁存脉冲,使显示器上的数字稳定;二是产生清零脉冲,使计数器每次测量从零开始计数。 方案二:本方案主要以单片机为核心,被测信号先进入信号放大电路进行放大,再被送到波形整形电路整形,把被测正弦波或者三角波转换为方波,利用单片机的计数器和定时器的功能对被测信号进行计数。编写相应的程序可

4、以使单片机自动调节测量的量程,并把测出的频率数据送到显示电路显示。3 方案选择 比较以上两种方案可以知道,方案二的核心是单片机,使用的元器件少,原理电路简单,调试简单只要改变程序的设定值则可以实现不同频率范围的测量,能自动选择测试的量程。与方案二相比较方案一则使用了大量的数字元器件,原理电路复杂,硬件调试麻烦。如要测量高频的信号还需要加上分频电路,价格相对高。鉴于我们是第一次做与单片机有关的电子设计作品,为了减少一定的难度以及为今后更好的实现频率计的精细化和准确化,经过小组讨论,我们决定从基础的频率计出发。该频率计是利用单片机内部的定时/计数器完成待测信号周期频率的测量,测量范围相比与要求较窄

5、,但具有一定的代表性和基础性。三 系统设计原理本频率计的设计以是S08AW为核心,利用它内部的定时/计数器完成待测信号周期/频率的测量,定时/计数器的工作可以由编程来实现定时,计数和产生计数溢出时中断要求的功能。在定时器工作方式下,在被测时间间隔内,每来一个机器周期,计数器自动加1,这样以机器周期为基准可以用来测量时间间隔。在计数器工作方式下,加至外部引脚的待测信号发生从1到0的跳变计数器加1,这样在计数闸门的控制下可以用来测量待测信号的频率。外部输入在每个机器周期被采用一次,这样查测一次从1到0的跳变至少需要2个机器周期,所以最大计数速率为时钟频率1/24。定时/计数器的工作有运行控制位TR

6、控制,当TR置1,定时/计数器开始计数;当TR清0 ,停止计数。 当待测信号的频率>100HZ时,定时/计数器构成为计数器,以机器周期为基准,由软件产生计数闸门,计数闸门宽度>1S时,即可满足频率测量结果为3位有效数字。四 S08AW简介 S08AW系列是Freescale公司推出的新一代S08系列微控制器中的一款增强型8位微控制器,它不仅集成度高、片内资源丰富,接口模块包括SPI、SCI、IIC、A/D、PWM 等,还具有很宽的工作温度范围:-40+125,它在汽车电子、工业控制、中高档机电产品等领域具有广泛的用途。S08AW 微控制器采用8位S08CPU,片内总线时钟最高可达2

7、0MHz;片内资源包括2K RAM、将近62K Flash、串行接口模块(SCI、SPI和IIC)、定时器模块(TPM)、可选择宽范围时钟频率,它还提供一个8位/10位精度的A/D转换器,并支持后台调试模式BDM。S08AW是Freescale首个基于高性能S08CPU内核并支持2.75.5V电源的微控制器。它包含众多有应用价值的特性:将近62K的flash存储器、高达2K的RAM、灵活而无需外部元件的内部时钟发生器、低电压检测、高性能模/数转换器(ADC)和串行通信模块等。S08AW系列具有极佳的电磁兼容性能(EMC)并提供了不同的引脚数(64, 48或44)、封装选项(QFP, LQFP或

8、QFN)及宽温度范围 (-40+125),可适应各类恶劣环境,因此该微控制器适用于高可靠的工业与汽车电子领域。五 电路设计1 显示电路我们测量的频率最终要显示出来,八段LED 数码管显示器由8 个发光二极管组成。基中7个长条形的发光管排列成“日”字形,另一个圆点形的发光管在数码管显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。LED 数码管显示器有两种形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED 数码管显示器;另一种是8 个发光二极管的阴极都连在一起的,称之为共阴极LED 数码管显示器。共阴和共阳结构的LED 数码管显示器各笔划段名和安排位置是相同的。当二极

9、管导通时,对应的笔划段发亮,由发亮的笔划段组合而显示的各种字符。8个笔划段 h g f e d c b a 对应于一个字节(8 位)的D7、D6、D5、D4、D3、D2、D1、D0,于是用8位二进制码就能表示欲显示字符的字形代码。我们使用的是SM420564-32系列的共阴四位一体数码显示管。4位一体数码管,其内部段已连接好,引脚如图所示(正面朝自己,小数点在下方),a、b、c、d、e、f、g、dp为段引脚,1、2、3、4分别表示四个数码管的位。 。 。 。 。 。 。 1 a f 2 3 b 。 。 。 。 。 。 e d dp c g 4 在单片机应用系统中,数码管显示器显示常用两种办法:

10、静态显示和动态扫描显示。所谓静态显示,就是每一个数码管显示器都要占用单独的具有锁存功能的I/O 接口用于笔划段字形代码。这样单片机只要把要显示的字形代码发送到接口电路,直到要显示新的数据时,再发送新的字形码。因此,使用这种办法单片机中CPU的开销小,能供给单独锁存的I/O 接口电路很多。在单片机系统中动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一,其接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM是各自独立地受I/O 线控制。CPU 向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是那个显示器亮,则取决于COM 端,而这一端是由I/O

11、 控制的,所以我们就能自行决定何时显示哪一位了。而所谓动态扫描就是指我们采用分时的办法,轮流控制各个显示器的COM 端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。如图原理图5.1图5.1 显示电路原理图2 电路图 图5.2 S08AW电路 其中含有晶振、复位电路、138译码输出电路。六 程序设计1 程序流程图图6.1程序流程图2 C语言程序设计#include<reg52.h>#def

12、ine unchar unsigned charvoid init_timer();/定时器初始化函数void delay();/基础延时函数void mult_delay(unchar time);/基础延时函数整数倍延时void convert_LED();/LED结果转换函数void LED_number_add(unsigned int add);/加法函数void LED_display();/void LCM_display();unchar count = 0;unsigned int temp_add = 0;/加数add的临时赋值unchar point = 7;/定义小数点

13、所在的位unchar LED_number3,LED_number2,LED_number1,LED_number0;/显示在LED上的真实数字unchar LEDBUF=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;/LED数据显示缓冲区unchar led_point = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x08;/定义带小数点的代码段unchar leddata=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x0

14、8;/定义不带小数点的代码/*主函数*/void main()init_timer();/定时器配置LED_number0 = 0;LED_number1= 0;LED_number2= 0;LED_number3= 0;while(1)convert_LED();/将频率值转换成显示在8段数码管上的数据 LED_display();/将前面转换出来的数字显示在LED上/*LED显示函数*/void LED_display()unchar index = 0;unchar NOT_zero;NOT_zero = 0;for(index=0;index<8;index+)if(!(LEDB

15、UFindex=0)&(!NOT_zero)&(index != point)NOT_zero = 1;/P0 = index;P1 = 0x00;P0 &= 0xf8;P0 |= index;if(point=index)P1 = led_pointLEDBUFindex;elseP1 = leddataLEDBUFindex;mult_delay(1);/*基础延时函数*/void delay()unsigned int time_length;time_length = 0x0a;while(time_length-);/*/基础延时函数整数倍延时*/void m

16、ult_delay(unchar time)while(time-)delay();/*LED结果转化函数*/void convert_LED()if(temp_add != 0)LED_number_add(temp_add);temp_add = 0;if(LED_number0>=100)LED_number1 += LED_number0/100;LED_number0 -= (LED_number0/100)*100;if(LED_number1>=100)LED_number2 += LED_number1/100;LED_number1 -= (LED_number1

17、/100)*100;if(LED_number2>=100)LED_number3 += LED_number2/100;LED_number2 -= (LED_number2/100)*100;if(LED_number3>=100)LEDBUF0 = 11;LEDBUF1 = 11;LEDBUF2 = 11;LEDBUF3 = 11;LEDBUF4 = 11;LEDBUF5 = 11;LEDBUF6 = 11;LEDBUF7 = 11;while(1)LED_display();LEDBUF7 = LED_number0%10;LEDBUF6 = LED_number0/10;

18、LEDBUF5 = LED_number1%10;LEDBUF4 = LED_number1/10;LEDBUF3 = LED_number2%10;LEDBUF2 = LED_number2/10;LEDBUF1 = LED_number3%10;LEDBUF0 = LED_number3/10;/*加法函数*/void LED_number_add(unsigned int add)unchar addH,addL;addH = add/100;addL = add%100;LED_number0 += addL;LED_number1 += addH;/*定时器初始化函数*/void i

19、nit_timer()EA = 1; /开总中断ET0 = 1; /允许定时器0中断TMOD = 0x51; /定时器工作方式选择TL0 = 0x00;TH0 = 0x4c; /定时器赋予初值/*-*/TL1 = 0x00;TH1 = 0x00; /计数器赋予初值/*-*/TR0 = 1; /启动定时器TR1 = 1;/*定时器中断服务函数*/void timer0() interrupt 1 /50ms中断函数unchar temp_TL1 = 0;unchar temp_TH1 = 0;unsigned long temp_number = 0;TH0=0x4c; /50ms初值 晶振11

20、.0592TL0=0x00;count+;if(count=20)count=0;temp_TL1 = TL1;temp_TH1 = TH1;TL1 = 0x00;TH1 = 0x00;LED_number0 = 0x00;LED_number1 = 0x00;LED_number2 = 0x00;LED_number3 = 0x00;temp_number = temp_TH1*256+temp_TL1; LED_number3 = temp_number/1000000; LED_number2 = (temp_number%1000000)/10000; LED_number1 = (t

21、emp_number%10000)/100; LED_number0 = (temp_number%100);七 功能分析1 外围电路的理论分析信号输入幅值可能没有到斯密特触发器所能识别的幅值,所以要先由三极管进行放大。放大后,由斯密特触发器(74ls14)进行整形,整形后输出相同频率的方波。而脉冲部分电平约为45v,为高电平。再根据单片机发出的信号是否要分频。由于1M除以16为62500。而单片机计数器可以计到65536.可以减少设计要求。小频率在分频情况下,误差较大,所以直接送给。而且由于普通单片机不能正确识别几百khz的频率。大于60khz进行16分频。设计中由于没及时买到三态门,只用手

22、动控制。2 频率的测量 先将最后要存储R0R7 清零,过程中出现位标志等清零进行初始化。然后将T0方式一赋初TH0=0B1H,TL0=0E7H.循环50次正好1S。计数方式一TH1.TH0清零同时开启定时器T0和计数器T1。如果定时50次(1s)到了,就停止计数器T1.将T1的计数的值转化十进制数(调用网上了二位BCD码转化),形成十进制的频率。再判断是否有进行分频。有的话,将十进制数用每位都乘以16进行移位相加,因为每一位最大为9.乘以16再加上进位,也不会超过三位数,所以可以用寄存器先进行储存。再用每位相加再加上进位。得到乘以16的十进制数,如果超出1Mhz,对置位认为超出量程。至此已经得到在(11MHZ)的频率。再进行判断频率是否超过1khz. 如果超过1KHZ,直接送给显示。如果小于1khz,先进行测周期(见周期测量),再调用四字除法二字子程序。用100000000除以周期得到的值,得到频率再转化十进制。得到频率。取四位有效数值,误差基本上达到很小。八 总结通过这次设计,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论