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

📄 gsm1.c

📁 wavecom模块at指令开发源代码
💻 C
字号:
#include <reg52.h>                    /* special function register 8052       */
#include <rtx51tny.h>                 /* RTX-51 tiny functions & defines      */

	#define frequency	200000//20M=200000
	#define const_t1	2500
	#define dtmf_data P1 & 0x0f;
	sbit	dtmf_rdy P3^5
#define  OLEN  16                     /* size of serial transmission buffer   */
unsigned char  ostart;                /* transmission buffer start index      */
unsigned char  oend;                  /* transmission buffer end index        */
idata    char  outbuf[OLEN];          /* storage for transmission buffer      */

#define  ILEN  16                     /* size of serial receiving buffer      */
unsigned char  istart;                /* receiving buffer start index         */
unsigned char  iend;                  /* receiving buffer end index           */
idata    char  inbuf[ILEN];           /* storage for receiving buffer         */

#define   CTRL_Q  0x11                /* Control+Q character code             */
#define   CTRL_S  0x13                /* Control+S character code             */

#define   start=0x1
#define   net_not_reg=0x1
#define   net_regging=0x2
#define   net_regged=0x3
#define   net_reg_fail=0x4
#define   call_start=0x5
bit   code_h
bit   code_c;
bit   code_cp;
bit   code_cpi;
bit   code_cpin;
bit   code_cpin_s;
bit   code_cpin_si;
bit   code_cpin_sim;
bit   code_cpin_sim_p;
bit   code_cpin_sim_pi;
bit   code_cpin_sim_pin;
bit   code_cr;
bit   code_cre;
bit   code_creg;
bit   code_creg_1;
bit   code_cm
bit   code_cme
bit   code_cme_e
bit   code_cme_er
bit   code_cme_err
bit   code_cme_erro
bit   code_cme_error
bit   code_cme_error

bit   cpin_ready
bit   cpin_sim_pin;
bit   creg_1;
bit   cme_error
bit   off_hook

