gpt4 book ai didi

CodeVision AVR 发送和接收 USART 数据

转载 作者:太空宇宙 更新时间:2023-11-04 05:00:41 25 4
gpt4 key购买 nike

我正在尝试使用 USART 通信接收和发送数据,我使用的是 atmega16。我在 PC 中创建了一个程序来将字符串发送到 micro,如果字符串匹配,micro 将激活 adc 并将 adc 数据发送到 PC。

这是我的微 Controller 中的代码

#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#include <string.h>

#define ADC_VREF_TYPE 0xC0

unsigned int read_adc(unsigned char pin_adc)
{
ADMUX=pin_adc | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

//unsigned char DataInput = 0x00;
unsigned long int osilator = 12000000;
unsigned long int UBRR;
unsigned int t0, t1, t2, t3;
float t00, t11, t22, t33;

void inisialisasiUART(unsigned long int baud_rate);
//unsigned char getData(void);

unsigned char compare[30] = "a";
unsigned char input[30];
unsigned char buf[30];
void main(void)
{
ADMUX = ADC_VREF_TYPE;
ADCSRA = 0x85;
inisialisasiUART(9600);
while(1)
{
//DataInput = getData();

scanf("%s", input);
if(strcmp(input, compare) == 0)
{
t0 = read_adc(0);
t00 = (float)t0*256/1024;

t1 = read_adc(1);
t11 = (float)t0*256/1024;

t2 = read_adc(2);
t22 = (float)t0*256/1024;

t3 = read_adc(3);
t33 = (float)t0*256/1024;

sprintf(buf, "a%.2f %.2f %.2f %.2fa", t00, t11, t22, t33);
printf("%s", buf);
}
}
}

void inisialisasiUART(unsigned long int baud_rate)
{
UBRR = (osilator/(16*baud_rate))-1;
UBRRL = UBRR;
UBRRH = UBRR>>8;
UCSRB = 0x18;
UCSRC = 0x86;
}

unsigned char getData(void)
{
while(!(UCSRA & 0x80));
return UDR;
}

从我的代码来看,错误在哪里?我可以使用 scanf 接收 usart 数据吗?接收和发送数据的最佳方式是什么?使用 UDR 或 printf scanf?谢谢

最佳答案

好吧,您可以使用 strncmp(),但我个人会使用 strstr(),在“解析”响应时我更喜欢它。

关于CodeVision AVR 发送和接收 USART 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28043916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com