基于单片机的方波信 发生器设计

合集下载

基于STC15单片机的频率计及方波发生器设计

基于STC15单片机的频率计及方波发生器设计

课程设计论文课题:基于STC15单片机的频率计及方波发生器设计目录基于STC15单片机的频率计及方波发生器设计一、设计要求 (2)一)基础部分 (2)二) 发挥部分 (3)二、课程设计的意义与目的 (3)三、方案设计 (4)单片机数字频率计与可调方波发生器程序设计流程图 (4)四、硬件设计原理图: (6)五、硬件设计实物图: (6)六、程序框架: (7)七、功能说明: (7)八、测量: (8)低频测量: (8)高频测量: (8)九、误差分析: (9)第一次误差分析: (9)第二次误差分析: (9)十:实现功能情况表: (10)十一、心得与体会 (11)十二、参考资料 (11)十三、附录: (11)Main主函数: (11)按键扫描函数 (11)数码管显示相关函数: (12)PWM发生器函数: (13)频率计测量功能相关函数: (19)延时函数: (25)基于STC15单片机的频率计及方波发生器设计一、设计要求一)基础部分1. 数字频率计设计要求:1)被测信号为正弦波或方波,频率范围为1Hz~5MHz;2)测量相对误差的绝对值不大于百分之一;3)门限电压2V-5V;4)测量数据刷新时间不大于2s,测量结果稳定。

2. 方波发生器设计要求:1)方波发生器可以分为低频和高频2个端口产生,频率范围1Hz-6MHz;2)通过不同按键实现频率的粗调和微调。

二) 发挥部分1. 频率计范围为大于5MHz;2. 测量相对误差的绝对值不大于千分之一;3. 增加脉冲信号占空比的测量功能。

二、课程设计的意义与目的1.在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。

2.在通信技术中,波形的发生和频率的控制是最基本的要求,也是通信技术的基础,因此设计波形的发生与控制器就显得尤为重要。

3.单片机数字频率计与可调方波发生器,具有可靠性高、体积小、价格低、功能全,广泛应用与各种职能仪器中,能使在测量过程的控制中达到自动化,省掉很多繁琐的人工操作,同时也提高了测试精度。

基于单片机的多波形信号发生器设计

基于单片机的多波形信号发生器设计

基于单片机的多波形信号发生器设计
单片机多波形信号发生器是一种可以在微控制器芯片上合成不同波形的电路。

该电路可以生成正弦波、方波、三角波等多种波形,也可以通过设置不同的频率、幅值和相位来调节波形。

单片机多波形信号发生器被广泛应用于各种实验中,如音频信号处理、电子测量和信号仿真等领域。

以下是单片机多波形信号发生器设计的步骤:
1. 确定系统主要功能要求。

2. 选择合适的单片机芯片和外围电路。

3. 根据所选芯片的不同特点编写程序,并在仿真软件中进行测试。

4. 设计输出电路,包括输出放大电路和输出滤波电路。

5. 根据实际需要设计显示电路,用于控制波形参数和频率。

6. 进行系统调试和测试,对系统进行优化和改进。

7. 构建原型并进行实验验证,进一步检验系统性能是否能够满足所需的功能要求。

总结而言,单片机多波形信号发生器设计的关键是合理选择芯片和外围电路,并编写合适的程序用于控制波形参数。

同时,开发人员需要进行充分的调试,以确保系统运行稳定、波形输出准确、频率稳定。

信号发生器 (正弦波,方波,三角波)51单片机 C语言代码

信号发生器 (正弦波,方波,三角波)51单片机 C语言代码

/**************************************//* 信号发生器(正弦波,方波,三角波)*//*************************************/#include<reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit cs=P2^0; //tlc5615片选端口sbit clk=P2^1; //tlc5615时钟线sbit din=P2^2; //tlc5615传输端口sbit key1=P1^0;sbit key2=P1^1; //按键的单片机接口uchar keydat;uchar flag; //波形发生终止信号的标志位一旦被置零立马停止发信号uchar flagsqu; //方波高低电平控制为(运用定时器1中断控制)uchar m,num;uchar dat=0xff;uchar code tosin[141]={ //正弦波的编码0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e,0x7f,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00};void delay(uchar z) //延时函数{uchar x,y;for(x=0;x<110;x++)for(y=z;y>0;y--);}void prepare() //tlc5615的初始化{cs=1;din=1;clk=0;cs=0; //cs的上升沿和下降沿必须在clk 为低时进?}/* 用中断来产生方波void Squtranslator(){TR1=1; //启动定时器1 控制高低电平的持续时间占空比do{do{_wave=0;}while((!flagsqu) && flag==1);//如果一旦终止信号的//产生可以立马退出循环flagsqu=0;do{_wave=1;}while((!flagsqu) && flag==1);flagsqu=0;}while(flag);flag=1;TR1=0;}*/void Squtranslator() //方波函数{uchar j;uchar dat1=0x7f;while(flag){do{prepare();dat=dat1;for(j=0;j<12;j++){din=(bit)(dat>>7); //将数据的最高位赋给dinclk=1;dat=dat<<1; //一位位的传输clk=0;}cs=1; //cs的上升沿和下降沿必须在clk 为低时进行delay(200); //使高低电平持续一段时间if(dat1==0)dat1=0x7f; //完成了0和0x7f之间的替换elsedat1=0;}while(flag);}}void Tratranslator() //锯齿波的发生函数{uchar j;uchar dat1=0x7f;while(flag){do{prepare();dat=dat1;for(j=0;j<12;j++){din=(bit)(dat>>7); //将数据的最高位赋给dinclk=1;dat=dat<<1; //一位位的传输clk=0;}cs=1; //cs的上升沿和下降沿必须在clk 为低时进行delay(2); //稍加延时dat1--;}while(flag && dat1); //一旦有终止信号就可以停止do{prepare();dat=dat1;for(j=0;j<12;j++){din=(bit)(dat>>7); //将数据的最高位赋给dinclk=1;dat=dat<<1; //一位位的传输clk=0;}cs=1; //cs的上升沿和下降沿必须在clk 为低时进行delay(2); //稍加延时dat1++;}while(flag && (!(dat1==0x7f)));}}void Sintranslator(uchar wave[],uchar num )//正弦波的转换函数{uchar i,j;uchar dat1;do{for(i=0;i<num;i++){prepare();dat1=wave[i]; //打开片选开始工作for(j=0;j<12;j++){din=(bit)(dat1>>7); //将数据的最高位赋给dinclk=1;dat1=dat1<<1; //一位位的传输clk=0;if(flag==0)break;}cs=1; //cs的上升沿和下降沿必须在clk为低时进行delay(1); //稍加延时if(flag==0)break;}}while(flag); //等待控制键的暂停}void keyscan() //切换功能按键返回键值函数{uchar i;for(i=0;i<4;i++){if(key1==0){delay(10);if(key1==0){keydat++;do{}while(!key1); //松手检测if(keydat==4)keydat=1;//加满回零处理}}}}void keycountrl() //切断输出控制函数{if(key2==0){delay(10);if(key2==0){flag=0;do{}while(!key2); //松手检测}}}void main (){uchar temp;TMOD=0x01; //确定定时器的工作方式TH0=(65536-50000)/256; //给定时器0赋予初值TL0=(65536-50000)%256;EA=1; //开总中断ET0=1; //开启定时器0中断TR0=1;while(1){do{switch(keydat){case 1:flag=1;do{Sintranslator(tosin,141);}while(flag);break;case 2: flag=1;do{Tratranslator();}while(flag);break;case 3: flag=1;do{Squtranslator();}while(flag);break;default:break;}}while(flag);temp=keydat; //装载键值while(keydat==temp); //在这里等待键值的改变}}void Time0() interrupt 1{TH0=(65536-50000)/256; //定时器0用来扫描按键不断地扫描dTL0=(65536-50000)%256;num++;if(num==4){keyscan();keycountrl();num=0;}}。

基于单片机的智能信号发生器设计与仿真

基于单片机的智能信号发生器设计与仿真
i nt e r f a c e c i r cu i t d i a gr a m a r e gi v e n,c o m bi ni ng wi t h t he ke yb o ar d t o c o nt r o l t he c hoi c e a nd f r e qu e nc y o f wav e f o r m
Ab s t r a c t :U s i n g AT8 9 C5 1 a s t h e c o r e mo d u l e s , t h i s a r t i c l e d e s i g n e d a n i n t e l l i g e n t s i g n a l g e n e r a t o r , wh i c h c a n p r o d u c e s a wt o o t h wa v e , t r i a n g l e wa v e ,s q u a r e wa v e a n d s i n e wa v e .S i g n a l g e n e r a t o r s t r u c t u r e d i a g r a m a n d t h e Ha r d wa r e
e x p o n e n t i a l , l o g a r i t h mi c wa y, t h r o u g h D/ A c o n v e r t e r c o n v e r t s t h e s i g n a l s p r o d u c e d b y a n a l o g wa v e f o r m, a n d b y 1 2 8 6 4

8 1 0 0 0 8 )
要 :利 用 A T 8 9 C 5 1单 片 机 为 核 心 模 块 , 设 计 了 一种 智 能 信 号 发 生 器 , 可 实现锯齿波 、 三 角波 、 方 波 和 正 弦 波 4种

基于单片机的两相脉冲方波电路设计

基于单片机的两相脉冲方波电路设计

郑州航空工业管理学院毕业论文(设计)2012 届电气工程及其自动化专业 0806072 班级题目基于单片机两相脉冲方波输出电路硬件开发姓名乱世达人学号080607224指导教师粉红佳人职称教授2012 年5月20日内容摘要本文设计的是一个方波发生器,两相输出相位差π/2,可用于模拟增量式旋转编码器的A、B两相脉冲。

用BCD码拨盘来设定和显示方波的周期,主控制模块是兼容于51系列的微处理器模块AT89C52,此单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点。

在此自动控制设备中,采用光电耦合器实现弱电系统与强电系统的通道之间的隔离;同时运用了继电器方式的开关量输出,解决了从低压直流到高压直流的过度,从而保证了电子电路和人身的安全。

关键词相位差;方波; AT89C52;光耦隔离The hardware development of two-phase pulse square wave output circuit based on SCMAbstractIn this paper , the design is a square wave generator , and it uses BCD dial with panel to control and display frequency of square wave , and the m aster control module is based on 51 series of microprocessor module A T89C52 devices , and the single-chip microcomputer has high level of integration and powerful function, high reliability, small volume, low power consumption, easy to use, cheap and so on a series of advantages.In the automatic control equipment , the optical coupler solves the problem i nvolving the channel isolation technology , and at the same time , using the way of relay switching output has solved the transition from low voltage DC to high voltage DC , so as to ensure the safety of the electronic circuit and personal .Key wordsphase difference ;square wave; A T89C52; light coupling isolation目录内容摘要 (Ⅱ)Abstract (Ⅲ)第一章概述 (1)第二章系统硬件设计 (3)2.1设计方案 (3)2.2器件选择 (4)2.2.1单片机芯片内部结构简介 (4)2.2.2 BCD拨码盘介绍 (9)2.2.3光耦合器的介绍 (14)第三章硬件实现及单元电路设计 (16)3.1单片机最小系统的设计 (16)3.1.1 电源电路 (17)3.1.2 复位电路 (18)3.1.3 晶振电路 (19)3.1.4 输入电路 (20)3.1.5 显示电路 (20)3.2 系统电路总原理图 (21)3.3 PCB板的制作 (22)致谢 (25)参考文献 (26)附录Ⅰ (27)附录Ⅱ (28)第一章概述单片机是一种集成的电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉冲调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