bit   s_at_cpinz
bit   s_at_cpinx
bit   s_at_cregz
bit   s_at_wtone
bit   s_atd
void initialize(void)
{
	IE=
	TMOD=0x01;
	TH0=(0x10000-const_t1*frequency/120000)/256;	//0xee;
	TL0=(0x10000-const_t1*frequency/120000)&255;//0x13;
	TR0=1;
}
void main(void)
{
initialize();
serial_init();
while(1){
	dtmf_rcv();
	state_deal();
	}
}
void state_deal()
{
    switch (user_state)  {
    	case net_not_reg:
    	start_trans=1;
    	send_state=start;
    	s_at_cpinz=1;
    	user_state=net_regging;
    	break;

    	case net_regging:
    	if(cpin_ready) {
    	cpin_ready=0;
    	s_at_cregz=1;
    	start_trans=1;
    	send_state=start;
    	}
    	if(cpin_sim_pin) {
    	cpin_sim_pin=0;
    	s_at_cpinx=1;
    	start_trans=1;
    	send_state=start;
    	}
    	if(creg_1) {
    	creg_1=0;
    	user_state=net_regged;
    	}
    	if(cme_error) {
    	cme_error=0;
    	user_state=net_reg_fail;
    	}
    	break;

    	case net_regged:
    	if(off_hook) {
    	off_hook=0;
    	s_at_wtone=1;
    	start_trans=1;
    	send_state=start;
    	user_state=call_start;
    	}
    	break;

    	}
}
void dtmf_rcv()
{
if(dtmf_rdy) {dtmf_buf=dtmf_data;
}
void int_timer0 (void) interrupt	1 using 1
{
	TH0=(0x10000-const_t1*frequency/120000)/256;	//0xee;
	TL0+=(0x10000-const_t1*frequency/120000)&255;//0x13;
}
/******************************************************************************/
/*       serial_init: initialize serial interface                             */
/******************************************************************************/
void serial_init (void)  {
  SCON  = 0x50;                      /* mode 1: 8-bit UART, enable receiver   */
  TMOD |= 0x20;                      /* timer 1 mode 2: 8-Bit reload          */
  TH1   = 0xf3;                      /* reload value 9600 baud                */
  TR1   = 1;                         /* timer 1 run                           */
  ES    = 1;                         /* enable serial port interrupt          */
}
/******************************************************************************/
/*       serial:  serial receiver / transmitter interrupt                     */
/******************************************************************************/
serial () interrupt 4 using 2  {     /* use registerbank 2 for interrupt      */
  unsigned char c;
  bit   start_trans = 0;

  if (RI)  {                         /* if receiver interrupt                 */
    c = SBUF;                        /* read character                        */
    RI = 0;                          /* clear interrupt request flag          */
    switch (c)  {                    /* process character                     */
    	case 0xd:
	if (code_cpin_sim_pin) {code_cpin_sim_pin = 0;cpin_sim_pin = 1;}
	if (code_creg_1) {code_creg_1 = 0;creg_1 = 1;}
	if (code_cme_error) {code_cme_error = 0;cme_error = 1;}
	if (code_cpin_ready) {code_cpin_ready = 0;cpin_ready = 1;}
        break;

    	case 0x1:
	if (code_creg) {code_creg = 0;code_creg_1 = 1;}
        break;

	case '+':
        code_h = 1;
        code_c = 0;
        break;

	case 'A':
	if (code_cpinre) {code_cpinre = 0;code_cpinrea = 1;}
        break;

	case 'C':
	if (code_h) {code_h = 0;code_c = 1;}
        break;

	case 'D':
	if (code_cpinrea) {code_cpinrea = 0;code_cpinread = 1;}
        break;

	case 'E':
	if (code_cr) {code_cr = 0;code_cre = 1;}
	if (code_cpinr) {code_cpinr = 0;code_cpinre = 1;}
	if (code_cm) {code_cm = 0;code_cme = 1;}
	if (code_cme) {code_cme = 0;code_cme_e = 1;}
        break;

	case 'G':
	if (code_cre) {code_cre = 0;code_creg = 1;}
        break;

	case 'I':
	if (code_cp) {code_cp = 0;code_cpi = 1;}
	if (code_cpin_s) {code_cpin_s = 0;code_cpin_si = 1;}
	if (code_cpin_sim_p) {code_cpin_sim_p = 0;code_cpin_sim_pi = 1;}
        break;

	case 'M':
	if (code_c) {code_c = 0;code_cm = 1;}
	if (code_cpin_si) {code_cpin_si = 0;code_cpin_sim = 1;}
        break;

	case 'N':
	if (code_cpi) {code_cpi = 0;code_cpin = 1;}
	if (code_cpin_sim_pi) {code_cpin_sim_pi = 0;code_cpin_sim_pin = 1;}
        break;

	case 'O':
	if (code_cme_err) {code_cme_err = 0;code_cme_erro = 1;}
        break;

	case 'P':
	if (code_c) {code_c = 0;code_cp = 1;}
	if (code_cpin_sim) {code_cpin_sim = 0;code_cpin_sim_p = 1;}
        break;

	case 'R':
	if (code_c) {code_c = 0;code_cr = 1;}
	if (code_cpin) {code_cpin = 0;code_cpinr = 1;}
	if (code_cme_e) {code_cme_e = 0;code_cme_er = 1;}
	if (code_cme_er) {code_cme_er = 0;code_cme_err = 1;}
	if (code_cme_erro) {code_cme_erro = 0;code_cme_error = 1;}
        break;

	case 'S':
	if (code_cpin) {code_cpin = 0;code_cpin_s = 1;}
        break;

	case 'Y':
	if (code_cpinread) {code_cpinread = 0;code_cpin_ready = 1;}
        break;

	default:                       /* read all other characters into inbuf  */
        code_h = 0;
        code_c = 0;
        break;
	}
  }

  if (TI || start_trans)  {          /* if transmitter interrupt              */
    TI = 0;                          /* clear interrupt request flag          */
    switch (send_state)  {
    	case start:
    	SBUF = 'A';
    	send_state=send_a;
    	break;

    	case send_a:
    	SBUF = 'T';
    	send_state=send_at;
    	break;

    	case send_at:
    	if (s_atd) {
    	SBUF = 'd';
    	send_state=send_atd; }
    	else {
    	SBUF = '+';
    	send_state=send_at_;}
    	break;

    	case send_at_:
    	SBUF = 'C';
    	send_state=send_at_c;
    	break;

    	case send_at_c:
	if (s_at_cpinz | s_at_cpinx) {
    	SBUF = 'P';
    	send_state=send_at_cp;}
	if (s_at_cregz) {
    	SBUF = 'R';
    	send_state=send_at_cr;}
    	break;

    	case send_at_cr:
    	SBUF = 'E';
    	send_state=send_at_cre;
    	break;

    	case send_at_cre:
    	SBUF = 'G';
    	send_state=send_at_creg;
    	break;

    	case send_at_creg:
    	SBUF = '?';
    	send_state=send_at_complate;}
    	break;

    	case send_at_cp:
    	SBUF = 'I';
    	send_state=send_at_cpi;
    	break;

    	case send_at_cpi:
    	SBUF = 'N';
    	send_state=send_at_cpin;
    	break;

    	case send_at_cpin:
	if (s_at_cpinz) {
    	SBUF = '?';
    	send_state=send_at_complate; }
	if (s_at_cpinx) {
    	SBUF = '=';
    	send_state=send_at_cpin_; }
    	break;

    	case send_at_cpin_:
    	SBUF = '8';
    	send_state=send_at_cpin_8;
    	break;

    	case send_at_cpin_8:
    	SBUF = '2';
    	send_state=send_at_cpin_82;
    	break;

    	case send_at_cpin_82:
    	SBUF = '7';
    	send_state=send_at_cpin_827;
    	break;

    	case send_at_cpin_827:
    	SBUF = '6';
    	send_state=send_at_complate;
    	break;

    	case send_atd:
    	if (send_buf1_lenth==0) send_state=send_atd1;
    	else {
    	send_buf1_lenth--;
    	SBUF = send_buf1+send_buf1_lenth;}
    	break;

    	case send_atd1:
    	if (send_buf1_lenth==0) send_state=send_atd1;
    	else {
    	send_buf1_lenth--;
    	SBUF = send_buf1+send_buf1_lenth;}
    	break;

    	case send_at_complate:
    	SBUF = 0xd;
    	send_state=send_at_complate1;
    	break;

    	case send_at_complate1:
    	SBUF = 0xa;
    	send_state=send_at_complate2;
    	start_trans=0;
    	break;
	}
}

⌨️ 快捷键说明

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