|
我是初學(xué)者。想請(qǐng)教一點(diǎn)遇到的問(wèn)題。用stc12c5a60s2寫(xiě)了一個(gè)用正點(diǎn)原子lora模塊點(diǎn)對(duì)點(diǎn)級(jí)聯(lián)傳輸?shù)拇a。
寫(xiě)的比較簡(jiǎn)單,調(diào)試串口的時(shí)候,打印函數(shù)一直沒(méi)有正常工作。
能不能幫我看一下是哪里出了問(wèn)題。謝謝。
單片機(jī)源程序如下:
#include<stdio.h>
#include<string.h>
#include<math.h>
#include "typedef.h"
#include "gpio.h"
#include "intrins.h"
#include"string.h"
unsigned char send_lora_buf[]="AT\r\n";
unsigned char recv_lora_buf[16]={0}; //查詢本機(jī)lora地址,返回格式是+ADDR:00,00
unsigned char lora_addr[2]={0}; //本機(jī)lora地址
unsigned char next_lora_addr[2]={0}; //要發(fā)送的lora地址
unsigned char send_data[20]={0};//lora發(fā)送給下一個(gè)字符串
unsigned char chn[1]={0x00};//信道
unsigned char recv_data[10]={0}; //接收收到的數(shù)據(jù)
unsigned char flag = 0;
unsigned char temp = 0;
int hex_to_dec(char *a)//十六進(jìn)制數(shù)轉(zhuǎn)十進(jìn)制數(shù)
{
int len = strlen(a);
int sum = 0;
int i;
for (i = 0;i < len;i++)
{
if(a[ i] >= 'A' && a[ i] <= 'F')
{
a[ i] = (int) (a[ i] - 'A') + 10 + '0';
}
if(a[ i] >= 'a' && a[ i] <= 'f')
{
a[ i] = (int) (a[ i] - 'a') + 10 + '0';
}
sum += (a[ i] - '0') * (pow(16.0,len - 1 - i));
}
return sum;
}
void uartInit(void) //串口初始化
{
SCON = 0x50;//
AUXR |= 0x40;//
AUXR &= 0xFE;
TMOD &= 0x0F; //
TL1 =0xE8;//
TH1 =0xFF; //
TR1 = 1; //
ET1 = 0; //
EA = 1; //允許中斷
ES = 1; //允許串口中斷
TI = 1;
// P30 RX P31 TX
}
void delay_ms(int n) //@11.0592MHz
{
while(n--) //將延時(shí)一毫秒的程序循環(huán)執(zhí)行n次,通過(guò)形參來(lái)調(diào)節(jié)延時(shí)的時(shí)長(zhǎng)
{
unsigned char i, j;
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void uartsenddata(unsigned char c) //串口發(fā)送單個(gè)字節(jié)
{
SBUF = c;
while(!TI); //若TI=0,在此等待
TI = 0;
}
void uartsendstring(char *s) //串口發(fā)送字符串
{
while (*s){ //檢測(cè)字符串結(jié)束標(biāo)志
uartsenddata(*s++);
}
}
void main(void)
{
u8 addr_doc = 0;//地址十進(jìn)制數(shù)
uartInit(); //使能串口115200
printf("send_lora_buf:%s",send_lora_buf);
P33 = 1;//MD0拉高,和LORA通訊,接收地址。
P32 = 0;
delay_ms(40);
uartsendstring(send_lora_buf); //串口發(fā)送查詢地址命令
delay_ms(70);
if(flag ==1)
{
strcpy(recv_lora_buf,recv_data);//接收到lora應(yīng)答
printf("recv_data:%s",recv_data);
printf("recv_lora_buf:%s",recv_lora_buf);
}
P33 = 0; //關(guān)閉lora查詢
delay_ms(40);
lora_addr[0]= recv_lora_buf[7]; //獲取本機(jī)地址高位
lora_addr[1]= recv_lora_buf[9]; //獲取本機(jī)地址低位
addr_doc = hex_to_dec(lora_addr); //將十六進(jìn)制地址轉(zhuǎn)十進(jìn)制
addr_doc+=1;
sprintf(next_lora_addr,"%X",addr_doc); //將地址轉(zhuǎn)為十六進(jìn)制數(shù)
while(1)
{
printf("waiting...");
//接收到數(shù)據(jù)
if(flag ==1)
{
flag =0;
strcat(send_data,next_lora_addr);
strcat(send_data,chn);
strcat(send_data,recv_data);//地址信道發(fā)送內(nèi)容拼成數(shù)據(jù)包
}
printf("send_data:%s",send_data);
uartsendstring(send_data);
}
}
void UART_1Interrupt() interrupt 4 //串口中斷函數(shù)接收程序
{
static unsigned char i;
if (RI){
RI=0;
temp = SBUF;
recv_data[ i]=temp;//接收到的數(shù)據(jù)存入數(shù)組recv_data中
i++;
if(temp==0x0D){
i=0;
flag=1;//定義接收完成標(biāo)志位
}
}
}
|
-
-
原理圖.pdf
2023-4-16 22:41 上傳
點(diǎn)擊文件名下載附件
108.27 KB, 下載次數(shù): 19
|