打印

请教各位PIC高手:关于PIC16F1947的串口通信问题

[复制链接]
4604|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mjw001|  楼主 | 2011-6-2 14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位高手:
      在DTU的制作过程中,不知为何,编写的程序从理论上来说是正确的。而且硬件上也没有问题(LED可按程序要求闪烁,而且gprs模块也能接受呼叫,呼叫时有振铃)。
但就是不能通过PIC来控制GPRS模块呼叫指定电话.这是为什么呢?在线等
程序如下:
#include<pic.h>
#include<pic16f1947.h>
//#include "Parameters.h"
//
#define uchar unsigned char
#define uint  unsigned int
#define PIC_CLK 4000000  //该产品选用4.0000MHz晶振
//-------------------------------------------
//const  uchar ATD_SIZE[]={_QUOTE,_A,_T,_D,_0,_9,_1,_7,_3,_6,_1,_4,_4,_0,_5,_FENGHAO,_CR,_LF,_QUOTE};const  uchar ATD_SIZE[]={_QUOTE,_A,_T,_D,_0,_9,_1,_7,_3,_6,_1,_4,_4,_0,_5,_FENGHAO,_CR,_LF,_QUOTE};
const uchar ATD_SIZE[]="ATD09xxxxxxxx;\r\n";
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
  for(b=110;b>0;b--);
}
void USART2_setup()
{
// #define BAUD1 1200
#define BAUD2 9600
#define BRGH_VALUE2 1
#define SPBRG2_VALUE ((PIC_CLK/(16UL * BAUD2) -1))
TX2STAbits.TX9D=0; //无奇偶校验位
TX2STAbits.TRMT=0; //Transmit Shift Register Status bit
TX2STAbits.BRGH=BRGH_VALUE2;
TX2STAbits.SYNC=0;      
TX2STAbits.TXEN=1;      
TX2STAbits.TX9=0; //发送8位
// TXSTA2bits.CSRC=1;      
SPBRG2 = SPBRG2_VALUE;
RC2STAbits.RX9D=0; //无奇偶校验位   
RC2STAbits.OERR=0;      
RC2STAbits.FERR=0;      
RC2STAbits.ADDEN=0;      
RC2STAbits.CREN=1; //Continuous Receive Enable bit  
// RCSTA2bits.SREN=0;      
RC2STAbits.RX9=0; //接收8位
RC2STAbits.SPEN=1; //Serial Port Enable bit

//TX2STA=0X24;     //串口1 发送状态兼控制寄存器
// CSRC  TX9  TXEN  SYNC  ---   BRGH  TRMT  TX9D
//     发送使能          异步模式下的高速波特率
//RC2STA=0X90;     //串口1 接受状态兼控制寄存器
// SPEN  RX9  SREN  CREN  ADDEN  FREE  OERR  RX9D
// 同步方式下的单字节接收使能
//         同/异步方式下的连续接收使能
//SP2BRGL=25;
// 波特率控制位  SYNC=0,BRGH=1,SPEN=1  BRG16=0
// Fosc=4.0000MHz,  SP1BRGL=25
//SP2BRGH=0X00;
//TRISC=0XFF;
}
void send(const uchar data[],int length)
{
  uint i;
  for(i=0;i<length-1;i++)
  {
   delay(10);     
   TX2REG=data[i];
   while(!TX2STAbits.TRMT);
   delay(10);
  }
}
void CMD_ATD()
{
PORTA=0X00;
    send(ATD_SIZE,sizeof(ATD_SIZE)); //发送at\r\n
    delay(5000); //延时50ms
}

void main()
{
USART2_setup();   //串口2初始化
TRISA=0XC0;
PORTA=0X0F;
loop1:
CMD_ATD();
delay(5000);
PORTA=0X00;
delay(1000);
goto loop1;
//SmsInit();     //短信初始化
//SmsRead();     //读短信
}
沙发
251566208| | 2011-6-2 15:18 | 只看该作者
POARTA引脚上面复用模拟功能,在初始化的时候需要关闭复用功能

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

71

帖子

0

粉丝