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

📄 main.c

📁 proteus 的51实验板 .
💻 C
📖 第 1 页 / 共 2 页
字号:

#include <reg52.h>

#include<stdio.h>

#include <string.h>
#include "intrins.h"


sbit wr_62256 =P2^0;
sbit oe_62256 =P2^1;
sbit ce_62256 =P2^2;


sbit SDA = P2^7;
sbit SCL = P2^6	;


unsigned char  	slvadr;

sbit TLC1456_so =P1^4;  
sbit TLC1456_clk =P1^6; 
sbit TLC1456_cs0 =P1^5; 
sbit TLC1456_cs1 =P1^3; 
sbit TLC1456_clr =P1^7; 

void SendD(unsigned int dat,unsigned char num) 
{
	unsigned char i=0;

   if (num==0)
	TLC1456_cs0 = 0;
   else
	TLC1456_cs1 = 0;

	for (i=12; i>0; i--)
	{
		TLC1456_so = dat & 0x0200;
		TLC1456_clk = 1;
		dat <<= 1;
		TLC1456_clk = 0;		
	}

   if (num==0 )
	TLC1456_cs0 = 1;
   else 
    TLC1456_cs1 = 1;

	TLC1456_clk = 0;

}

sbit TLC1864_sdo  =P1^1; 
sbit TLC1864_clk  =P1^2; 
sbit TLC1864_conv =P1^0; 
unsigned int get_ADC(void)
{
   	unsigned char i=0;
	unsigned  int tmp=0;

	TLC1864_conv=0;
	TLC1864_sdo=1;
	TLC1864_clk=0;
/*	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();
	_nop_();_nop_();_nop_();_nop_();_ */	 

	for (i=12;i>0;i--)
	{	
	    _nop_();_nop_();_nop_();_nop_();
		_nop_();_nop_();_nop_();_nop_();
		TLC1864_clk=1;

		TLC1864_clk=0;

		tmp <<= 1;
		if ( TLC1864_sdo  )
			tmp |= 0x01;

		_nop_();_nop_();_nop_();_nop_();
		_nop_();_nop_();_nop_();_nop_();
	}

	 TLC1864_conv=1;
 return  tmp;
}



#define TRUE 1
#define FALSE 0

 void 	IIC_Start(void);
 void 	IIC_Stop(void);
 void 	IIC_TxByte(unsigned char  tx_byte);
 unsigned char  	IIC_RxByte(void);
 unsigned char  	IIC_WaitAck(void);
 void 	IIC_SendAck(void);
 void 	IIC_SendNoAck(void);


 /*******************************************************************************
*** 函 数 名: static void IIC_Start(void)
*** 功能描述: 
*** 全局变量: NO !
*** 输		入: NO !
*** 输		出: NO !
*** 创 建 人:huangtiexiong			  日期:2006-11-28
*** 修 改 人:										日期:2006-11-28
*** 函数说明: Start IIC.
/******************************************************************************/
 void IIC_Start(void)
{
	EA = 0;			//关中断;
	SDA = 1;		//初始化总线;
	SCL = 1;		
	_nop_();
	SDA = 0;		//启动总线;
	_nop_();
	SCL = 0;		//准备数据发送,启动IIC之后传输线全部置0;
	}
/*******************************************************************************
*** 函 数 名: static void 	IIC_TxByte(unsigned char tx_byte)
*** 功能描述: 发送一个字节;
*** 全局变量: NO !
*** 输		入: tx_byte
*** 输		出: NO !
*** 创 建 人:huangtiexiong			  日期:2006-11-28
*** 修 改 人:										日期:2006-11-28
*** 函数说明: 操作完成后保证SCL为0;
/******************************************************************************/
 void 	IIC_TxByte(unsigned char  tx_byte)
{//SDA:0; SCL:0.
	unsigned char  i;
	for(i=0;i<8;i++)
	{
		if(tx_byte & 0x80)
			SDA = 1;					//因为Start函数中以把SCL拉低,数据直接发送;
		else 
			SDA = 0;
		tx_byte <<= 1;			//因为发送顺序:由Msb——>Lsb;
		SCL = 1;		
		_nop_();		//延时;
		SCL = 0;		
		}
	}
/*******************************************************************************
*** 函 数 名: static bool 	IIC_WaitAck(void)
*** 功能描述: 发送一个字节;
*** 全局变量: NO !
*** 输		入: tx_byte
*** 输		出: NO !
*** 创 建 人:huangtiexiong			  日期:2006-11-28
*** 修 改 人:										日期:2006-11-28
*** 函数说明: 操作完成后保证SCL为0;
/******************************************************************************/
 unsigned char  	IIC_WaitAck(void)
{//SDA:U; SCL:0.
	unsigned char  waitTime = 0xff;		//设置Ack信号超时数;
	SDA = 1;		//将数据线拉高;
	SCL = 1;		//启动Ack脉冲;
	_nop_();
	while(SDA)
	{
		waitTime--;
		if(!waitTime)
			{
				SCL = 0;		//SCL=0;
				IIC_Stop();
				return FALSE;
				}
		}
	SCL = 0;		//操作完成后确认SCL为0,此时SDA=0;
	return TRUE;	
	}
