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

📄 max517c3.c

📁 单片机C语言教程
💻 C
字号:
/*************************************************************/
/* 这是MAX517 C51语言程序-不是调用汇编的,文件名为MAX517C3.C  */
/* 功能:本程序是实现MAX517芯片的D/A转换。程序中转换的十六    */
/*   进制值依次为10H,20H,40H,80H,0FFH,00H, OUT脚输出转换后    */
/*   的模拟信号,它既可用万用表的直流电压档测试,也可用示波器 */
/*   的探头点在此处观察。                                     */
/**************************************************************/
#include <reg52.h>			 	// 引用标准库的头文件
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit SDA = P1^0;				// MAX517串行数据
sbit SCL = P1^1;				// MAX517串行时钟
uchar i;

void delay(uint t)      // 延时t毫秒
{
	uint i;
	while(t--)
	{
		for (i=0;i<125;i++) // 对于12M时钟,约延时1ms
		{}
	}
}
void start(void)  // 起始条件子程序
{
	SDA = 1;
	SCL = 1;
	_nop_();
	SDA = 0;
	_nop_();
}
void stop(void)   // 停止条件子程序
{
	SDA = 0;
	SCL = 1;
	_nop_();
	SDA = 1;
	_nop_();
}
void ack(void)   // 应答子程序
{
	SDA = 0;
	_nop_();
	SCL = 1;
	_nop_();
	SCL = 0;
}
void send(uchar ch) // 发送数据子程序,ch为要发送的数据
{
	uchar BitCounter = 8; 	//位数控制
	uchar tmp; 				      //中间变量控制
	do
	{
		tmp = ch;
		SCL = 0;
		_nop_();
		if ((tmp&0x80)==0x80)//如果最高位是1
			SDA = 1;
		else
			SDA = 0;
		SCL = 1;
		tmp = ch<<1;				//左移
		ch = tmp;
		BitCounter--;
	}
	while(BitCounter);
	SCL = 0;
}
void DACOut(uchar ch) // 串行DA转换子程序
{
	start();						// 发送启动信号
	send(0x58);					// 发送地址字节
	ack();
	send(0x00);					// 发送命令字节
	ack();
	send(ch);						// 发送数据字节
	ack();
	stop();							// 结束一次转换
}
void main(void)      // 主程序
{
    SP=0xcf;
    delay(2000);
    i=0x10;          // 对数字0x10作数模转换
    DACOut(i);
    delay(2000);     // 延时约2s
    i=0x20;          // 对数字0x20作数模转换
    DACOut(i);
    delay(2000);     // 延时约2s
    i=0x40;
    DACOut(i);
    delay(2000);
    i=0x80;
    DACOut(i);
    delay(2000);
    i=0xff;
    DACOut(i);
    delay(2000);
    i=0x00;
    DACOut(i);
    delay(2000);
   	while(1)
   	{ // 对数字0~255进行数模转换
	      for (i=0;i<=255;i++)
        {
       	delay(1000);			// 间隔约1s
  	    DACOut(i);			  // 调用串行DA转换子程序
        }
	     delay(2000);				// 延时2s
    }
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -