发表于: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;
谢谢各位!
那这个串口收发程序应该怎么改,才能把数据包收发完毕呢?
#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;
谢谢各位!