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

📄 pic.c

📁 医护仪下位机 选用PIC12F629 晶振 内部4M
💻 C
📖 第 1 页 / 共 2 页
字号:
		{
	        i-- ;
	        RXData.State  = ( ConmuRXBit ()<<i ) ;
		}
		while (i);*/

		RXData.State   = ( ConmuRXBit ()<<2 ) ;
		RXData.State  |= ( ConmuRXBit ()<<1 ) ;
		RXData.State  |= ( ConmuRXBit ()<<0 ) ;

		//接收校验
		/*RXData.State  = 0 ;
	    i = 4 ;
	    do
		{
	        i-- ;
	        ConmuCheck  = ( ConmuRXBit ()<<i ) ;
		}
		while (i);*/

		ConmuCheck     = ( ConmuRXBit ()<<3 ) ;
		ConmuCheck    |= ( ConmuRXBit ()<<2 ) ;
		ConmuCheck    |= ( ConmuRXBit ()<<1 ) ;
		ConmuCheck    |= ( ConmuRXBit ()<<0 ) ;

		//发送应答
		if ( ConmuCheck == DataCheck (RXData.Operation,RXData.Adress,RXData.State) ) //接收成功
		{
		    ConmuTXBit (0);
		    RXSign = 1 ;
		}  
		else  ConmuTXBit (1);    
	}
	SEI(); //re-enable interrupts 
	
}
/*********************************************************************************************************
** 函数名称: WriteAdress
** 功能描述: 向EErom写地址数据
** 输 入: A : 地址数据
**         B :
**         C :
** 输 出: 0 :
**         1 :
** 全局变量:
** 调用模块: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void WriteAdress ( unsigned char WriteAdressData )
{
    /*
    ;#asm   ;参照datasheet
    ;bsf   STATUS,RP0                ; Bank 1
    ;movlw CONFIG_ADDR               ;
    ;movwf EEADR                     ;  Address to read

    ;bsf STATUS,RP0  				;Bank 1
	;bsf EECON1,WREN 				;Enable write
	;bcf INTCON,GIE  				;Disable INTs
	;movlw _WriteAdressData          ;Unlock write
	;movwf EECON2    				;
	;bsf EECON1,WR   				;Start the write
	;bsf INTCON,GIE  				;Enable INTS

    ;bcf EECON1,WREN 				;Disable write
	;#endasm
    */
    CLI();
    EEADR = EEROM_ADDR ;
    WREN = 1 ; 
    EECON2 = WriteAdressData ;
    WR = 1 ;
    SEI();
    WREN = 0 ; 
}

/*********************************************************************************************************
** 函数名称: ReadAdress
** 功能描述: 读EErom中的地址数据
** 输 入: A :
**         B :
**         C :
** 输 出: 0 : 地址数据
**         1 :
** 全局变量:
** 调用模块: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
unsigned char ReadAdress ( void )
{
    unsigned char ReadAdressData ;
    /*
    ;#asm ;参照datasheet
	;bsf   STATUS,RP0                ; Bank 1
    ; movlw CONFIG_ADDR               ;
    ;movwf EEADR                     ;  Address to read
    ;bsf   EECON1,RD                 ;EE Read
    ;movf  EEDATA,_ReadAdressData    ;Move data to ReadAdressData
    ;#endasm
    */
    EEADR = EEROM_ADDR ;
    RD = 1 ; 
    ReadAdressData = EEDATA ;

	return ReadAdressData ;
}

/*********************************************************************************************************
** 函数名称: ControlOperation
** 功能描述: 对各个模块进行控制,包括:语音电源控制 
** 输 入: A :
**         B :
**         C :
** 输 出: 0 :
**         1 :
** 全局变量:
** 调用模块: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void ControlOperation (void)         //操作
{
    if( RXSign == 0 )return ; //没接收到数据不做处理
	RXSign = 0 ;
	switch ( RXData.Operation )  //判断操作内容
	{
	    case SETADRESS  : WriteAdress (RXData.Adress) ; break ; //修改地址
		case CONTROL    : if(LocalAdress!=RXData.Adress) {break ;} 
		                  else { LocalState = RXData.State ;break; }  //修改状态
		case RESET      : LocalState = NOTHINE ; break ;                    //复位
		default : return ;
	}

	if ( LocalState == STARTTALK )POWERCONTR_SET ;
	else POWERCONTR_CLR ;

}
/*********************************************************************************************************
** 函数名称: Delay
** 功能描述: 延时函数,用于按键去抖等
** 输 入: A :
**         B :
**         C :
** 输 出: 0 :
**         1 :
** 全局变量:
** 调用模块: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Delay (void)
{
    unsigned int i ;
	for(i=3000;i>0;i--);
}
/*********************************************************************************************************
** 函数名称: BellRing
** 功能描述: 响铃
** 输 入: A :
**         B :
**         C :
** 输 出: 0 :
**         1 :
** 全局变量:
** 调用模块: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void BellRing (void)
{
    unsigned int i,j ;

    BELL_DDR_OUT ;
    for(i=3000;i>0;i--)
    {
        BELL_SET ;
        for(j=10;j>0;j--);
        BELL_CLR ;
        for(j=10;j>0;j--);
    }
    BELL_DDR_IN  ;
}

/*********************************************************************************************************
** 函数名称: DisposeKey
** 功能描述: 按键扫描函数,
** 输 入: A :
**         B :
**         C :
** 输 出: 0 :
**         1 :
** 全局变量:
** 调用模块: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void DisposeKey (void)
{
   CALLKEY_DDR_IN;
   asm("nop") ;
   asm("nop") ;
   if (CALLKEY_L)
	{//1
	    Delay();
		if (CALLKEY_L)
	    {
	        if (CALLKEY_H)
	        {
	            Delay();
				if (CALLKEY_H)
	    		{
	                LocalState = STARTCALL ;
					TXSign = 1 ;    //发送通话请求
                    CALLKEY_DDR_OUT;//指示灯点亮
                    CALLKEY_SET ;   
                    BellRing () ;                     		
	    		}
		    }
		
	    }
	}//1
	CALLKEY_DDR_OUT;
	
	if (CANCELKEY_L)
	{//2
	    Delay();
		if (CANCELKEY_L)
	    {
	        if (CANCELKEY_H)
	        {
	            Delay();
				if (CANCELKEY_H)
	    		{
	                LocalState = CANCELCALL ;
					POWERCONTR_CLR ;
					TXSign = 1 ;     //发送呼叫取消
                    CALLKEY_DDR_OUT; //指示灯熄灭
                    CALLKEY_CLR ;    		
	    		}
		    }
		
	    }
	}//2
}


/*********************************************************************************************************
** 函数名称: port_init
** 功能描述: I/O初始化
** 输 入: A :
**         B :
**         C :
** 输 出: 0 :
**         1 :
** 全局变量:
** 调用模块: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void port_init(void)
{
   TRISIO = 0xFF ;    //设定为输入
   GPIO   = 0 ;       //
   //WPU    = 0xFF ;  //弱上拉
   POWERCONTR_DDR_OUT ;
   POWERCONTR_CLR ;

   CALLKEY_DDR_OUT ;
   CALLKEY_CLR ;

   CANCELKEY_DDR_IN ;
   BELL_DDR_IN  ; 
   RX_DDR_IN ;
   TX_DDR_OUT ;
   TX_PORT_L ;
}

/*********************************************************************************************************
** 函数名称:  init_devices 
** 功能描述:  系统初始化函数
** 输 入: A :
**         B :
**         C :
** 输 出: 0 :
**         1 :
** 全局变量:
** 调用模块: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();


 SEI(); //re-enable interrupts
 //all peripherals are now initialized
}

/*********************************************************************************************************
** 函数名称: main
** 功能描述: 主函数
** 输 入: A :
**         B :
**         C :
** 输 出: 0 :
**         1 :
** 全局变量:
** 调用模块: 
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void main(void)
{
 init_devices();
 //insert your functional code here...
 LocalAdress = ReadAdress () ;  //读地址
 LocalState = NOTHINE ;
 while (1)
 {
     Conmunication () ;  //通讯
	 ControlOperation ();         //操作
	 DisposeKey ();      //按键稍描
 }
 
}

⌨️ 快捷键说明

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