|
仿真電路:
51hei.png (125.46 KB, 下載次數(shù): 102)
下載附件
2020-6-12 22:16 上傳
單片機源程序如下:
- #include <reg52.h>
- #include <math.h>
- #define DAC_PORT P2 //如圖,DAC0832連接端口
- //兩種波
- #define W_TRI 0
- #define W_SAW 1
- #define PI 3.1415926f //圓周率
- //簡化類型符寫法
- typedef unsigned char u8;
- typedef unsigned int u16;
- typedef unsigned long u32;
- sbit DAC_WR=P3^6; //DAC0832使能口
- sbit DAC_CS=P1^7;
- //全局變量
- u8 mode;//模式:鋸齒波,三角波
- u16 freq;//頻率
- u8 time;//計次參數(shù)
- u8 AM;//調(diào)幅
- void Timer0Init(void);
- void sys_init(void);
- void tri_wave(u8 location);//三……
- void saw_wave(u8 location);//鋸……
- void Timer0Init(void) //100微秒@12.000MHz
- {
- TMOD &= 0xF0; //設(shè)置定時器模式
- TMOD |= 0x02; //設(shè)置定時器模式
- TL0 = 0x9C; //設(shè)置定時初值
- TH0 = 0x9C; //設(shè)置定時重載值
- TF0 = 0; //清除TF0標(biāo)志
- TR0 = 1; //定時器0開始計時
- EA = 1; //開總中斷
- ET0 = 1; //開定時器0中斷
- }
- void sys_init(void)//系統(tǒng)初始化
- {
- time=0;
- DAC_WR=0;
- DAC_CS=0;
- DAC_PORT=0;
- mode=0;//默認輸出三角波,mode=1;輸出鋸齒波
- freq=100;//默認頻率100Hz
- AM=255;//最大幅度
- }
- void tri_wave(u8 location)//三……
- {
- //為了簡化,在單周期輸出V字形
- u8 y;
- if(location<50)
- y=(50-location)*AM/50;
- else
- y=(location-50)*AM/50;
- DAC_PORT=y;
-
- }
- void saw_wave(u8 location)//鋸……
- {
- DAC_PORT=location*AM/100;
- //用(100-location)也以變成反向鋸齒
- }
- void Timer0Work() interrupt 1 //中斷服務(wù)函數(shù)
- {
- switch(mode)
- {
-
- case W_TRI:tri_wave((u8)((time*freq/100)%100));break;
- case W_SAW:saw_wave((u8)((time*freq/100)%100));break;
- }
- time++;
- if(time>=100)//計數(shù)100次
- time=0;
- }
- int main(void)
- {
- sys_init();
- Timer0Init();
- while(1)
- {
- ;
- }
- }
復(fù)制代碼 仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
所有資料51hei提供下載:
DAC0832.rar
(52.33 KB, 下載次數(shù): 19)
2020-6-12 20:47 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
其他波形參考:http://www.zg4o1577.cn/bbs/dpj-100216-1.html
|
評分
-
查看全部評分
|