基于AT89C52单片机的超低频信号发生器设计

基于AT89C52单片机的超低频信号发生器设计

基于AT89C52单片机的超低频信号发生器设计低频以及超低频信号在医学、电化学研究和实验教学中都有广泛的应用,尤其在电化学领域里,超低频信号发生器已成为电化学仪器必不可少的组成部分。

电化学仪器配以方波、三角波和正弦波发生器,可以研究电化学系统各种暂态行为;配以慢的线性扫描信号或阶梯波信号,可以自动进行稳态(或接近稳态)极化曲线测量。

然而市面上适用于电化学领域的信号发生器很少,传统信号发生器无法满足专业需求,且购买成本太高。

现介绍一种用单片机控制的信号发生器,可输出方波、三角波及正弦波。

产生的波形信号频率范围是0.125 mHz(毫赫兹)~80 Hz,输出的模拟信号电压范围是-10~+10 V,输出信号的幅值和频率具有一定的调节范围。

该信号发生器与传统的信号发生器相比,有如下的特点:该信号发生器可以满足电化学领域对于信号发生器的要求,最低频率可达到0.125 mHz,在国内达到先进水平,且该信号发生器在超低频时精度高,失真度小,性能稳定,电路结构简单,体积小。

1 工作原理超低频信号发生器的输入参数有扫描方式、上下限电平、波形频率。

其中,扫描方式有单次、往返、连续三种选择;上下限电平在-10~+10 V之间,且上限电平大于下限电平;波形频率范围为0.125 mHz~80 Hz。

输出波形有三种:方波、三角波、正弦波。

当信号发生器上电后,先进行复位清零,然后进行系统初始化,用户通过将键盘设置扫描频率、上下限电平及扫描方式等参数输入单片机,并通过LCD进行显示。

按照一定的算法准确调节各个功能模块,断开积分电路模块中控制仪器工作的模拟开关,使信号发生器开始工作,从而输出所需信号波形。

2 波形产生原理该信号发生器可以产生频率、峰谷值可调的、连续的方波、三角波和正弦波。

下面详细介绍三种波形的产生原理。

2.1 正弦波产生原理由于该信号发生器的最低频率可达到0.125 mHz,传统的正弦波产生电路已经无法满足要求。

基于51单片机的波形发生器的设计讲解

基于51单片机的波形发生器的设计讲解

基于51单片机的波形发生器的设计讲解波形发生器是电子设备中常见的一种电子设备,它可以产生各种不同形状的波形信号。

在这篇文章中,我们将会详细介绍基于51单片机的波形发生器的设计。

一、波形发生器的原理及分类波形发生器的原理是利用电子元件、电路以及控制信号源,将一定幅度的电压信号变化成为需要的各种形状的波形信号。

根据波形的形状分类,可以将波形发生器分为以下几种类型:1.正弦波发生器:产生正弦波信号的发生器,常用于音频设备中。

2.方波发生器:产生方波信号的发生器,常用于数字电路中,也可用于频率测量和脉冲调制等应用。

3.三角波发生器:产生三角波信号的发生器,常用于音频设备以及频率测试等领域。

4.锯齿波发生器:产生锯齿波信号的发生器,常用于音频设备、测试仪器以及数据采集和测量等领域。

二、基于51单片机的波形发生器设计下面我们将详细介绍基于51单片机的波形发生器的设计步骤。

1.硬件设计:在基于51单片机的波形发生器设计中,我们需要准备的硬件元件有:-51单片机控制芯片-芯片烧录器-液晶显示屏-按键开关-电源模块-杜邦线等电子连接线2.硬件连接:根据电路原理图进行将电子元件进行正确的电路连接。

其中,51单片机作为核心控制芯片,负责生成波形信号,液晶显示屏用于显示波形信号,按键开关用于控制波形发生器的启动、停止以及参数调整等操作。

3.软件设计:利用Keil C编译软件进行51单片机的软件设计,根据控制芯片的指令集编写相应的程序代码,实现以下几个功能:-波形信号的产生:根据选择的波形类型(正弦波、方波、三角波或锯齿波),利用特定的算法生成相应形状的波形信号。

-参数调节:通过按键开关控制波形的频率、幅度以及相位等参数的调节,使波形发生器能够产生不同特性的波形信号。

-波形信号显示:通过LCD显示屏将生成的波形信号进行实时显示,以方便观察和调试。

4.软硬件的调试与优化:三、波形发生器的应用1.音频设备:波形发生器可以生成不同频率的正弦波信号,用于音频信号的发生和测试等应用。

用单片机进行方波发生器的设计

用单片机进行方波发生器的设计

用单片机进行方波发生器的设计方波发生器是一种产生具有固定频率和振幅的方波信号的电路或设备。

它可以广泛应用于通信、计算机、测量、控制等领域。

在本文中,我们将详细介绍如何使用单片机进行方波发生器的设计。

设计一个单片机方波发生器可以分为以下几个步骤:步骤一:选择单片机型号和开发工具选择一个适合的单片机型号是设计方波发生器的第一步。

目前市场上常见的单片机有MCS-51系列、AVR系列、STM32系列等。

根据需求选择适合的型号。

步骤二:确定方波的频率和振幅方波发生器的设计需要明确所需的方波频率和振幅。

频率指的是方波信号的周期性,单位为赫兹(Hz);振幅指的是方波信号的最大值和最小值之间的差值,单位为伏特(V)。

根据实际需求确定频率和振幅的数值。

步骤三:编写单片机程序在单片机方波发生器的设计中,需要编写相应的程序代码。

在编写代码之前,需要了解所选单片机的编程语言、开发工具和编程接口,以便正确地编写和调试程序。

在编写程序时,需要利用单片机的定时器/计数器功能。

通过配置定时器的工作模式、时钟源和计数值,可以生成一定频率的脉冲信号。

然后利用IO口输出脉冲信号,并通过电路将脉冲信号转换成方波信号。

具体的代码实现细节根据所选单片机型号和开发工具而定,可以参考相关的单片机开发文档和教程。