/*******************************************************************************
*** 函 数 名: static unsigned char 	IIC_RxByte(void)
*** 功能描述: 接收一个字节;
*** 全局变量: NO !
*** 输		入: NO !
*** 输		出: 接收字节:tmp
*** 创 建 人:huangtiexiong			  日期:2006-11-28
*** 修 改 人:										日期:2006-11-28
*** 函数说明: 操作完成后保证SCL为0;
/******************************************************************************/
 unsigned char  	IIC_RxByte(void)
{//SDA:0; SCL:0;
	unsigned char  tmp = 0;
	unsigned char  i;
	for(i=0;i<8;i++)
	{
		SCL = 0;
		SDA = 1;		//向I/O口写1后准备读入;
		_nop_();
		SCL = 1;
		_nop_();
		tmp <<= 1;
		if(SDA)
			{
				tmp |= 0x01;
				}
		}
	SCL = 0;		//SCL=0;
	return tmp;	
	}
/*******************************************************************************
*** 函 数 名: static void 	IIC_SendAck(void)
*** 功能描述: 发送应答信号;
*** 全局变量: NO !
*** 输		入: NO !
*** 输		出: NO !
*** 创 建 人:huangtiexiong			  日期:2006-11-28
*** 修 改 人:										日期:2006-11-28
*** 函数说明: 操作完成后保证SCL为0;
/******************************************************************************/
 void 	IIC_SendAck(void)
{
	SDA = 0;
	_nop_();
	SCL = 1;
	_nop_();
	SCL = 0;
	}
/*******************************************************************************
*** 函 数 名: static void 	IIC_SendNoAck(void)
*** 功能描述: 发送非应答信号;
*** 全局变量: NO !
*** 输		入: NO !
*** 输		出: NO !
*** 创 建 人:huangtiexiong			  日期:2006-11-28
*** 修 改 人:										日期:2006-11-28
*** 函数说明: 操作完成后保证SCL为0;
/******************************************************************************/
 void 	IIC_SendNoAck(void)
{
	SDA = 1;
	_nop_();
	SCL = 1;
	_nop_();
	SCL = 0;
	}
/*******************************************************************************
*** 函 数 名: static void 	IIC_Stop(void)
*** 功能描述: 终止IIC传输;
*** 全局变量: NO !
*** 输		入: NO !
*** 输		出: NO !
*** 创 建 人:huangtiexiong			  日期:2006-11-28
*** 修 改 人:										日期:2006-11-28
*** 函数说明: 操作完成后保证SCL为1,同时打开中断;
/******************************************************************************/
 void IIC_Stop(void)
{
	SDA = 0;		//to stop IIC;
	SCL = 0;
	_nop_();
	SCL = 1;
	_nop_();
	SDA = 1;		//IIC Stoped !! 结束IIC之后传输线全部置1;
	EA = 1;			//Set EA.
	}
void init_serialcomm(void)

{																										 
     SCON=0x50;              //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收				   
     PCON=0x00;							 
     ES=1;								  
     TMOD=0x21;   //定时器工作于方式2,自动装载方式				
     TH0=(65536-1000)%256;		
     TL0=(65536-1000)/256;	   
        TL1=0xfd;		
     TH1=0xfd;		  
     ET0=1;			
        TR0=1;		
        TR1=1;	  
     //TI=0;		 
     //   EA=1;  
   //TI=1; 
}

void serial () interrupt 4 using 3 

{   

  /* if(RI)

  { RI=0;

    ch=SBUF;

       TI=1;           //置SBUF空

    switch(ch)
   
   {

   case 0x01 :printf("A");  TI=0;break;

   case 0x02 :printf("B");  TI=0;break;

   case 0x03 :printf("C");  TI=0;break;

   case 0x04 :printf("D");  TI=0;break;

   default  :printf("fg");   TI=0;break;
   }	   
  }*/	
 }
//向串口发送一个字符 
void send_char_com(unsigned char ch)  
{
   SBUF=ch;    while(TI==0);    TI=0;
}//向串口发送一个字符串,strlen为该字符串长度 
void send_string_com(unsigned char *str,unsigned int strlen){  
 unsigned int k=0;  
   do     {        send_char_com(*(str + k));        k++;    } 
   while(k < strlen);
   }   


 void PCF8583_ReadDat(unsigned char addrInter,unsigned char num,unsigned char *buff)
{
	unsigned char i;
	IIC_Start();			//启动IIC Bus;
	IIC_TxByte(0xa0);	//PCF8583设备寻址;命令:写;
	IIC_WaitAck();		//等待Ack信号;
	IIC_TxByte(addrInter);	//发送内部寄存器地址;
	IIC_WaitAck();					//等待Ack信号;
	
	IIC_Start();			//参考PCF读Read Mode时序;
	IIC_TxByte(0xa1);	//PCF8583设备寻址,命令:读;
	IIC_WaitAck();
	
	for(i=0;i<num-1;i++)
	{
		buff[i] = IIC_RxByte();	//读一个字节;
		IIC_SendAck();					//发送应答信号;
		}
	buff[num-1]	= IIC_RxByte();
	IIC_SendNoAck();					//最后一个字节发送非应答信号;
	IIC_Stop();		//终止本次传输,IIC Bus空闲;
	}
 /*******************************************************************************
*** 函 数 名: extern void PCF8583_WriteDat(unsigned char addrInter,unsigned char num,unsigned char *buff)
*** 功能描述: 对PCF8583写;
*** 全局变量: NO !
*** 输		入: addrInter:内部寻址;num:数据长度;buff:数据缓存;
*** 输		出: NO !
*** 创 建 人:huangtiexiong			  日期:2006-11-28
*** 修 改 人:										日期:2006-11-28
*** 函数说明: IIC Start至Stop间传输的字节数不限;
							PCF8583内部寄存器地址附自增功能;
/******************************************************************************/
 void PCF8583_WriteDat(unsigned char addrInter,unsigned char num,unsigned char *buff)
{
	unsigned char i;
	
	IIC_Start();

⌨️ 快捷键说明

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