4G模块连接sct89c52RC(最小系统版)中断程序没有反应,但是发送数据是正常的
1.4G模块直连usb-ttl模块是正常的
2.usb-ttl连接单片机也是正常的
3.4G模块txd插到usb-ttl,rxd查到单片机也是正常的
就只是单片机直连4G模块有问题
- #include <REGX52.H>
- #include <stdio.h>
- //定义类型
- typedef unsigned int u16;
- typedef unsigned char u8;
- //宏定义波特率发生器的载入值 9600
- #define RELOAD_COUNT 0xFA
- //#define RELOAD_COUNT 0xF3
- sbit LED6 = P2^6; //led7位置灯
- static u8 i=0;
- u8 Buffer[10];
- u8 isserver = 1;
- u8 ISSUCCESS = 0; //是否连接成功
- //睡眠
- void delay_10us(u16 ten_us)
- {
- while(ten_us--);
- }
- void delay(u16 len,u16 s){
- while(len--){
- delay_10us(s);
- }
- }
- //串口发送数据
- void UART_SendData(u8 dat)
- {
- ES=0; //关闭串口中断
- TI=0; //清发送完毕中断请求标志位
- SBUF=dat; //发送
- while(TI==0); //等待发送完毕
- TI=0; //清发送完毕中断请求标志位
- ES=1; //允许串口中断
- }
- //发送指令
- void SendCmd(u8 *pbuf)
- {
- while(*pbuf!='\0') //遇到空格跳出循环
- {
- UART_SendData(*pbuf);
- delay_10us(5);
- pbuf++;
- }
- delay_10us(5);
- UART_SendData('\r');//回车
- delay_10us(5);
- UART_SendData('\n');//换行
- delay_10us(2000);
- }
- //发送消息到服务端,只是多加了发送数据的指令
- void SendData(u8 *pbuf)
- {
- SendCmd("AT+MIPSEND=1,10");
- while(*pbuf!='\0') //遇到空格跳出循环
- {
- UART_SendData(*pbuf);
- delay_10us(5);
- pbuf++;
- }
- delay_10us(5);
- UART_SendData('\r');//回车
- delay_10us(5);
- UART_SendData('\n');//换行
- // delay_ms(10);
- }
- //串口设置
- void UART_Init(void)
- {
- SCON|=0X50; //设置为工作方式1
- TMOD|=0X20; //设置计数器工作方式2
- PCON=0X80; //波特率加倍
- TH1=RELOAD_COUNT; //计数器初始值设置
- TL1=TH1;
- ES=0; //关闭接收中断
- EA=1; //打开总中断
- TR1=1; //打开计数器
- ET1=0;
- // TI=1; //发送中断标记位,如果使用printf函数的必须设置
- }
- void main(){
- LED6=0;
- UART_Init();
-
- while(1){
- if(isserver){
- delay(5,50000);
- SendCmd("AT+CGDCONT=1,\"IP\",\"CMIOT\"");
- delay(5,50000);
- SendCmd("AT+CGACT=1,1");
- delay(5,50000);
- SendCmd("AT+MIPOPEN=1,\"TCP\",\"106.13.207.79\",11112");
- delay(5,50000);
- SendCmd("{id:A0002}");
- }
-
- }
-
- }
- //中断程序
- void UartIsr(void) interrupt 4
- {
- if (RI == 1) //当硬件接收到一个数据时,RI会置位
- {
- SendCmd("接收消息\n");
- LED6 = 1;
- RI = 0;
- }
- }
复制代码
|