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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图 12 – 系统运行 – 初始状态
10
成都理工大学《电子系统设计》课程设计
4) 同时调节频率及占空比,示波器图像变化结果符合预期。
六、 结果分析
图 13 – 系统运行 – 初始状态
在本次设计中,方波信号发生器的频率和占空比都独立可调。输出方波信号的占空比 范围为 0%—100%,调节精度为 1%;频率范围为 50Hz—500Hz,调节精度为 10Hz。频率和 占空比之间的调节彼此独立。进行频率调节时,每次可以增加 100Hz 或 10Hz,超过 500Hz 时输出为 50Hz 的方波;进行占空比调节时,每次可增加 1%或 10%,超出 100%时输出占空 比为 0%方波。
/************************
定时器中断子程序
************************/
void Timer0_freq() interrupt 1 //频率定时器 0 中断
{
TR1=1;
//启动定时器 1,占空比定时
TL0=TIMER0_L;
TH0=TIMER0_H;
OUTPUT=1;
3
成都理工大学《电子系统设计》课程设计
二、 系统的硬件设计
2.1 系统硬件原理
系统硬件原理图如图 2。本次设计中,采用内部时钟方式。 AT89C51 单片机的 P1.0、P1.1、P1.2、P1.3 口分别连接四个按键,对输出方波的频率、 占空比进行控制。P2.0 口作为方波输出口,可以通过示波器来观察波形。四个键盘口连接 一个四与门,与 INT0 口连接,将键盘中断请求信号送入 CPU。
性能良好
难以达到输出频率覆盖系数 的要求,电路复杂。
单片机编程
信号精度较高
需求软硬件结合
表 1 – 方案对比
通过对比,决定采用单片机编程的方法来实现。该方法可以通过编程的方法来控制信
号波形的频率和幅度,而且在硬件电路不变的情况下,通过改编程序来实现频率的变换。
此外,由于通过编程方法产生的是数字信号,所以信号的精度可以做得很高。
成都理工大学《电子系统设计》课程设计
表 3 AT89C51 芯片端口资源分配表
芯片端口
作用说明
P1.0
连接按键 1,控制输出方波频率
P1.1
连接按键 2,控制输出方波频率
P1.2
连接按键 3,控制输出方波占空比
P1.3
连接按键 4,控制输出方波占空比Fra Baidu bibliotek
P2.0
输出方波波形
P3.2
接收键盘中断请求信号
EA=1;
//系统中断允许
TR0=1;
//定时器 1 和定时器 0 开始定时
TR1=1;
}
/********************* 主函数
13
成都理工大学《电子系统设计》课程设计
*********************/ void main(void) { chushihua(); //系统初始化 while(1) {} }
/**************************** 延时子程序 ****************************/
void delay(uchar n) //延时 {
uchar i; while(n--)
{for(i=255;i>0;i--) {} }}
12
成都理工大学《电子系统设计》课程设计
/******************* 系统初始化 *******************/
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
①定时器 0 中断执行的操作有:复位,启动自身进行频率定时,同时启动定时器 1, 进行占空比定时,输出高电平。
②定时器 1 中断,停止自身的计时,输出低电平。
7
成都理工大学《电子系统设计》课程设计
定时器0中断入口
定时器1中断入口
TR1=1
TR1=0
重装定时初值
重装定时初值
输出高电平
输出低电平
结束
图 5 – 频率定时器 0 中断流程
//输出高电平
}
void Timer1_zkb() interrupt 3 //占空比定时器 1 中断
{
TR1=0;
//定时器 1 停止
TL1=TIMER1_L;
TH1=TIMER1_H;
OUTPUT=0;
//输出低电平
}
/*********************** 键盘扫描子程序
14
成都理工大学《电子系统设计》课程设计
3.2 系统初始化子程序
在此程序中,给所有变量赋初值:键盘扫描口、初始频率与占空比及定时、开中断、 定时器 0 与定时器 1 的工作方式等。初始化时启动了定时器 0 和定时器 1.其中初始频率为 50Hz,占空比为 50%。键盘中断处理子程序流程图如图 4 所示
3.3 键盘中断子程序
键盘用外中断 0 实现。当有键按下时,产生低电平送入 INT0 口,形成中断请求信号, CUP 转去执行键盘中断子程序,进行频率调节或占空比调节。
6
成都理工大学《电子系统设计》课程设计
开始 关中断 延时消抖
N 是否有键按下 Y 判断按键号
键处理
频率和占空比 N 范围是否超界
Y 赋初值 计算定时初值 键盘口初始化 关中断
结束
图 4 – 键盘中断处理子程序流程图
3.4 定时器中断子程序
定时器中断子程序中有定时器 0 与定时器 1 中断,频率定时器 0 中断流程图与占空比 定时器 1 流程图分别如图 5、图 6 所示。
//系统时钟频率 //控制频率百位; //控制频率十位; //控制占空比十位; //控制占空比个位;
sbit OUTPUT=P2^0;
//方波输出端口;
uchar zkb;
uint freq;
uchar TIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H; //定时器 0 和 1 的定时初值;
增加 10Hz。频率最大值为 500Hz,当频率大于最大值时,重新赋值为 50Hz。另外两个按键
控制方波信号占空比。当按键 3 和 4 按下时,进行占空比调节,频率不变。3 键按下时,
占空比进行增加 10%,4 键按下时,占空比增加 1%。占空比最大值为 100%,当占空比大于
100%时,重新赋值为 0%。
图 2 – 系统硬件原理图
2.2 芯片端口资源分配表
表 2 74LS21 芯片端口资源分配表
芯片端口 1 2 4 5
作用说明 连接按键 1,判断按键 1 是否按下 连接按键 2,判断按键 2 是否按下 连接按键 3,判断按键 3 是否按下 连接按键 4,判断按键 4 是否按下
6
发送键盘中断请求信号
4
图 1 – 方波信号发生器设计原理框图
在信号发生器中,只用到片内中断请求,即是在 AT89C51 输出一个波形采样点信号后,
接着启动定时器,在定时器未产生中断之前,AT89C51 等待,直到定时器计时结束,产生
中断请求,AT89C51 响应中断,接着输出下一个信号波形,如此循环。当有按键按下时,
产生外部中断请求信号,CPU 暂停当前工作,处理中断请求,重新装入定时初值,开始定
1.2 设计原理
AT89C51 单片机具有组成微型计算机的各部分部件:CPU、RAM、I/O 定时器/计数器以 及串行通讯接口等。只要将 AT89C51 的 ROM,接口电路,再配置键盘及其接口,显示器及
2
成都理工大学《电子系统设计》课程设计
其接口,数模转换及波形输出,指示灯及其接口等四部分,即可构成所需波形发生器。其 信号发生器构成原理框图如图 1 所示。
9
成都理工大学《电子系统设计》课程设计
图 10 – 系统运行 – 初始状态
2) 按下 1、2 键调节方波频率,可见方波频率增加,占空比依然保持 50%。
图 11 – 系统运行 – 调节方波频率
3) 使方波重新达到初始状态,分别按下 3、4 键,可见方波占空比发生相应变化,而 频率依然为 50Hz 未变。
3) 重新在初始状态下进行仿真。分别按下按键 3、4 调节方波占空比,可以看到方波 波形的占空比发生变化,而频率未变。
图 9 – Proteus 仿真 – 调节方波占空比
五、 实验记录
将 HEX 文件加载后,用示波器观察单片机的 P2.0 口,得到输出结果,如下图。 1) 系统运行的初始状态如下图,与仿真结果一致。
结束
图 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 表示方波占空比。
三、 软件设计
方波发生器的软件设计包括主程序、延时子程序、系统初始化程序、键盘中断子程序、 定时器中断子程序。
3.1 主程序
主程序包括系统初始化,和一个死循环系统。当有中断请求信号产生时,跳出循环, 执行中断程序。流程图如图 3 所示。
开始
系统初始化
空循环
图 3 – 主程序流程图
5
成都理工大学《电子系统设计》课程设计
成都理工大学《电子系统设计》课程设计
一、 总体设计
1.1 方案的设计与选择
实现方波发生器的方法很多,但主要有三个方案:采用单片函数发生器 8038,采用锁 相式频率合成器,采用单片机编程。其对比如下表:
方案
优点
缺点
简单易行,可实现数控 单片函数发生器 8038
调整频率
信号频率稳定度不高
锁相式频率合成器
***********************/
void keyscan() interrupt 0 using 1 //外部中断 0
{float TF0,TZ1;
EX0=0;
//关中断
delay(10); //延时消抖
if(P1!=0x0f) //判断是否有键按下
(1)频率调节 按下按键 1 或 2 时,进行频率的调节,占空比不变。1 键按下时,频率增加 100Hz, 若 2 键按下时,频率增加 10Hz。频率最大值为 500Hz,当频率大于最大值时,重新赋值为 50Hz。 (2)占空比调节 当按键 3 和 4 按下时,进行占空比调节,频率不变。3 键按下时,占空比进行增加 10%, 4 键按下时,占空比增加 1%。占空比最大值为 99%,当占空比大于 99%时,重新赋值为 1%。
总体看来,设计成果达到了设计要求。输出方波的波形稳定,调节也较为简单。
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;
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;
比分别为 50Hz 和 50%,符合程序初始化的结果。
图 7 – Proteus 仿真 – 初始状态
8
成都理工大学《电子系统设计》课程设计
2) 分别按下按键 1、2 调节方波频率。可以看到方波波形频率不断增加,一快一慢, 而占空比依然为 50%未变。
图 8 – Proteus 仿真 – 调节方波频率
本设计用到一个 AT89C51 微处理器,4 个按键,一个四与门。AT89C51 用到两个定时
器,定时器 0 和定时器 1。其中定时器 0 工作在定时方式 1 下,决定方波频率;定时器 1
工作在定时方式 1 下,用来设定占空比。按键 1 与 2 控制方波信号频率。按下按键 1 或 2
时,进行频率的调节,占空比不变。1 键按下时,频率增加 100Hz,若 2 键按下时,频率
相关文档
最新文档