📄 wave.c
字号:
#include<reg52.h>
#include<intrins.h>
#include "wave.h"
void da_out(void); //声明函数
sbit DIN=0x97; //P1.7位定义
sbit SCLK=0x96; //P1.6位定义
sbit DACS=0x95; //P1.5位定义
sbit SWF1 =0x94; //P1.4位定义
sbit SWF0 =0x93; //P1.3位定义
sbit WDI =0x92; //P1.2位定义
sbit FLAG = 0x90;
IUI word; //IUI即idata unsigned int,在wave.h中预定义
void main(void){
IUI i;
TMOD =0x01; //定时器0方式1;
TH0=0xff;TL0=0x00; //置定时器0常数;
TR0=1; //启动定时器0
ET0=1;EA=1; //开定时器中断及总中断
SWF0=1;SWF1=1; //设P1.3,P1.4为输入
WDI=1; //看门狗输入置高电平
while(1){
for(i=0;i<128;i++){
FLAG=1; //置标志,FLAG在定时器0中断程序中被清除
WDI=0;_nop_();WDI= 1;//看门狗复位
if(SWF1) word=512; //SWF1=1时,DA输出同一量,无正弦信号输出
else{
if(SWF0) word=waveh[i];//取倍频数字量
else word=wavel[i]; //取基频数字量
}
word=word<<6; //10位数字量移至高位
while(FLAG); //等待,直至定时器中断程序中清FLA G
da_out(); //调用DA输出子程序
}
}
}
void timer0(void) interrupt 1 using 2{
TH0=0xff;TL0=0x00;//重置定时器常数
FLAG=0;//清主程序中的等待标志
}
void da_out(void){
IUI i;
SCLK =0;_nop_();DACS=0; //准备传送数据
for(i=0;i<10;i++){
DIN= (bit)(word&Ox80); //取最高位送数据线
word = word << 1; //左移,准备下一位传送
SCLK =1;_nop_();SCLK =0; //一个CLK信号
}
DACS= 1;_nop_();SCLK=1; //传送结束
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -