📄 main.c
字号:
#include <io72321.h>
#include "Global_AT_String.h"
#include "Global_Const.h"
#include "Global_Const_String.h"
#include "Global_Bit.h"
#include "Global_Var.h"
void GSM_Power_Oper(void);
void GSM_Reset_Oper(void);
void GSM_Normal_Oper(void);
void DTMF_API_Oper(void);
void SendString(unsigned char *Str_To_Send,unsigned int Length_Of_SCI_Send);
void SendByte(unsigned char Byte_To_Send);
unsigned char Check_GSM_Ruturn(void);
unsigned char Compare_Str(unsigned char *Comp_Str1,unsigned char *Comp_Str2,unsigned char Comp_Length);
void Wait_GSM_Re_Value(unsigned char *Expt_Re_Value,unsigned char Expt_Re_Length);
void GSM_Reset_Step_Code_1(unsigned char *AT_Command,unsigned char AT_Com_Length,unsigned char *Expt_Re_Value,unsigned char Expt_Re_Length);
void Write_GSM_Re_Power_Value(void);
unsigned char Hex_To_Char(unsigned char Input_Hex);
void Delay_Conut(unsigned int Delay_C);
void Case_GSM_Phone(void);
void Case_GSM_SMS_Send(void);
void Case_GSM_CSQ(void);
void Case_GSM_Phone_Out(void);
void Case_GSM_SMS_Send_Out(void);
void Case_GSM_CSQ_Out(void);
void Case_GSM_SMS_Recv(void);
void Case_GSM_SMS_Recv_Out(void);
unsigned char Char_To_Hex_10(unsigned char Input_Char_H,unsigned char Input_Char_L);
unsigned char Char_To_Hex_16(unsigned char Input_Char_H,unsigned char Input_Char_L);
void Recv_SMS_Deal(void);
void DTMF_API_Ar_Clear(void);
void I2C_Start(void);
void I2C_Slave_Add_Tran(void);
void I2C_Master_Tran(unsigned char Tran_DATA);
unsigned char I2C_Master_Recv(void);
void I2C_Write_Add_Data(unsigned char Word_Address,unsigned char Word_Data);
unsigned char I2C_Read_Add(unsigned char Word_Address);
void I2C_Stop(void);
void API840_Mute(void);
void RF_Check_Deal(void);
/*
void I2C_Write_Byte_24C02(unsigned char Word_Address,unsigned char Word_Data);
unsigned char I2C_Read_Byte_24C02(unsigned char Word_Address);
void I2C_Init(void);
void I2C_Start(void);
void I2C_Stop(void);
//void I2C_Set_Addr(unsigned char Slave_Addr_Write);
void I2C_Write_Data(unsigned char Word_To_Write);
unsigned char I2C_Read_Data(void);
void I2C_Clock(void);
void Delay_1_Cycle(void);
*/
//void Send_SMS_No(unsigned char *Num_Addr,unsigned char Num_Length);
void Send_Hex_Char(unsigned char Hex_To_Send);
void Send_SMS_Head(unsigned char *Num_Addr,unsigned char Num_Length);
void Send_SMS_Cont(unsigned char *Cont_Addr,unsigned char Cont_Length);
void Send_SMS_Length(unsigned char Num_Length,unsigned char Cont_Length);
void GSM_Nor_SMS_Send_Code(unsigned char *Tar_Num,unsigned char Tar_Num_Len,unsigned char *Cont,unsigned char Cont_Len,unsigned int Clr_Flag);
void Send_SMS_ER_Deal(void);
void Send_Hc164_Data(unsigned char Hc164_Sec,unsigned char API840_sc);
//unsigned char Check_DTMF_Record_Value(void);
unsigned char *OutString;
unsigned char I2C_Slave_Address = 0;
unsigned char I2C_Send_Data = 0;
unsigned char I2C_Recv_Data = 0;
/* **********************************************************************
// 串口中断操作
********************************************************************** */
@interrupt void INT_SCI(void)
{
unsigned char chx = 0;
unsigned int i = 0;
if (SCISR & SCI_SR_RDRF)
{
gGSM_AT_Time = 0;
gSCI_Recv_Time = 0;
if (gSCI_Recv_Point != gSCI_Recv_End)
{
gSCI_Recv[gSCI_Recv_Point] = SCIDR;
gSCI_Recv_Point++;
if (gSCI_Recv_Point >= sizeof(gSCI_Recv))
gSCI_Recv_Point = 0;
}
else
{
SCIDR;
gSCI_Recv_Point = 0;
}
}
if (SCISR & SCI_SR_TC)
{
chx = *OutString; //用一个局部变量可以节省一次指针操作
if (gLength > 0)
{
SCIDR = chx;
while ((SCISR&SCI_SR_TC) == 0); //等待上一个发送字节发送完成
gGSM_AT_Time = 0;
OutString++;
gLength--;
}
else
{
SCICR2 &=~SCI_CR2_TCIE;
SCICR2 &=~SCI_CR2_TE; //所有字节已发送,关闭中断
}
return;
}
return;
}
/* **********************************************************************
// TimerA中断操作
********************************************************************** */
@interrupt void INT_TimerA(void)
{
unsigned char i = 0;
gTimer_CSR = TACSR; //读CSR寄存器涉及到清除状态标志位,
//所以不适宜反复读,应将CSR的值读到一个变量中
//再对这个变量进行判断
if ((gTimer_CSR&TIMER_A_CSR_ICF1) != 0)
{
TAIC1LR;
TBCSR &=~TIMER_B_CR1_OCIE; //Disable the Timer
if ((TACR1&TIMER_A_CR1_IEDG1) != 0)
{
TACR1 &=~TIMER_A_CR1_IEDG1;
gIC_Rise_Time = TAIC1R; //记录上升沿跳变的时间点
if (gIC_Rise_Time > gIC_Fall_Time)
gIC_Keep_L_Time = gIC_Rise_Time - gIC_Fall_Time; //为低的时间断长度
else
gIC_Keep_L_Time = (65535-gIC_Fall_Time) + gIC_Rise_Time;
if (((gIC_Keep_H_Time+gIC_Keep_L_Time)>5000)
&& ((gIC_Keep_H_Time+gIC_Keep_L_Time)<8000))
{
if ((gIC_Keep_H_Time>1000) && (gIC_Keep_H_Time<2000)
&& (gIC_Keep_L_Time>4000) && (gIC_Keep_L_Time<6000)) //为高的时间比较短
{
if (gRF_Record_Point < 8)
{
gRF_Record_Char1 = gRF_Record_Char1 << 1;
gRF_Record_Char1 &=~0x01;
gRF_Record_Point++;
}
else if (gRF_Record_Point < 16)
{
gRF_Record_Char2 = gRF_Record_Char2 << 1;
if ((gRF_Record_Char1&BIT7) == 0)
gRF_Record_Char2 &=~0x01;
else
gRF_Record_Char2 |= 0x01;
gRF_Record_Char1 = gRF_Record_Char1 << 1;
gRF_Record_Char1 &=~0x01;
gRF_Record_Point++;
}
else if (gRF_Record_Point < 24)
{
gRF_Record_Char3 = gRF_Record_Char3 << 1;
if ((gRF_Record_Char2&BIT7) == 0)
gRF_Record_Char3 &=~0x01;
else
gRF_Record_Char3 |= 0x01;
gRF_Record_Char2 = gRF_Record_Char2 << 1;
if ((gRF_Record_Char1&BIT7) == 0)
gRF_Record_Char2 &=~0x01;
else
gRF_Record_Char2 |= 0x01;
gRF_Record_Char1 = gRF_Record_Char1 << 1;
gRF_Record_Char1 &=~0x01;
gRF_Record_Point++;
}
}
else if ((gIC_Keep_L_Time>1000) && (gIC_Keep_L_Time<2000)
&& (gIC_Keep_H_Time>4000) && (gIC_Keep_H_Time<6000)) //为低的时间比较短
{
if (gRF_Record_Point < 8)
{
gRF_Record_Char1 = gRF_Record_Char1 << 1;
gRF_Record_Char1 |= 0x01;
gRF_Record_Point++;
}
else if (gRF_Record_Point < 16)
{
gRF_Record_Char2 = gRF_Record_Char2 << 1;
if ((gRF_Record_Char1&BIT7) == 0)
gRF_Record_Char2 &=~0x01;
else
gRF_Record_Char2 |= 0x01;
gRF_Record_Char1 = gRF_Record_Char1 << 1;
gRF_Record_Char1 |= 0x01;
gRF_Record_Point++;
}
else if (gRF_Record_Point < 24)
{
gRF_Record_Char3 = gRF_Record_Char3 << 1;
if ((gRF_Record_Char2&BIT7) == 0)
gRF_Record_Char3 &=~0x01;
else
gRF_Record_Char3 |= 0x01;
gRF_Record_Char2 = gRF_Record_Char2 << 1;
if ((gRF_Record_Char1&BIT7) == 0)
gRF_Record_Char2 &=~0x01;
else
gRF_Record_Char2 |= 0x01;
gRF_Record_Char1 = gRF_Record_Char1 << 1;
gRF_Record_Char1 |= 0x01;
gRF_Record_Point++;
}
}
else
{
gRF_Record_Char1 = 0;
gRF_Record_Char2 = 0;
gRF_Record_Char3 = 0;
gRF_Record_Point = 0;
}
if (gRF_Record_Point == 24)
{
gRF_Char_Command3 = gRF_Record_Char3;
gRF_Char_Command2 = gRF_Record_Char2;
gRF_Char_Command1 = gRF_Record_Char1;
if ((gRF_Char_Command3==SPECIAL_NO_1) && (gRF_Char_Command2==SPECIAL_NO_2))
{
if (gRF_Char_Command3 == SPECIAL_NO_3)
{
}
else if (gRF_Char_Command3 == SPECIAL_NO_4)
{
}
else if (gRF_Char_Command3 == SPECIAL_NO_5)
{
}
else if (gRF_Char_Command3 == SPECIAL_NO_6)
{
}
}
gStatus_Flag_1 |= GF_1_RF_RECV;
}
}
else
{
gRF_Record_Char1 = 0;
gRF_Record_Char2 = 0;
gRF_Record_Char3 = 0;
gRF_Record_Point = 0;
}
}
else
{
TACR1 |= TIMER_A_CR1_IEDG1;
gIC_Fall_Time = TAIC1R; //记录下降沿跳变的时间点
if (gIC_Fall_Time > gIC_Rise_Time)
gIC_Keep_H_Time = gIC_Fall_Time - gIC_Rise_Time; //为高的时间断长度
else
gIC_Keep_H_Time = (65535-gIC_Rise_Time) + gIC_Fall_Time;
}
TBCSR |= TIMER_B_CR1_OCIE; //Enable the Timer
return;
}
if (gTimer_CSR & TIMER_A_CSR_TOF) //若有计数器溢出标志
{
TACLR; //清除该标志
return;
}
/* ******************************
//一个定时器中的两路输出比较中断不能单独使能
//这里必须清除另一路输出比较的中断
****************************** */
if (gTimer_CSR & TIMER_A_CSR_OCF2)//判断是否为输出比较2的中断
{
TAOC2LR; //读低八位清除输出比较2的标志
return;
}
}
/* **********************************************************************
// TimerB中断操作
********************************************************************** */
@interrupt void INT_TimerB(void)
{
gTimer_CSR = TBCSR; //读CSR寄存器涉及到清除状态标志位,
//所以不适宜反复读,应将CSR的值读到一个变量中
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -