📄 gsm1.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 + -