GPRS程序修改Word文档下载推荐.docx
《GPRS程序修改Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《GPRS程序修改Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
//奇偶校验位,0为无校验,1奇数校验,2为偶数校验
}UARTMODE;
UART_Ini()
初始化UART0/UART1口
baud/UARTMODE
externuint8UART_Ini(uint32baud,UARTMODEset);
volatileuint8rcv_new;
//接收新数据标志
UART_SendStr()
UART0/UART1口发送程序
WhichUart/*str/strlen
externvoidUART_SendStr(uint8WhichUart,uint8*str,uint16strlen);
IRQ_UART0/IRQ_UART1
UART0和UART1的接收中断函数
#definercvbufsize020
#definercvbufsize120
externuint8rcv_buf0[rcvbufsize0];
//*接收时可超越缓冲rcv_buf0数组界限,该缓冲能保存前n次未读取的数据。
externuint8rcv_buf1[rcvbufsize1];
//*接受时可超越缓冲rcv_buf1数组界限,该缓冲能保存前n次未读取的数据。
externuint16rcv_byte_num0;
externuint16rcv_byte_num1;
externvoid__irqIRQ_UART0(void);
externvoid__irqIRQ_UART1(void);
DelayNS()
长软件延时
dly延时参数,值越大,延时越久
externvoidDelayNS(uint32dly);
HC595_SendDat()
向74HC595发送一字节数据
dat要发送的数据
发送数据时,高位先发送。
externvoidHC595_SendDat(uint8dat);
/*此表为0--F的字模*/
constuint8DISP_TAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
0x88,0x83,0xC6,0xA1,0x86,0x8E};
Led_Show()
LED1--LED4显示相应的入口值(0--F)
i要显示的数据
externvoidLed_Show(uint8i);
//LED流水灯1--2--4--8--4--2--1
externvoidLED_CONNECTING(void);
Gprs_Connection()
启动GPRS服务
externuint8Gprs_Connection(void);
Gprs_Apn()
设置移动APN接口并激活PDP移动场景
externuint8Gprs_Apn(void);
GprsServer_Start()
与服务器连接、启动
externuint8GprsServer_Start(void);
Gprs_Recever()
GPRS模块接收SERVER发送来的数据
externuint8Gprs_Recever(void);
Gprs_Send()
GPRS模块发送来自PC的数据
externuint8Gprs_Send(void);
#endif
UART.C
是一些常用函数的集合
将跳线器JP4全部短接。
#defineSPI_CS(1<
<
29)/*P0.29*/
#defineSPI_DATA(1<
6)/*P0.6*/
#defineSPI_CLK(1<
4)/*P0.4*/
#defineSPI_IOCON(SPI_CS|SPI_DATA|SPI_CLK)/*SPI接口的I/O设置字*/
#defineLED_IOCON(0x0F<
22)/*LED1-4的I/O设置字*/
//奇偶校验位,0为无校验,1奇数校验,2为偶数校验
uint8UART_Ini(uint32baud,UARTMODEset)
{
uint32bak;
PINSEL0=0x00050005;
//设置I/O连接到UART0/UART1
/*参数过滤*/
if((0==baud)||(baud>
115200))return(0);
if((set.datab<
5)||(set.datab>
8))return(0);
if((0==set.stopb)||(set.stopb>
2))return(0);
if(set.parity>
4)return(0);
/*设置串口波特率*/
U0LCR=0x80;
//DLAB位置1
U1LCR=0x80;
bak=(Fpclk>
>
4)/baud;
U0DLM=bak>
8;
U1DLM=bak>
U0DLL=bak&
0xff;
U1DLL=bak&
/*设置串口模式*/
bak=set.datab-5;
//设置字长度
if(2==set.stopb)bak|=0x04;
//判断是否为2位停止位
if(0!
=set.parity){set.parity=set.parity-1;
bak|=0x08;
}
bak|=set.parity<
4;
//设置奇偶校验
U0LCR=bak;
U1LCR=bak;
return
(1);
voidUART_SendStr(uint8WhichUart,uint8*str,uint16strlen)
if(WhichUart==0)
{
for(;
strlen>
0;
strlen--)
{
U0THR=*str++;
//发送数据
while((U0LSR&
0x40)==0);
//等待数据发送完毕
}
}
else
{
for(;
{
U1THR=*str++;
//发送数据
while((U1LSR&
//等待数据发送完毕
}
uint8rcv_buf0[rcvbufsize0];
//接收时可超越缓冲rcv_buf0数组界限,该缓冲能保存前n次未读取的数据。
uint8rcv_buf1[rcvbufsize1];
//接受时可超越缓冲rcv_buf1数组界限,该缓冲能保存前n次未读取的数据。
uint16rcv_byte_num0;
uint16rcv_byte_num1;
/****************IRQ_UART0****************/
void__irqIRQ_UART0(void)
uint8i;
uint8int_type;
int_type=U0IIR&
0x0F;
if(int_type==0x04)
for(i=0;
i<
i++)
{rcv_buf0[rcv_byte_num0]=U0RBR;
rcv_byte_num0++;
elseif(int_type==0x0C)
VICVectAddr=0x00;
//中断处理结束
/****************IRQ_UART1****************/
void__irqIRQ_UART1(void)
int_type=U1IIR&
{rcv_buf1[rcv_byte_num1]=U1RBR;
rcv_byte_num1++;
voidDelayNS(uint32dly)
uint32i;
for(;
dly>
dly--)
for(i=0;
50000;
i++);
voidHC595_SendDat(uint8dat)
IO0CLR=SPI_CS;
//SPI_CS=0
i++)//发送8位数据
{IO0CLR=SPI_CLK;
//SPI_CLK=0
/*设置SPI的DATA输出值*/
if((dat&
0x80)!
=0)IO0SET=SPI_DATA;
elseIO0CLR=SPI_DATA;
dat<
=1;
IO0SET=SPI_CLK;
//SPI_CLK=1
IO0SET=SPI_CS;
//SPI_CS=1,输出显示数据
voidLed_Show(uint8i)
{
IO0SET=0x0F<
22;
IO0CLR=i<
//设置LED显示输出
voidLED_CONNECTING(void)//LED流水灯1--2--4--8--4--2--1
Led_Show
(1);
DelayNS(15);
Led_Show
(2);
Led_Show(4);
Led_Show(8);
}
voidLED_SEND(void)//LED流水灯1--2--4--8
voidLED_RECEVER(void)//LED流水灯8--4--2--1
uint8Gprs_Connection(void)
uint8i,j,n;
uint8ret=0;
uint8RcvData[20];
uint8CGATT[12]={65,84,43,67,71,65,84,84,61,49,13,10};
for(n=0;
n<
5;
n++)
LED_CONNECTING();
for(i=0;
i<
20;
i++)
UART_SendStr(1,CGATT,12);
HC595_SendDat(0xF9);