以下是一个使用STM32单片机的例子:#include "stm32f10x.h"void delay(uint32_t n)for(uint32_t i=0;i<n;i++);}int main(void)GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);TIM_TimeBaseStructure.TIM_Prescaler = 72-1;TIM_TimeBaseStructure.TIM_Period = 1000-1;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = 500-1;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC1Init(TIM2, &TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM2, ENABLE);TIM_Cmd(TIM2, ENABLE);while(1)}}步骤四:电路设计和调试完成单片机程序编写后,需要进行相应的电路设计和调试工作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本设计用到一个 AT89C51 微处理器,4 个按键,一个四与门。AT89C51 用到两个定时
器,定时器 0 和定时器 1。其中定时器 0 工作在定时方式 1 下,决定方波频率;定时器 1
工作在定时方式 1 下,用来设定占空比。按键 1 与 2 控制方波信号频率。按下按键 1 或 2
时,进行频率的调节,占空比不变。1 键按下时,频率增加 100Hz,若 2 键按下时,频率
总体看来,设计成果达到了设计要求。输出方波的波形稳定,调节也较为简单。
11
七、 源程序
成都理工大学《电子系统设计》课程设计
#include<reg51.h> #define uchar unsigned char #define uint unsigned int
float fosc=12000000; sbit KEY1=P1^0; sbit KEY2=P1^1; sbit KEY3=P1^2; sbit KEY4=P1^3;
6
成都理工大学《电子系统设计》课程设计
开始 关中断 延时消抖
N 是否有键按下 Y 判断按键号
键处理
频率和占空比 N 范围是否超界
Y 赋初值 计算定时初值 键盘口初始化 关中断
结束
图 4 – 键盘中断处理子程序流程图
3.4 定时器中断子程序
定时器中断子程序中有定时器 0 与定时器 1 中断,频率定时器 0 中断流程图与占空比 定时器 1 流程图分别如图 5、图 6 所示。
增加 10Hz。频率最大值为 500Hz,当频率大于最大值时,重新赋值为 50Hz。另外两个按键
控制方波信号占空比。当按键 3 和 4 按下时,进行占空比调节,频率不变。3 键按下时,
占空比进行增加 10%,4 键按下时,占空比增加 1%。占空比最大值为 100%,当占空比大于
100%时,重新赋值为 0%。
比分别为 50Hz 和 50%,符合程序初始化的结果。
图 7 – Proteus 仿真 – 初始状态
8
成都理工大学《电子系统设计》课程设计
2) 分别按下按键 1、2 调节方波频率。可以看到方波波形频率不断增加,一快一慢, 而占空比依然为 50%未变。
图 8 – Proteus 仿真 – 调节方波频率
/******************* 系统初始化 *******************/
void chushihua(void)
{
P1=0x0f;
freq=50;
zkb=50;
TIMER0_L=0xe0;
TIMER0_H=0xb1;
TIMER1_L=0xf0;
TIMER1_H=0xd8;
TL0=0xe0; //初始频率 50Hz 定时 20ms
成都理工大学《电子系统设计》课程设计
表 3 AT89C51 芯片端口资源分配表
芯片端口
作用说明
P1.0
连接按键 1,控制输出方波频率
P1.1
连接按键 2,控制输出方波频率
P1.2
连接按键 3,控制输出方波占空比
P1.3
连接按键 4,控制输出方波占空比
P2.0
输出方波波形
P3.2
接收键盘中断请求信号
①定时器 0 中断执行的操作有:复位,启动自身进行频率定时,同时启动定时器 1, 进行占空比定时,输出高电平。
②定时器 1 中断,停止自身的计时,输出低电平。
7
成都理工大学《电子系统设计》课程设计
定时器0中断入口
定时器1中断入口
TR1=1
TR1=0
重装定时初值
重装定时初值
输出高电平
输出低电平
结束
图 5 – 频率定时器 0 中断流程
1.2 设计原理
AT89C51 单片机具有组成微型计算机的各部分部件:CPU、RAM、I/O 定时器/计数器以 及串行通讯接口等。只要将 AT89C51 的 ROM,接口电路,再配置键盘及其接口,显示器及
2
成都理工大学《电子系统设计》课程设计
其接口,数模转换及波形输出,指示灯及其接口等四部分,即可构成所需波形发生器。其 信号发生器构成原理框图如图 1 所示。
TH0=0xb1;
TL1=0xf0; //初始占空比 50%定时 10ms
TH1=0xd8;
TMOD=0x11; //定时器 1 和定时器 0 工作在方式 1
IT0=1;
//选择 INT0 为下降沿触发方式
EX0=1;
//外部中断 0 允许
ET0=1;
//定时器 1 和定时器 0 中断允许
ET1=1;
//系统时钟频率 //控制频率百位; //控制频率十位; //控制占空比十位; //控制占空比个位;
sbit OUTPUT=P2^0;
//方波输出端口;
uchar zkb;
uint freq;
uchar TIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H; //定时器 0 和 1 的定时初值;
EA=1;
//系统中断允许
TR0=1;
//定时器 1 和定时器 0 开始定时
TR1=1;
}
/********************* 主函数
13
成都理工大学《电子系统设计》课程设计
*********************/ void main(void) { chushihua(); //系统初始化 while(1) {} }
3.2 系统初始化子程序
在此程序中,给所有变量赋初值:键盘扫描口、初始频率与占空比及定时、开中断、 定时器 0 与定时器 1 的工作方式等。初始化时启动了定时器 0 和定时器 1.其中初始频率为 50Hz,占空比为 50%。键盘中断处理子程序流程图如图 4 所示
3.3 键盘中断子程序
键盘用外中断 0 实现。当有键按下时,产生低电平送入 INT0 口,形成中断请求信号, CUP 转去执行键盘中断子程序,进行频率调节或占空比调节。
3
成都理工大学《电子系统设计》课程设计
二、 系统的硬件设计
2.1 系统硬件原理
系统硬件原理图如图 2。本次设计中,采用内部时钟方式。 AT89C51 单片机的 P1.0、P1.1、P1.2、P1.3 口分别连接四个按键,对输出方波的频率、 占空比进行控制。P2.0 口作为方波输出口,可以通过示波器来观察波形。四个键盘口连接 一个四与门,与 INT0 口连接,将键盘中断请求信号送入 CPU。
结束
图 6 – 频率定时器 1 中断流程
四、 系统调试
在本次课程设计中,使用 Proteus 软件进行仿真调试。调试内容主要为软硬件的协同, 观察波形输出结果是否能够与设计方案所设计的那样达到要求。
调试结果如下: 1) 在 Proteus 软件中运行仿真,示波器窗口中出现方波波形,显然波形频率与占空
时。
根据计算定时器初值的公式:
TC
=
2L

fOSC × 12
t
计算出定时器 0 与定时器 1 所要装入的初值。
定时器 0 初值:C1=(65536-fosc/(12.0*freq))
定时器 0 初值:C1=(65536-(fosc*zkb)/(12.0*100*freq))
其中 freq 表示输出方波频率,zkb 表示方波占空比。
9
成都理工大学《电子系统设计》课程设计
图 10 – 系统运行 – 初始状态
2) 按下 1、2 键调节方波频率,可见方波频率增加,占空比依然保持 50%。
图 11 – 系统运行 – 调节方波频率
3) 使方波重新达到初始状态,分别按下 3、4 键,可见方波占空比发生相应变化,而 频率依然为 50Hz 未变。
3) 重新在初始状态下进行仿真。分别按下按键 3、4 调节方波占空比,可以看到方波 波形的占空比发生变化,而频率未变。
图 9 – Proteus 仿真 – 调节方波占空比
五、 实验记录
将 HEX 文件加载后,用示波器观察单片机的 P2.0 口,得到输出结果,如下图。 1) 系统运行的初始状态如下图,与仿真结果一致。
图 2 – 系统硬件原理图
2.2 芯片端口资源分配表
表 2 74LS21 芯片端口资源分配表
芯片端口1 2 4 5
作用说明 连接按键 1,判断按键 1 是否按下 连接按键 2,判断按键 2 是否按下 连接按键 3,判断按键 3 是否按下 连接按键 4,判断按键 4 是否按下
6
发送键盘中断请求信号
4
***********************/
void keyscan() interrupt 0 using 1 //外部中断 0
{float TF0,TZ1;
EX0=0;
//关中断
delay(10); //延时消抖
if(P1!=0x0f) //判断是否有键按下
/**************************** 延时子程序 ****************************/
void delay(uchar n) //延时 {
uchar i; while(n--)
{for(i=255;i>0;i--) {} }}
12
成都理工大学《电子系统设计》课程设计
性能良好
难以达到输出频率覆盖系数 的要求,电路复杂。
单片机编程
信号精度较高
需求软硬件结合
表 1 – 方案对比
通过对比,决定采用单片机编程的方法来实现。该方法可以通过编程的方法来控制信
号波形的频率和幅度,而且在硬件电路不变的情况下,通过改编程序来实现频率的变换。
此外,由于通过编程方法产生的是数字信号,所以信号的精度可以做得很高。
三、 软件设计
相关文档
最新文档