📄 tl5615b.c
字号:
/*-------------------------------------------------------------
**
** 版权:上海航虹高科技有限公司,2002年
**
** 文件名:TL5615b.C //中断中处理波形
**
** 描述: 本文件是独立完成的实验程序。(通用版—中断处理波形)
**--------------------------------------------------------------
*/
/*-------------------------------------------------------------
** 文件包括
**-------------------------------------------------------------
*/
/*-------------------------------------------------------------
**
**
*/
#include <reg51.h> //定义51单片机特殊功能寄存器的值的标准头文件
sbit din=P1^5;
sbit sclk=P1^6;
sbit dacs=P1^7;
unsigned int daIn;
unsigned char step;
unsigned int daData;
unsigned char disp[3];
unsigned code sin[128]={
0x800,0x864,0x8c8,0x92c,0x98c,0x9f0,0xa50,0xab1,
0xb0f,0xb6b,0xbc5,0xc1c,0xc71,0xcc3,0xd13,0xd5f,
0xda8,0xded,0xe2f,0xe6c,0xea6,0xedc,0xf0e,0xf3b,
0xf64,0xf88,0xfa7,0xfc2,0xfd8,0xfe9,0xff6,0xffd,
0xfff,0xffd,0xff6,0xfe9,0xfd8,0xfc2,0xfa7,0xf88,
0xf64,0xf3b,0xf0e,0xedc,0xea6,0xe6c,0xe2f,0xded,
0xda8,0xd5f,0xd13,0xcc3,0xc71,0xc1c,0xbc5,0xb6b,
0xb0f,0xab1,0xa52,0x9f1,0x98f,0x92c,0x8c8,0x864,
0x800,0x79b,0x737,0x6d3,0x670,0x60e,0x5ad,0x54e,
0x4f0,0x494,0x43a,0x3e3,0x38e,0x33c,0x2ec,0x2a0,
0x257,0x212,0x1d0,0x193,0x159,0x123,0x0f1,0x0c4,
0x09b,0x077,0x058,0x03d,0x027,0x016,0x009,0x002,
0x000,0x002,0x009,0x016,0x027,0x03d,0x058,0x077,
0x09b,0x0c4,0x0f1,0x123,0x159,0x193,0x1d0,0x212,
0x257,0x2a0,0x2ec,0x33c,0x38e,0x3e3,0x43a,0x494,
0x4f0,0x54e,0x5ad,0x60e,0x670,0x6d3,0x737,0x79b
};
/*-------------------------------------------------------------
** 函数定义
**-------------------------------------------------------------
*/
/*-------------------------------------------------------------
** 函数名:da1
** 格式: void da1()
** 返回值: 无
** 描述: 数模转换(12位数据位)
** 算法:从高位一位位传送,在SCLK上升沿写入
**-------------------------------------------------------------
*/
void da1()
{
unsigned char j;
dacs=0;
for(j=0;j<12;j++)
{
if((daData&0x800)==0)
din=0;
else
din=1;
sclk=1;
sclk=0;
daData=daData<<1;
}
dacs=1;
}
/*-------------------------------------------------------------
** 函数名:da
** 格式: void da()
** 返回值: 无
** 描述: 数模转换(16位数据位)
** 算法:从高位一位位传送,在CLK上升沿写入
**-------------------------------------------------------------
*/
void da()
{
unsigned char j;
dacs=0;
for(j=0;j<16;j++)
{
if((daData&0x8000)==0)
din=0;
else
din=1;
sclk=1;
sclk=0;
daData=daData<<1;
}
dacs=1;
}
/*-------------------------------------------------------------
** 函数名:zigzap
** 格式: void zigzap()
** 返回值: 无
** 描述: 锯齿波
** 算法:
**-------------------------------------------------------------
*/
void zigzap()
{
daIn+=64;
if(daIn>0xffc)daIn=0;
daData=daIn;
da1();
}
/*-------------------------------------------------------------
** 函数名:sine
** 格式: void sine()
** 返回值: 无
** 描述: 正弦波
** 算法:
**-------------------------------------------------------------
*/
void sine()
{
step=step&0x7f;
daData=sin[step];
da1();
step+=1;
}
/*-------------------------------------------------------------
**函数名:timer0
**格式:void timer0()interrupt 1 using 1
**返回值:无
**描述:定时中断0子程序,定时时间为50us,中断时调用正弦波子程序
**算法:首先重置定时常数, 每次响应中断,都要调用正弦波子程序
**--------------------------------------------------------------
*/
void timer0()interrupt 1 using 1
{
TR0=0;
TL0=0xd1;//50us
TH0=0xff;//
TR0=1;
sine();
// zigzap();
}
/*-------------------------------------------------------------
**函数名:main
**格式:void main()
**返回值:无
**描述:初始化
**算法:
**--------------------------------------------------------------
*/
void main()
{
TMOD=0x01;//T0方式1
TL0=0xd1;
TH0=0xff;
TR0=1; //T/C0
ET0=1; //T/C0 interrupt
EA=1; // cpu interrupt
sclk=0;
dacs=1;
while(1){;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -