您现在所在的是:

传感器论坛

回帖:0个,阅读:812 [上一页] [1] [下一页]
910
tianyabingxu
文章数:2
年度积分:50
历史总积分:910
注册时间:2007/5/18
发站内信
发表于:2007/5/22 16:44:00
#0楼
通过串口调试助手一次只能发8位数据,要发送数据包就得拆开发,
那这个串口收发程序应该怎么改,才能把数据包收发完毕呢?
#include <avr/io.h>
#include<avr/delay.h>
#define uchar unsigned char
#define uint unsigned int
#define SET_LED PORTA&=0XFE //PA0 接黄色发光管
#define CLR_LED PORTA|=0X01
/***************************************************
*名称DelayMs()
*功能  延时1ms 函数
*入口参数ms
*出口参数:无
*****************************************************/
void DelayMs(uint ms)
{
uint i;
for(i=0;i<ms;i++)
_delay_loop_2(1843);
}
/***************************************************
*名称putc()
*功能  向串口发送数据
*入口参数char c
*出口参数:无
*****************************************************/
void putc(uchar c)
{
while( !(UCSR0A & (1<<UDRE0)) );//数据发送已准备好,发送
UDR0=c;
}
/***************************************************
*名称getc()
*功能  从串口接收数据
*入口参数:无
*出口参数:UDR
*****************************************************/
uchar getc(void)
{
while( !(UCSR0A & (1<<RXC0)) );//接收完成
return UDR0;
}
/***************************************************
*名称main()
*功能  串口通信
*入口参数:无
*出口参数:UDR
*****************************************************/
int main(void)
{
//uart 初始化
DDRA=_BV(PA0);
PORTA=_BV(PA0);

UBRR0L=7;//576000 baud 7.3728MHz:50
UCSR0B=_BV(RXEN0)|_BV(TXEN0);//发送或接受允许
while(1)
{
SET_LED;
putc(getc());
CLR_LED;
DelayMs(500);
}
}


另外:想把WSN数据包的结构体加进去,应该怎么处理啊?
struct HEADER
{
 unsigned int fc;//帧控制信息,2字节
 unsigned char number;//帧序列号,1字节
 unsigned int destinationaddr_pan;//目的设备PAN标识符
 unsigned int destinationaddr;//目标地址
 unsigned int sourceaddr_pan;//源设备PAN标识符
 unsigned int sourceaddr;//源设备地址
};

struct PACKET_WSN
{
 unsigned long preamble;//前导码序列,4字节
 unsigned char sfd;//帧开始分隔符,1字节
 unsigned char phr;//帧长度,1字节
 struct HEADER header;//MAC子层帧头
 char a[6];//帧数据单元
 unsigned int fcs;//错误校验修正码,2字节
}packet_wsn;
谢谢各位!

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

31.2002