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

📄 ken.c

📁 是一个电话接口模块
💻 C
字号:
#include <AT89X52.H>
#include <string.h>
#include <ctype.h>

#define UCHAR	unsigned char
#define UINT    unsigned int

UCHAR data TIMER0_COUNT;

UCHAR data receivedata[31][9];             //定义从采集端传送的数据存放缓存器RAM中

sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;

UCHAR Xgetchar(void);
viod Timer0and1Init(void)     /*初始化定时器0和1*/
{
 IP=0x00;
 TCON=0x00;
 TMOD=0x21;               /*定时器0工作于1模式,定时器1工作于2模式*/
 TH0=0x3c;
 TL0=0xb0;
 TIMER0_COUNT=0x00;
 IE=0x82;      /*开定时器0中断*/
 TR0=1;
 TR1=1;
}

void serialinit(void)  /*串口初始化,波特率为2400 公式TH1=TL1=256-(Fosc/384*波特率))*/
 {TH1=0xf5;       /*10M OSC*/
  TL1=0xf5;
  SCON=0x50;
  PCON=0x00;
 }
/**************************************
*            串口接收                 *
*入口参数:无                         *
*返回值:0:无数据,                   *
**************************************/
UCHAR SerialReceive(void)
{
	UCHAR data SerialValue=0;
	while(RI==0)  ; 
	  
	SerialValue=SBUF;
    RI=0;

	return(SerialValue);
}
/**************************************
*            串口发送                 *
*入口参数:发送的数据                 *
*返回值:无                           *
**************************************/
void SerialTransmit(UCHAR Serial_Value)
{
	UCHAR data SerialValue;
	UINT data i;
	SerialValue=Serial_Value;
	
    SBUF= SerialValue;

	for (i=0;i<1000;i++ ) /*延迟一会儿*/
	 {  
	 }
}
/**************************************
*            字符显示                 *
*入口参数:字符串                 *
*返回值:无                           *
**************************************/
void Display(UCHAR *str_pointer)
{
	UCHAR data string_length,temp;
	UINT  data i;
	string_length=strlen(str_pointer);
    for (i=0;i<string_length ;i++ )
	{
		temp=*str_pointer;
		str_pointer++;
		SerialTransmit(temp);  
	}
}
/**************************************
*            字符转换成整型           *
*入口参数:接收字符型数据             *
*返回值:  整型                       *
**************************************/
UINT ctoi(UCHAR cc)
{
	UINT data yy=20;
	if (isxdigit(cc)==1)
	{
		if (isdigit(cc))
		{yy=cc-'0';}
		 else 
		 {
		 	if (isupper(cc))
		 		{yy=cc-'A'+10;}
		 		else {yy=cc-'a'+10;}
		 }
	}	
	return(yy);
}
/**************************************
*            整型转换成字符16         *
*入口参数:接收整型型数据             *
*返回值:  none                       *
**************************************/
UINT itoc(UCHAR cc)
{
  if (((cc & 0xf0)/16)<=9)
	{
	 SerialTransmit('0'+((cc & 0xf0)/16));	
	}else
	if (((cc & 0xf0)/16)<=0x0f)
	{
	 SerialTransmit('A'+((cc & 0xf0)/16)-10);	
    }

	if ((cc & 0x0f)<=9)
	{
	 SerialTransmit('0'+(cc & 0x0f));	
	}else
	if ((cc & 0x0f)<=0x0f)
	{
	 SerialTransmit('A'+(cc & 0x0f)-10);	
	}
}
/**************************************
*            整型转换成字符10         *
*入口参数:接收整型型数据             *
*返回值:  none                       *
**************************************/
UINT itoc10(UCHAR cc)
{
     if((cc/10)>=1)
     {
	 SerialTransmit('0'+(cc/10));
	 SerialTransmit('0'+(cc-((cc/10)*10)));
	 }
	 else
	 SerialTransmit('0'+cc);
	 
}
/**************************************
*            串口接收处理             *
*入口参数:发送的数据                 *
*返回值:无                           *
**************************************/
void SerialProcess()
{
	Receive_Value=SerialReceive();
	
	if(Receive_Value) 
	{
	
	}
  
}
/**************************************
*            485发送处理             *
*入口参数:发送的数据                 *
*返回值:无                           *
**************************************/
void RS485Send(UCHAR cc)
{
  完成数据打包及相关处理
}

/***********************************
*      定时器0中断服务程序         *
***********************************/
void Timer0(void) interrupt 1 using 2
{
 TH0=0x3c;
 TL0=0xb0;
 TIMER0_COUNT++
 if((TIMER0_COUNT>=8)//修改
   {
    P1_6=!P1_6;           //看门狗刷新 
   }
   TR0=1;
}
/***********************************
 *         看门狗刷新              *
 *                                 *
 **********************************/
 void runDog(void)
 { P1_6=!p1_6;
 }

/*************************************
*         外部中断0服务程序          *
*          (有振铃时的中断)          *
*************************************/

void int0() interrupt 0 using 2
{

}

/*************************************
*         外部中断1服务程序          *
*    (双音多频信号有效时的中断)      *
*************************************/

void int1() interrupt 1 using 2
{

}

/**************************************
*            E2PROM 写操做程序        *
*入口参数:地址及值                         *
*返回值:无                           *
**************************************/
void WriE2PROM( UCHAR add,UCHAR cc)
{

}  

/**************************************
*            E2PROM 读操做程序        *
*入口参数: 地址                       *
*返回值:结果                    *
**************************************/
UCHAR ReadE2PROM( UCHAR add)
{

}  

/**************************************
*            双音多频发送程序        *
*入口参数: 号码                      *
*返回值:无                         *
**************************************/
void SeadDTMF( UCHAR number)
{

}  

/**************************************
*            双音多频接收程序        *
*入口参数: 无                      *
*返回值:号码                       *
**************************************/
UCHAR ReadDTMF()
{

}  


/************************主函数*******************************/



void  main(void)


 {
  UCHAR data ;

  Timer0and1Init();         //定时器初始化;
  serialinit();             //串口初始化;
  
  

  for(;;)
  {
      //查询下级各子站信息(相关485操作);
      //接收双音多频(上级命令)
	 // 解释命令并执行(发送DTMF)

    
  }
}

⌨️ 快捷键说明

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