新闻| 论坛| 博客| 在线研讨会
Zigbee综合小实验(1)
luker| 2016-02-25 14:24:15 阅读:1685 发布文章

综合前面5个基础实验,利用串口线进行PC机与单片机之间的通信,利用串口助手向单片机发送字符串,单片机接收到一个字节红色LED灯闪烁一次,当字符串长度合法时LCD显示屏显示该字符串,当长度非法时红色LED灯常亮,LCD显示错误信息,并且向PC机反馈错误信息。

源代码:

#include
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define RLED P1_0 //定义控制灯的端口

void initUART0(void);
void InitialAD(void);
void UartTX_Send_String(uchar *Data,int len,int type);

uchar Recdata[30]=" ";
uchar ERR[26]="The string is too long!\r\n "; //反馈的错误信息
uchar RXTXflag = 1;//接收状态标志,1为继续接收,2为所接收字符串过长,3为接收完毕。
uchar temp; //存放所接收的字节
uint datanumber = 0;

void initUART0(void)
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定
CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x3c; //P0用作串口
P2DIR &= ~0XC0; //P0优先作为UART0
U0CSR |= 0x80; //串口设置为UART方式
U0GCR |= 9;
U0BAUD |= 59; //波特率设为19200
UTX0IF = 1; //UART0 TX中断标志初始置位1
U0CSR |= 0X40; //允许接收
IEN0 |= 0x84; //开总中断,接收中断
}

void UartTX_Send_String(uchar *Data,int len,int type) //显示与反馈子程序
{
if(type==0){
ClearRAM();
Print8(0,1,Data); //长度合法时,LCD显示字符串
}
else{
int j=len;
ClearRAM();
Print8(0,1,"ERROR!Can not display!!"); //LCD显示错误信息
for(int i=0;i U0DBUF=*Data++;
while(UTX0IF==0);
UTX0IF=0;
}

}
for(int c=0;c Recdata[c]=(uchar)NULL;
}

void main(void)
{

P0DIR=0XFF;
P1DIR=0XFF;
initLCDM();
ResetLCD();
RLED = 0; //关LED
initUART0();
while(1)
{
if(RXTXflag == 1) //接收状态
{

if( temp != 0)
{
if((temp!='//m.amcfsurvey.com/yifeichongtian.spaces/articles/article/item/#')&&(datanumber {
Recdata[datanumber++] = temp;
//恢复到接收状态
}else{
RXTXflag = 3;

}
if(datanumber = 22)
RXTXflag = 2;
temp = 0;
}
}
if(RXTXflag == 2){
UartTX_Send_String(ERR,sizeof(ERR),1);
datanumber = 0; //指针归0
RXTXflag=1;
}
if(RXTXflag == 3) //发送状态
{

U0CSR &= ~0x40; //不能收数据
UartTX_Send_String(Recdata,datanumber,0);
U0CSR |= 0x40; //允许接收
RXTXflag = 1; //恢复到接收状态
datanumber = 0; //指针归0
RLED = 0; //关发送指示

}
}
}

#pragma vector = URX0_VECTOR //中断服务子程序,处理接收到字符产生的中断
__interrupt void UART0_ISR(void)
{
URX0IF = 0;//清中断标志
RLED = 1; //接收时红灯亮,发送后红灯灭。实现闪烁。
temp = U0DBUF;

}

实验结果:
Zigbee综合小实验(1) - j_evil - J_evil

Zigbee综合小实验(1) - j_evil - J_evil

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客