AVR单片机mega16如何将AD转换后的数据通过UART发送出去
2个回答
展开全部
把转换后的数据分成两个字节,高字节在前或者低字节在前你自己定,我习惯用协议,所以习惯用两个字节表示一个数据,然后让单片机串口把这两个字节发出去就行。比如你ad转换后的数据为十进制256,则要把十六进制100通过串口发出,先发01 ,再发00,最好遵循一种协议,比如modbus协议,然后把数据放入一个数组,这个数组就是遵循modbus的数组,操作单片机串口发送数组就行。如果你转换的数据时浮点数,最简单的方法是确定好浮点数的小数点位数,然后将这个浮点数*100倍或者乘1000倍,变为整数发送,发出后在上位机或者另外单片机再除这个倍数还原。给你个mega164p发送的程序。
串口0发送函数发送1个字符
************************************************************************/
void USART_Transmit0(unsigned char data) //串口0发送数据,查询方式
{
while (!(UCSR0A & DATA_REGISTER_EMPTY0)); // 等待发送寄存器空
UDR0 = data; // 发送数据
//while(!(UCSR0A&(1<<TXC0)));
// UCSR0A|=(1<<TXC0);
}
/***********************************************************************
串口0发送函数发送n个字符
************************************************************************/
void usart0_transmit_array(unsigned char string[],unsigned char n)//n为数组长度
{
volatile unsigned char i;
for (i=0;i<n;i++)
{
USART_Transmit0(string[i]);
}
}
串口0发送函数发送1个字符
************************************************************************/
void USART_Transmit0(unsigned char data) //串口0发送数据,查询方式
{
while (!(UCSR0A & DATA_REGISTER_EMPTY0)); // 等待发送寄存器空
UDR0 = data; // 发送数据
//while(!(UCSR0A&(1<<TXC0)));
// UCSR0A|=(1<<TXC0);
}
/***********************************************************************
串口0发送函数发送n个字符
************************************************************************/
void usart0_transmit_array(unsigned char string[],unsigned char n)//n为数组长度
{
volatile unsigned char i;
for (i=0;i<n;i++)
{
USART_Transmit0(string[i]);
}
}
追问
如果用GSM模块接收的话,需要电平转换吗?可以直接把单片机的UART口跟GSM的直接相连吗?
追答
单片机uart转换成232电平后(加个max232)可以和gsm串口连接。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询