⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tl5615b.c

📁 MCS-51单片机实验 39个实用实验和源码
💻 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 + -