BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #9321同步于 2010/8/30
Embedded_System机器人发帖

PIC18 串口通信问题

wbzsdc
2010/8/30镜像同步0 回复
把pic和GSM模块进行通信。用MCU读取GSM模块中的短信内容,但是程序不对啊。字符串发送的时候没问题,字符串接受的时候怎么就有问题呢??? #include<p18f452.h> #define char unsigned char #define int unsigned int #pragma config OSC = HS #pragma config WDT =OFF #pragma config LVP =OFF char at[]="AT\r\n"; char text[]="AT+CMGF=1\r\n";//选择text char DuQu[]="AT+CMGR=1\r\n";//发送读取短信的AT指令 char code[]="abcdef"; // 定义一个存放密码的数组 char key1[]="13581664267"; // 定义一个存放电话号码的数组 char key2[]; // 号码2 char key3[]; // 号码3 char key4[]; // 号码4 char key5[]; // 号码5 char TiShiFu[]; // 定义一个存放GSM模块返回的提示符的数组 char JieShou[150]; // 定义一个存放所有接受到的字符的数组 //*********************函数声明、定义部分*************** void init() //单片机初始化 { TRISC=0XFF; // 控制C端口的输入输出 TXSTA=0x24; // 给发送寄存器赋值,使能打开 连续打开 RCSTA=0x90; // 给接收寄存器赋值 SPBRG=25; // 定义波特率大约为9600 INTCONbits.GIE=1; // 开放全局中断 INTCONbits.PEIE=1; // 开放第一外设中断 PIE1bits.RCIE=0; // 开放异步接收中断 } void delay(int f) { int a,b; for(a=f;a>0;a--) for(b=110;b>0;b--); } void send(char data[],int length) { int h; for(h=0;h<length-1;h++) { delay(1); TXREG=data[h]; while(!TXSTAbits.TRMT); delay(1); } } void Recieve(); void fycode(); void unlock(); //***************************主函数************************ void main() { init(); // 调用初始化函数 send(at,sizeof(at)); delay(10); send(text,sizeof(at)); delay(10); send(DuQu,sizeof(DuQu)); Recieve(); } //*****************************接收读取短信内容************************************* void Recieve() {int y=0; int k=0; int i=0; for(k=0;k<150;k++) //将串口收到的字符存入数组 { if(PIR1bits.RCIF=1) JieShou[k]=RCREG; } for(i=0;i<12;i++) //对来信号码进行比对 { if(JieShou[y+22]=key1[y]) { y++; if(y=sizeof(key1)) { fycode(); } else main(); //号码错误,单片机进入睡眠 } } } //*******************************校验密码的函数*************** void fycode () { int y=0; for(y=0;y<sizeof(code);) { if(JieShou[y+62]=code[y]) { y++; if(y=sizeof(code)) { unlock(); } else main(); //号码错误,单片机进入睡眠 } } } //*************************睡眠函数********************** //******************************控制步进电机开锁的函数******* void unlock() { TRISD=0; PORTD=0x0f; } 还有个问题 ,接收字符串的时候是不是非得要用中断呢?我这个没用中断的样子,有点晕。而且我用的MCC18编译器,之前用PICC编译器根本添加不了源文件。。。。。。MCC18的中断函数是该怎么写来着?
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。