?? qdv2.c
字號:
//-----------------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------------
#include <c8051f020.h> // SFR declarations
#include <Absacc.h>
#include <MAC.c>
//-----------------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------------
#define UINT unsigned int
#define UCHAR unsigned char
#define BAUD_RATE 9600 // User-definable SW_UART baud rate
#define SYSCLK 18432000 // System clock derived from 18.432MHz XTL??????????????????????????????????
#define TIME_COUNT SYSCLK/BAUD_RATE/4 // Number of PCA counts for one bit-time.
// (PCA configured to count SYSCLK/4)
#define TH_TIME_COUNT TIME_COUNT*3/2 // 3/2 bit-time, for use after receiving
// a START bit. RX should be LOW for one
// bit-time after the edge of the START,
// and the first bit sample starts in the
// middle of the next bit-time.
#define HW_TIME_COUNT SYSCLK/BAUD_RATE/16 // Time count for HW_UART baud rate
sfr PRT1IF=0xad; // generation. Auto-calculated from the
#define TI1 SCON1 & 0x02 // SYSCLK and BAUD_RATE constants defined
// SYSCLK and BAUD_RATE constants defined
#define PPPINITFCS16 0xffff /* Initial FCS value */
#define PPPGOODFCS16 0x3e62 /* Good final FCS value */
//----------------------------------------------------------------------------------------------------------------------------
//define FLASH address
// above.
#define StartAddress 0x1000
#define Address5555 XBYTE[0x5555]
#define Address2AAA XBYTE[0x2AAA]
#define IniDataAddress 0xF000
//
//---------------------------------------------------------------------------------------------------
//define RTC Register
#define RegA XBYTE[0xff0a]
#define RegB XBYTE[0xff0b]
#define RegC XBYTE[0xff0c]
#define RegD XBYTE[0xff0d]
#define Hour XBYTE[0xff04]
#define Minute XBYTE[0xff02]
#define Second XBYTE[0xff00]
#define Year XBYTE[0xff09]
#define Month XBYTE[0xff08]
#define Day XBYTE[0xff07]
#define Week XBYTE[0xff06]
#define Century XBYTE[0xff32]
#define Hour_Alarm XBYTE[0xff05]
#define Minute_Alarm XBYTE[0xff03]
#define Second_Alarm XBYTE[0xff01]
//
//---------------------------------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------------
//Global VARIABLES
//-----------------------------------------------------------------------------------
bit SRI; // SW_UART Receive Complete Indicator
bit STI; // SW_UART Transmit Complete Indicator
bit STXBSY; // SW_UART TX Busy flag
bit SREN; // SW_UART RX Enable
bit SES; // SW_UART User-level Interrupt Support Enable
sbit SW_RX = P0^4; // SW_UART Receive pin
sbit SW_TX = P1^2; // SW_UART Transmit pin
sbit P1_4 = P1^4;
sbit P1_3 = P1^3;
sbit P1_5 = P1^5;
sbit CS_RTC=P1^7; //RTC Chip Select,Low Effect
sbit GPRS_LED=P1^6; //Flash Chip Select pin
unsigned char TDR; // SW_UART TX Data Register
unsigned char RDR; // SW_UART RX Data Register (latch)
// Test Variables
char k, m; // Test indices.
//char idata SW_BUF[20]; // SW_UART test receive buffer.
//bit HW_DONE; // HW transfer complete flag (15 characters
// transmitted.)
bit SW_DONE; // SW transfer complete flag (15 characters
bit Control_Success_For_Ack_Flag=0, Data_Status_Flag=0,Ctrl_Complete_Flag=0,Request_Flag=0,Ack_Timer_Flag=0,Timer3_Flag=0,Send_EX0_Flag=0,Send_EX1_Flag=0, Rec_Ctrl_Flag=0,First_Send_Flag=0, ReceiveFlag=0, Ctrl_Info_Flag=0,First_Rec_Flag=0,Network_Flag=0,Rec_Ack_Flag=0,Send_Flag=0,Erase_Flag=0,Deal_Flag=0,Ini_Data_Flag=0; //the first Time of receiving data // transmitted.)
unsigned char Receive_Ini_Flag=0;
unsigned char xdata InfoData_Buffer[80],Ctrl_Info_Buffer[10],Ini_Data_Buffer[26]; //the number of receiving the information data
unsigned char *InfoData_BufferPoint,*Ini_Data_BufferPoint;
unsigned int xdata Send_Data_Num,UnSend_Data_Num,Data_Total_Num,Rec_Ack_Num,Test_Frame_Num=0,Old_Control_Frame_Num=0;
unsigned char xdata Receive_Data_Num=0,Ini_Data_Num=0;
unsigned char xdata Information_Type;
long xdata Frame_Num,Old_Frame_Num = -1;
unsigned char xdata MINUTE,HOUR,YEAR,MONTH,DAY;
unsigned char xdata Time_Distance[2],Distance;
unsigned int xdata counter=0,counter_timer3=0,Send_Counter=0,num=0,Test_counter=0,Ctrl_Info_Counter=0,Send_Ctrl_Info_Counter=0;
unsigned int xdata Timer3_Counter=0,Compare_Counter=0;
unsigned char xdata GSMCommand1[7] = "AT+CSQ\r";
unsigned char xdata GSMCommand2[12] = "ATD*99***1#\r";
unsigned char xdata GSMCommand3[10]="AT+CFUN=0\r";
unsigned char xdata GSMCommand4[10]="AT+CFUN=1\r";
unsigned char xdata GSMCommand5[31]="AT+CGDCONT=1,\"IP\",\"CMNET\",,0,0\r";
unsigned char xdata rec[50],RECEIVEBUFFER[200],*RECEIVEBUFFERPOINT,command[4];
unsigned char xdata Info_Frame1[28]={0x79,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //Device Error Status Information
unsigned char xdata Info_Frame2[28]={0x7a,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //Column Error Status Information
unsigned char xdata Info_Frame3[28]={0x7b,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //Goods Status Information
unsigned char xdata Info_Frame4[24]={0x7c,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //Sale Information
unsigned char xdata Info_Frame5[50]={0x7d,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//Device Information
unsigned char xdata Test_Frame[20]={0x80,1,0,0,0,0,0,0,0,0x2,0,0,0,0,0,0,0,0,0,0};
unsigned char xdata Device_Error_Status[6]={0,0,0,0,0,0};
unsigned char xdata Column_Error_Status[6]={0,0,0,0,0,0};
unsigned char xdata Goods_Status[6]={0,0,0,0,0,0};
unsigned char xdata Device_Info[28]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned char xdata Send_Data_Buffer[50];
//unsigned char xdata Rec_Ack_Buffer[50],*Rec_Ack_Point;
unsigned char Rec_Type;
bit RECEIVE_FLAG = 0,PADDING_Flag = 0,GPRS_OK = 0,PPP_Rec_Complete = 0,PPP_First_Receive = 0,Send_Ack_Flag=0;
bit Command_Receive_OK = 0;
bit Flash_Full_Flag = 0;
/*MPU shake hands with WAVECOM*/
UCHAR xdata EXCHANGE1[22]={0x7E,0xFF,0x03,0xC0,0x21,0x01,0x01,0x00,0x0E,0x02,0x06,0x00,0x00,0x00,0x00,0x07,0x02,0x08,0x02,0x00,0x00,0x7E};
UCHAR xdata EXCHANGE2[30]={0x7E,0xFF,0x03,0xC0,0x21,0x02,0x01,0x00,0x16,0x01,0x04,0x05,0xDC,0x02,0x06,0x00,0x00,0x00,0x00,0x07,0x02,0x08,0x02,0x03,0x04,0xC0,0x23,0x00,0x00,0x7E};
UCHAR xdata EXCHANGE3[21]={0x7E,0xC0,0x23,0x01,0x01,0x00,0x0F,0x09,0x48,0x55,0x41,0x4E,0x47,0x4C,0x45,0x49,0x5C,0x00,0x00,0x00,0x7E};
UCHAR xdata EXCHANGE4[21]={0x7E,0xC0,0x23,0x01,0x02,0x00,0x0F,0x09,0x48,0x55,0x41,0x4E,0x47,0x4C,0x45,0x49,0x5C,0x00,0x00,0x00,0x7E};
UCHAR xdata EXCHANGE5[16]={0x7E,0x80,0x21,0x01,0x03,0x00,0x0A,0x03,0x06,0x00,0x00,0x00,0x00,0x97,0x5D,0x7E};
UCHAR xdata EXCHANGE6[16]={0x7E,0x80,0x21,0x02,0x01,0x00,0x0A,0x03,0x06,0xC0,0xA8,0x6F,0x6F,0xA4,0x3D,0x7E};
UCHAR xdata EXCHANGE7[16]={0x7E,0x80,0x21,0x01,0x04,0x00,0x0A,0x03,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x7E};
/*Disconnect form GPRS network*/
UCHAR xdata EXCHANGE8[14]={0x7E,0xFF,0x03,0xC0,0x21,0x05,0x01,0x00,0x06,0x00,0x00,0x96,0xE,0x7E};
UCHAR xdata EXCHANGE9[12]={0x7E,0xFF,0x03,0xC0,0x21,0x06,0x02,0x00,0x04,0x00,0x00,0x7E};
/*For GPS data send*/
UCHAR xdata MDB_DATA_TEMP[85]={0x7E,0x21,0x45,0x9D,0x0,0x30,0x19,0x0,0x0,0x0,0xFF,0x11,0x0,0x0,0xA,0x10,0xC3,0xB7,211,71,10,115,0x3,0xEA,0x2,0xBD,0x0,0x1C,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; /*待定*/
UCHAR xdata TEMPBUFFER[100],MDB_DATA[200],LENTH_COUNTER=0;
UINT code fcstab[256] = {
0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
};
//--------------------------------------------------------------------------------------------
unsigned char xdata key1[8]={0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11};//{1,2,3,4,5,6,7,8};
unsigned char xdata key2[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
unsigned char xdata text[8]={2,3,4,5,6,7,8,9};
unsigned char xdata result[8];
unsigned char xdata Data[56];//"0123456789ABCDEF0123456789ABCDE";
unsigned char MAC_Key[8]={1,2,3,4,5,6,7,8};
//------------------------------------------------------------------------------------
// Function PROTOTYPES
//------------------------------------------------------------------------------------
void ProtectCode();
void SW_UART_INIT(); // SW_UART initialization routine
void SW_UART_ENABLE(); // SW_UART enable routine
void PCA_ISR(); // SW_UART interrupt service routine
void INTERRUPT_TEST(void); // SW_UART test routine using interrupt mode
void POLLED_TEST(void); // SW_UART test routine using polled mode
void USER_ISR(void); // SW_UART test interrupt service routine
//void HWU_INIT(void); // HW_UART initialization and setup routine
//void HW_UART_ISR(void); // HW_UART interrupt service routine
void FLASH_INI(void); // FLASH initialization ,get the number of frame data sent and unsent,
bit Check_Info_Data(unsigned char * point,unsigned char length );
void Read_Time(void) ;
void Baudrate_Init(void);
void Write_Byte(unsigned int w_address, unsigned char w_byte);
void Store_Data(unsigned char *point,unsigned char type, unsigned char length );
void ReSend_Data(void) ;
void Send_Data(void);
void Rec_Ack(void);
void Erase_Sector(unsigned int w_address);
void Judge_Full(void);
//void ReSend_Data1(void);
void Erase_Chip(void);
void Delay10ms();
void AT();
void GSM_INI(void);
void ATD99();
void APN_INI();
void EXCH_SEND1();
void EXCH_SEND2();
void EXCH_SEND3();
void EXCH_SEND4();
void EXCH_SEND5();
void EXCH_SEND6();
void EXCH_SEND7();
void EXCH_SEND8();
void EXCH_SEND9();
UINT pppfcs16(UINT fcs,unsigned char *cp,int len);
void Fcs16(unsigned char *cp,int len);
void DEAL_DATA(void);
long cksum(unsigned char *ip, int len);
void CHECKSUM_UDP(unsigned char Data_length);
void Send_Retransmit(void);
void Send_Test_Frame(void);
void Store_Ini_Data(void);
void Send_Ack_Frame(void);
void Send_Request_Frame(void);
void Read_Ini_Data(void);
void Send_To_VMC_Stop(void);
void Send_To_VMC_Run(void);
void Send_To_VMC_PowerOn(void);
void Send_To_VMC_PowerOff(void);
//------------------------------------------------------------------------------------
// MAIN Routine
//------------------------------------------------------------------------------------
// - Disables Watchdog Timer
// - Configures external crystal; switches SYSCLK to external crystal when stable.
// - Configures crossbar and ports.
// - Initializes and enables SW_UART.
// - Calls Test Routines.
//
void MAIN (void)
{
UINT delay; // Delay counter.
UINT i;
ProtectCode();
OSCXCN = 0x67; // Enable external crystal
WDTCN = 0xDE; // disable watchdog timer
WDTCN = 0xAD;
EMI0CF = 0x07; // Set External Memory Configuration Register,Only 4K Internal Memory used
XBR0 = 0x0c; //Set UART0,CEX0,CEX1,
XBR1 = 0x14; // Set /INT0,/INT1
XBR2 = 0x46; // Set UART1,Enable XBAR,Enable EMFILE
P0MDOUT = 0xe5; // Output configuration for P0
P1MDOUT = 0xc4; // Output configuration for P1
P2MDOUT = 0xff; // Output configuration for P2
P3MDOUT = 0xff; // Output configuration for P3
P0 |= 0x1a; // Enable RX0
// Enable RX1
P1 |= 0x3b; // Enable RX2
// Enable INT_ALARM
// Enable INT_COUNTER
// PRT0CF = 0x09; // P0.0 (SW_TX)
GPRS_LED=1;
GPRS_OK=0;
//CS_FLASH=1; //禁止訪問FLASH
CS_RTC=1; //禁止訪問時鐘芯片
delay=256; // Delay >1 ms before polling XTLVLD.
while(delay--);
while (!(OSCXCN & 0x80)); // Wait until external crystal has
// started.
OSCICN = 0x0C; // Switch to external oscillator
OSCICN = 0x88; // Disable internal oscillator; enable
// missing clock detector.
while (!(OSCXCN & 0x80)); // Wait until external crystal has
// started.
OSCICN = 0x08; // Switch to external oscillator
//************************ FLASH擦除
// CS_RTC=1;
// for(i=0;i<14;i++)
// Erase_Sector(i*4096+StartAddress);
// CS_RTC=0;
//************************
Read_Ini_Data();
FLASH_INI(); //初始化FLASH ,獲得未發送幀的數目和已發送幀的數目
Baudrate_Init(); // 初始化串口0和串口1的波特率
// PS=1; // 串口0中斷優先級為高
EIP2 |= 0x40; // 串口1中斷優先級為高
IT1=1; //外部中斷1邊沿觸發
// IT0=1;
SW_UART_INIT(); // 軟串口初始化
SW_UART_ENABLE(); //軟串口中斷設置
SREN = 1; // 允許軟串口接收
SES = 1; // 允許用戶級中斷
GPRS_LED=0;
for(i=0;i<100;i++) Delay10ms();
GPRS_LED=1;
EIE2 |=0x40; //允許串口1中斷
EA=1;
for(i=0;i<1000;i++) Delay10ms();
GSM_INI(); //GSM初始化,查詢網絡信號強度
ES0=1; //允許串口0中斷
// for(i=0;i<1000;i++) Delay10ms();
for(i=0;i<1000;i++) Delay10ms();
for(i=0;i<1000;i++) Delay10ms();
APN_INI();
for(i=0;i<1000;i++) Delay10ms();
ATD99(); //撥號連接GPRS網絡 ATD*99***1#
for(i=0;i<1000;i++) Delay10ms();
WDTCN = 0xa5;
while(1)
{
if(PPP_Rec_Complete)
{
PPP_Rec_Complete = 0;
DEAL_DATA();
}
if(Deal_Flag)
{ if(Rec_Ctrl_Flag)
{
if(Ctrl_Info_Flag==1) //如果有控制信息,則發送
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -