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

📄 hardware.c

📁 该程序完成了c8051外围电路的驱动和串口协议的编写。希望能给大家学习51单片机带来帮助
💻 C
📖 第 1 页 / 共 4 页
字号:
//*******************************************************************************
//Copyright (c) 2007,派利斯电子(北京)有限公司 硬件部
//文件名称: Hardware.c
//摘    要: 本文件主要包含PT2060程序中与硬件相关的初始化、操作和I/O操作部分
//当前版本: D-1 
//作    者:  佟文杰
//完成日期: 4/13/2007
//修 改 人:
//修改原因:
//修改日期:
//*******************************************************************************
#include "Hardware.h"
#include <C8051F020.H>
#include "sja1000.h"
#include "intrins.h"

	 
sbit  LED_OK    = P3^5;
sbit  LED_Alarm = P3^4;

sfr16 TMR3RL    = 0x92;                 // Timer3 reload value
sfr16 TMR3      = 0x94;                 // Timer3 counter
sfr16 ADC0      = 0xbe;                 // ADC0 data  

#define  TESTLEDON      P4 = P4&0xf7
#define  TESTLEDOFF     P4 = P4|0x08
#define  FLASHFIRSTADDRESS   0xa000
#define  MAXGROUP        16

#define  SAMPLECOMPLETETRUE    1
#define  SAMPLECOMPLETEFALSE   0



sfr16 RCAP4 = 0xe4; 

#define SYSCLK           22118400

xdata unsigned char uchConfigStatusBak[3]; 			  
xdata unsigned char uchBypassStatusBak[3];		   
xdata unsigned char uchTripleStatusBak[3]; 
xdata unsigned char uchConfigStatus = 1; 			  
xdata unsigned char uchBypassStatus = 1;		   
xdata unsigned char uchTripleStatus = 1;
data  unsigned char uchSampleType;	   
xdata unsigned int  uiHeartbeatValue = 0; 
xdata unsigned char uchSampleCompleteStatus;
xdata unsigned int  uiGroupLength;			


//-----------------------------------------------------------
// AD采样的数组定义
//------------------------------------------------------
 unsigned int xdata SampBuffer0[2048];
xdata unsigned int SampBuffer1[2048]; 
xdata unsigned int SampBuffer2[2048];
xdata unsigned int SampBuffer3[2048];
//xdata unsigned int SampBuffer4[2048];
//xdata unsigned int SampBuffer5[2048];

unsigned int data SamplePTR0;  
unsigned int data SamplePTR1;    
unsigned int data SamplePTR2;   
unsigned int data SamplePTR3;
unsigned int data SamplePTR4;   
unsigned int data SamplePTR5;

unsigned char idata uchReceiData[13];           //接收数据
unsigned char xdata uchCANReSendFlag=0x00;

unsigned char xdata uchHWCPUAdress;

//----------------------------------------------
unsigned char xdata s_uchTempData1;
unsigned char xdata s_uchTempData2;
//------------------------------------------------------

bit bdata b_NotIntegralChannelType;
bit bdata b_IntegralChannelType;
bit bdata b_LVDTChannelType;

unsigned char idata uchSampleLocationCounter;

//----------------------------------------------------------
//函数名称:void SysCLKInit(void)
//功    能:系统时钟初始化
//输入参数:无
//返    回:无
//完成日期:4/12/2007
//----------------------------------------------------------
void SysCLKInit(void)
{
	unsigned char  i;                   

	OSCXCN = 0x67;               // start external oscillator with 22.1184MHz crystal                                      
	for (i=0; i<254; i++)          
    {;}
	while (!(OSCXCN & 0x80))    // Wait for crystal osc. to settle
    {;}
    OSCICN = 0x88; 
                              // select external oscillator as SYSCLK	source and enable missing clock	detector
                      
}

//--------------------------------------------------------
//函数名称:void InitCPU(void) 
//功    能:交叉开关配置和端口初始化 无看门狗
//输入参数:无
//返    回:无
//完成日期:4/12/2007
//--------------------------------------------------------
void InitCPU(void) 
{		
	XBR0 = 0X87;	           //connect cp0,UART0 I/O,SPI,SMBus
    XBR1 = 0X7F;	           //connect T2EX,T2E,INT1,T1,INT0,T0,CP1						  
    XBR2 = 0X40;	           //enable I/O,

    P0MDOUT = 0x00; 		   //端口P0配置为露极开路
    P1MDIN = 0X00; 	           //P1 被配置成为模拟输入
    P2MDOUT = 0x00;	
	P3MDOUT |= 0x30;
	P3MDOUT &= 0X3f;  

    P3IF = P3IF | 0x0c;		   //外部中断6,外部中断7  上升沿触发
    P74OUT |= 0xf3;

    P0 = 0xff;
    P1 = 0xff;
	P3 |= 0xC0;
    P5 = 0xff; 	
}

//-----------------------------------------------------------------
//函数名称:void HWOKLEDControl(unsigned char uchOKStatus)
//功    能:检测系统OK灯的控制P3.5        
//输入参数:OK状态
//返    回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void HWOKLEDControl(unsigned char uchOKStatus)
{
	if (uchOKStatus != 0)
    {
		LED_OK = 0;
    } 
    if (uchOKStatus == 0)
	{
		LED_OK = 1;
	}   
}

//--------------------------------------------------------------------------------------------------
//函数名称:void LEDCommunicationControl(void)
//功    能:控制通信灯的执行
//输入参数:无
//返    回:无			  
//完成日期:4/16/2007
//--------------------------------------------------------------------------------------------------
void LEDCommunicationControl(void)
{
	LED_OK = ~ LED_OK;
}

//-----------------------------------------------------------------
//函数名称:void RunLEDStartControl(void)
//功    能:检测系统运行状态控制灯开始运行       
//输入参数:无
//返    回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void RunLEDStartControl(void)
{
	P4 &= ~0x08;	  
}

//-----------------------------------------------------------------
//函数名称:void RunLEDStopControl(void)
//功    能:检测系统运行状态控制灯停止运行       
//输入参数:无
//返    回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void RunLEDStopControl(void)
{
	P4 |= 0x08;	
}

//-----------------------------------------------------------------
//函数名称:void AlarmLEDControl(unsigned char uchAlarmStatus)
//功    能:检测系统是否报警的灯的控制P3.6       
//输入参数:报警与否状态
//返    回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void AlarmLEDControl(unsigned char uchAlarmStatus)
{
	if (uchAlarmStatus == 0)
    {
		LED_Alarm = 1; 
    }
    else
	{
		LED_Alarm = 0;  
	}
}

//-----------------------------------------------------------------
//函数名称:void SetOKIOControl(unsigned char uchChannel)
//功    能:通过状态判断得到P4.2、P4.1和P4.0端口的状态供三冗余使用
//输入参数:通道号
//返    回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void SetOKIOControl(unsigned char uchChannel)
{
	unsigned char uchTemp; 
	if (uchChannel == 1)
    {
    	P4 = P4 & 0xf8;	   //0 0 0
    }
   	if (uchChannel == 2)
   	{
    	EA = 0;
		uchTemp = P4;
		uchTemp &= 0xf9;
		uchTemp |= 0x01;	   //0 0 1
		P4 = uchTemp;
		EA = 1;
   	}
}

//-----------------------------------------------------------------
//函数名称:void SetAlertIOControl(unsigned char uchChannel)
//功    能:通过状态判断得到P4.2、P4.1和P4.0端口的状态供三冗余使用
//输入参数:通道号
//返    回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void SetAlertIOControl(unsigned char uchChannel)
{
	unsigned char uchTemp; 
	if (uchChannel == 1)
    {
		EA = 0;
		uchTemp = P4;
		uchTemp &= 0xfc;	 //1 0 0
		uchTemp |= 0x04;
		P4 = uchTemp;
		EA = 1;
    }
    if (uchChannel == 2)
    {
        EA = 0;
		uchTemp = P4;
		uchTemp &= 0xfd;
		uchTemp |= 0x05;   //1 0 1
		P4 = uchTemp;
		EA = 1;
    }
}

//-----------------------------------------------------------------
//函数名称:void SetDangerIOControl(unsigned char uchChannel)
//功    能:通过状态判断得到P4.2、P4.1和P4.0端口的状态供三冗余使用
//输入参数:通道号
//返    回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void SetDangerIOControl(unsigned char uchChannel)
{
	unsigned char uchTemp;

	if (uchChannel == 1)
    {
    	EA = 0;
		uchTemp = P4;
		uchTemp &= 0xfa;
		uchTemp |= 0x02;	   //0 1 0
		P4 = uchTemp;
		EA = 1;
    }
   if (uchChannel == 2)
   {
        EA = 0;
		uchTemp = P4;
		uchTemp &= 0xfb;
		uchTemp |= 0x03;  //0 1 1
		P4 = uchTemp;	
		EA = 1;	
   }
}

//-----------------------------------------------------------------
//函数名称:void SetNotOKIOControl(unsigned char uchChannel)
//功    能:通过状态判断得到P4.2、P4.1和P4.0端口的状态供三冗余使用
//输入参数:通道号
//返    回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void SetNotOKIOControl(unsigned char uchChannel)
{
	unsigned char uchTemp;

	if (uchChannel == 1)
    {
    	EA = 0;
		uchTemp = P4;
		uchTemp &= 0xfe;	  //1 1 0
		uchTemp |= 0x06;
		P4 = uchTemp;
		EA = 1;
    }
    if (uchChannel == 2)
    { 
	   	EA = 0;
	    P4 = P4 | 0x07;	   //1 1 1 
		EA = 1;

    }      
}

//----------------------------------------------------------------
//函数名称:unsigned char HWConfigureStatus(void)
//功    能:从IO口P3.3检测Configure状态       
//输入参数:无
//返    回:返回Configure状态    =1,接受配置信息
//完成日期:4/12/2007
//----------------------------------------------------------------
unsigned char HWConfigureStatus(void)		
{  		
	xdata unsigned char uchConfigStatus;         
    uchConfigStatus = P3 & 0x08;  
	uchConfigStatus = uchConfigStatus>>3;  
	  	  	                                                
	return uchConfigStatus; 
}

//----------------------------------------------------------------
//函数名称:unsigned char HWBypassStatus(void)
//功    能:从IO口P5.5检测Bypass状态       
//输入参数:无
//返    回:返回Bypass状态  ,非Bypass为高电平,低电平为Bypass状态
//完成日期:4/12/2007
//----------------------------------------------------------------
unsigned char HWBypassStatus(void)
{		
	xdata unsigned char uchBypassStatus;         
		   
	uchBypassStatus = P5 & 0x20;  
	uchBypassStatus = uchBypassStatus>>5;  	                                                	

	return uchBypassStatus;    
}

//--------------------------------------------------------------------------
//函数名称:unsigned char HWTripleStatus(void)
//功    能:从IO口P5.6检测报警倍增状态       
//输入参数:无
//返    回:返回报警Triple状态,高电平为非报警倍增状态,低电平为报警倍增状态
//完成日期:4/12/2007
//--------------------------------------------------------------------------
unsigned char HWTripleStatus(void)
{         		
	xdata unsigned char uchTripleStatus;         
		   
    uchTripleStatus = P5 & 0x40;  
	uchTripleStatus = uchTripleStatus>>6;  
	                                                
	return uchTripleStatus;    
}

//--------------------------------------------------------------------------
//函数名称:void StopHeartBeat(void)
//功    能:停止心跳   
//输入参数:无
//返    回:无
//完成日期:4/12/2007
//--------------------------------------------------------------------------
void StopHeartBeat(void)
{
	EIE2 &= 0xfb;		         	//ET2 = 0;	 
}

//--------------------------------------------------------------------------
//函数名称:void StartHeartBeat(void)
//功    能:开始心跳   
//输入参数:无
//返    回:无
//完成日期:4/12/2007
//--------------------------------------------------------------------------
void StartHeartBeat(void)
{
	EIE2 |= 0x04;	             //ET2 = 1;

⌨️ 快捷键说明

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