📄 inital.c
字号:
#include<string.h>
#include <AT898252.H>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
extern uchar mod_buff_tail;
extern uchar mod_buff[16];
extern uchar k_stat;
#define LCDCOM_W XBYTE[0x7f00]
extern void wait(void);
extern void mod_comd(uchar *str);
void delay(void)
{
uchar i,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}
/*系统初始化函数*/
void init(void)
{
IP=0x10; /*串口中断为最高优先级*/
TMOD=0x21; /*定时器1方式2,定时器0方式1*/
TH1=0xf3; /*2400baud*/
TL1=0xf3;
SCON=0x50; /*串口方式1,允许接收*/
PCON=0x80; /*smod=1;*/
ET1=0; /*定时器1作为波特率发生器不需要中断*/
TR1=1; /*开定时器1*/
EA=1; /*开总中断*/
}
/*液晶屏初始化*/
void init_lcd(void )
{
LCDCOM_W=0x30;
delay();
LCDCOM_W=0x30;
delay();
LCDCOM_W=0x30;
delay();
wait();
LCDCOM_W=0x38;
wait();
LCDCOM_W=0x06;
wait();
LCDCOM_W=0x0f;
wait();
LCDCOM_W=0x01;
wait();
}
/*MODEM初始化函数,为防止通信死锁,使当地安排喂狗s*/
void modem_init(void )
{
uchar i,j,k;
WMCON|=WDTRST_; /*喂狗*/
mod_buff_tail=0; /*缓存器尾指针清零*/
for(i=0;i<16;i++)
mod_buff[i]=0; /*缓存区清零*/
for(i=0;i<5;i++)
for(j=0;j<100;j++)
for(k=0;k<40;k++);
WMCON|=WDTRST_; /*喂狗*/
mod_comd("ATZ0"); /*复位MODEM*/
for(i=0;i<5;i++)
for(j=0;j<100;j++)
for(k=0;k<40;k++);
WMCON|=WDTRST_; /*喂狗*/
mod_comd("ATVE0"); /*V0:数字格式回显,E0:抑制命令回显主机*/
mod_buff_tail=0; /*从队形缓冲区头部开始存放数据*/
for(i=0;i<16;i++)
mod_buff[i]=0; /*缓存区清零,是否有必要重复清零??*/
while(!((mod_buff[0]==0x30)&(mod_buff[1]==0x0d))); /*等待回显*/
WMCON|=WDTRST_; /*喂狗*/
mod_comd("ATS0=1S9=255");
mod_buff_tail=0; /*从队形缓冲区头部开始存放数据*/
for(i=0;i<16;i++)
mod_buff[i]=0; /*缓存区清零,是否有必要重复清零??*/
while(!((mod_buff[0]==0x30)&(mod_buff[1]==0x0d))); /*等待回显*/
WMCON|=WDTRST_; /*喂狗*/
/*为适应三线制通信,必须进行以下设置*/
mod_comd("AT&D0"); /*MODEM忽略DTR信号*/
mod_buff_tail=0; /*从队形缓冲区头部开始存放数据*/
for(i=0;i<16;i++)
mod_buff[i]=0; /*缓存区清零,是否有必要重复清零??*/
while(!((mod_buff[0]==0x30)&(mod_buff[1]==0x0d))); /*等待回显*/
for(i=0;i<10;i++)
for(j=0;j<100;j++)
for(k=0;k<40;k++);
WMCON|=WDTRST_; /*喂狗*/
mod_comd("AT&S0"); /*MODEM长开启DSR信号*/
mod_buff_tail=0; /*从队形缓冲区头部开始存放数据*/
for(i=0;i<16;i++)
mod_buff[i]=0; /*缓存区清零,是否有必要重复清零??*/
while(!((mod_buff[0]==0x30)&(mod_buff[1]==0x0d))); /*等待回显*/
for(i=0;i<10;i++)
for(j=0;j<100;j++)
for(k=0;k<40;k++);
WMCON|=WDTRST_; /*喂狗*/
mod_comd("AT&Q0"); /*MODEM异步通信*/
mod_buff_tail=0; /*从队形缓冲区头部开始存放数据*/
for(i=0;i<16;i++)
mod_buff[i]=0; /*缓存区清零,是否有必要重复清零??*/
while(!((mod_buff[0]==0x30)&(mod_buff[1]==0x0d))); /*等待回显*/
WMCON|=WDTRST_; /*喂狗*/
mod_comd("AT&C1"); /*MODEM跟踪远程来的载波信号*/
mod_buff_tail=0; /*从队形缓冲区头部开始存放数据*/
for(i=0;i<16;i++)
mod_buff[i]=0; /*缓存区清零,是否有必要重复清零??*/
while(!((mod_buff[0]==0x30)&(mod_buff[1]==0x0d))); /*等待回显*/
WMCON|=WDTRST_; /*喂狗*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -