锯齿波的产生
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于STC89C52的200Hz锯齿波产生设计
该设计是利用STC89C52单片机配合DAC0809实现200Hz锯齿波的产生。其中还用到了运放OP07将0809产生的电流信号转化为电压信号,OP07需要外接正负电压,所以还需要利用MAX232电平转换芯片将为其提供正负电压。下面源代码、转换部分的仿真电路图以及仿真产生的波形图:
源代码:
/*******************************************************/
/* 09计算机2班 孙兴林 */
/* 2010年九月4日 */
/* 锯齿波产生试验程序 */
/* 目标器件:AT89C52 */
/* 晶振:12.0000MHZ */
/* 编译环境:Keil uVision4 */
/*******************************************************
---实现功能:
---利用STC89C52单片机配合DAC0832实现200Hz锯齿波产生
********************************************************/ #include
sbit dawr=P3^6; //DA写数据
sbit csda=P3^2; //DA片选
unsigned char a;
/******************************************************** ---定时器初始化函数
---设定定时器工作方式为方式1
---定时器装入初值为65525
---12M晶振下11us中断一次
********************************************************/
void Timer_Init()
{
TMOD=0x01;
TH0=0xff;
TL0=0xf5;
EA=1;
ET0=1;
TR0=1;
}
/******************************************************** ---主函数
---实际实现200Hz锯齿波应该19us-20us中断一次
---定时器的误差是us级的,而这个误差体现在波形周期上
---要成为原来的256倍,就差不多是毫秒级了
---而在波形周期确定的情况下,毫秒级的误差是不允许的
---所以要根据实际硬件情况调整中断时间
*********************************************************/ void main()
{
Timer_Init();
csda=0;
dawr=0;
a=0;
while(1)
{
P0=a;
if(a==256)
a=0;
}
}
/********************************************************* ---中断函数
---12M晶振下执行一次命令的时间是1us
---而中断时间也不过是十几us
---为减小误差
---中断函数不牵扯任何数学运算和多余判断
**********************************************************/ void Time() interrupt 1
{
}--
供TH0=0xff;TL0=0xf5;a++;
---主体部分电---MAX232为
供电部分电路; ; 电路绘图软件运放供电部分
路:
件及仿真软件为
分电路绘图软为Proteus7
软件为
Altium Designer 6.9
主体部分Proteus 仿真电路路图:
仿真后波形效效果图: