剛接觸ZigBee,熟悉了一下ZStack協議棧,總算有了點認識。先從調試串口開始,再慢慢開始協議棧代碼調試,下面程序已實現發送和接收數據,用的是CC Debugge仿真器和ZigBee最小系統,使用串口還得接個USB轉串口設備,我用的是USB轉TTL串口,直接貼代碼:
包含頭文件和系統變量聲明部分:
#include <ioCC2530.h>
#include <string.h>
#include"text.h"
char Temp;
uchar data = 0;
#define maxfile 100
char readdata[maxfile];
static char datatext[]="串口調試\n";
主函數部分:
void main(void)
{
CLKCONCMD &= ~0x40; //設置系統時鐘源爲32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振穩定爲32M
CLKCONCMD &= ~0x47; //設置系統主時鐘頻率爲32MHZ
InitUART(); //串口初始化
Uart_SendString(datatext,strlen(datatext));
while(1)
{
if( Temp != 0)
{
if((Temp!=' ')&&(data<maxfile))
readdata[data++] = Temp;
else
{
U0CSR &= ~0x40; //禁止接收
Uart_SendString(readdata,data); //發送已記錄的字符串。
U0CSR |= 0x40; //允許接收
data = 0;
}
Temp = 0;
}
}
}
普通延時函數:
void delay(unsigned int i)
{
unsigned int j;
for(i=i;i>0;i--)
for(j=0;j<0x3000;j++);
}
串口初始化函數:
void InitUART(void)
{
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x0c; //P0_2,P0_3用作串口(外部設備功能)
P2DIR &= ~0XC0; //P0優先作爲UART0
U0CSR |= 0x80; //設置爲UART方式
U0GCR |= 8;
U0BAUD |= 59; //波特率設爲9600
UTX0IF = 0; //UART0 TX中斷標誌初始置位0
U0CSR |= 0X40; //允許接收
IEN0 |= 0x84; // 開總中斷,接收中斷
}
數據發送函數:
void Uart_SendString(char *Data,int length)
{
int j;
for(j=0;j<length;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
中斷服務程序:
#if 1
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0; // 清中斷標誌
Temp = U0DBUF;
}
#endif
頭文件部分:
#ifndef TEXT_H
#define TEXT_H
typedef unsigned char uchar;
void delay(unsigned int i);
void initUART(void);
void Uart_SendString(char *Data,int length);
#endif
更多技術文章瀏覽請關注:
百家號:
https://author.baidu.com/home?context=%7B%22app_id%22%3A%221646108714303504%22%7D&wfr=bjh
頭條號:
https://www.toutiao.com/c/user/8115738721/#mid=1646025109246987