锯齿波的产生

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 仿真电路路图:

仿真后波形效效果图:

相关文档
最新文档