- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于pwm单片机可调方波及计频器.
课程设计报告
设计题目 基于STC15单片机
的频率计及方波发生器设计
2016 年 1月 1日
基于STC15单片机的频率计及方波发生器设计
基础部分
1. 数字频率计设计要求:
被测信号为正弦波或方波,频率范围为1Hz~5MHz;
测量相对误差的绝对值不大于百分之一;
门限电压2V-5V;
测量数据刷新时间不大于2s,测量结果稳定。
2. 方波发生器设计要求:
方波发生器可以分为低频和高频2个端口产生,频率范围1Hz-6MHz;
通过不同按键实现频率的粗调和微调。
二.发挥部分
频率计范围为 大于5MHz;
测量相对误差的绝对值不大于 千分之一;
增加脉冲信号占空比的测量功能。
设计思路
定时器的使用
(1)定时器控制寄存器(TCON)
TCON寄存器既参与中断控制又参与定时控制。现对其定时功能加以介绍。
其中有关定时的控制位共有4位:
F0和TF1——计数溢出标志位
当计数器计数溢出(计满)时,该位置“1”;使用查询方式时,此位作状态
位供查询,但应注意查询有效后应以软件方法及时将该位清“0”;使用中断
时,此位作中断标志位,在转向中断服务程序时由硬件自动清“0”。
R0和TR1——定时器运行控制位
TRO(TR1)=0 停止定时器/计数器工作
TRO(TR1)=1 启动定时器/计数器工作
(2)工作方式控制寄存器(TMOD)
TMOD寄存器是一个专用寄存器,用于设定两个定时器/计数器的工作方式。
但TMOD寄存器不能位寻址,只能用字节传送指令设置其内容。
(3)中断允许控制寄存器(IE)
EA——中断允许总控制位
ET0和ET1——定时/计数中断
定时器/计数器提供给用户使用的有:8位计数器TH和TL,以及有关的控制
位。这些内容只能以软件方法使用。
两个外部中断源和三个内部中断源。
每一个中断源都有一个中断申请标志位,但是串行口占有两个中断标志位。
一共有六个中断标志位。
(4)定时器/计数器对输入信号的要求
定时器/计数器的两个作用是用来精确的确定某一段时间间隔[13](作定时
器用)或累计外部输入的脉冲个数(作计数器用)。
当用作定时器时,在其输入端输入周期固定的脉冲,根据定时器/计数器中
累计(或事先设置)的脉冲个数,即可计算出所定时间的长度。
当89C51内部的定时器/计数器被选择为定时器工作方式时,计数输入信号
是内部时钟脉冲,每个机器周期产生一个脉冲使计数器增1。因此,定时器/
数器的输入脉冲周期与机器周期一样,为振荡频率的1/12。当采用12MHz
的晶体时,计数频率为1MHz,输入脉冲的周期间隔为1μs[14]。由于定时
度决定于脉冲的周期,因此,当需要高精度的定时器时,应尽量选择频率较
晶体。
二.芯片资料
主要程序设计流程图
四.程序
#include STC15.h //头文件设置
#define TIMS2 65336 //定时器2
#define TIMS1 15536 //定时器1
sfr TH2 =0xD6; //地址申明
sfr TL2 =0xD7;
sbit LED2 =P3^5; //按键申明
sbit KEY_BIG =P3^2;
sbit KEY_SMALL=P3^3;
sbit KEY_SWITCH_MODE = P5^4;
sbit KEY_CHAGE_MODE =P5^5;
void delay_ms(unsigned char xms);
void DisPlay_Freq(unsigned long cnt);//函数申明
void Scan_Key(void);
void delay_10us(unsigned char xms);
void delay_50us(unsigned char xms);
void DisPlay_PWM_WIDTH(unsigned long width);
void Timer1Init(void);
void Timer0Init(void);
////tab1:数值 tab2:段选
unsigned char code tab1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code tab2[]={0x80,0x
文档评论(0)