📄 pic.c
字号:
{
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 + -