- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 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/
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 6 年前。 Improve this ques
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
CodevisionAVR 获取一个.c 文件并生成.hex 和.o 输出。 是否也可以从中生成 .asm 文件? 最佳答案 根据这个CodeVisionAVR tutorial , 当您按下工具栏上
我正在尝试使用 USART 通信接收和发送数据,我使用的是 atmega16。我在 PC 中创建了一个程序来将字符串发送到 micro,如果字符串匹配,micro 将激活 adc 并将 adc 数据发
我是 C 语言的初学者。我正在尝试写入和读取外部 eeprom (AT24c02B),然后将 eeprom 中存储的数据字节显示到 PORTB 中的 LED 和/或 LCD。所以我知道数据成功存储在e
在许多语言中,例如java,c#,...,我们使用 //region Variables . . . //endregion 用于类别代码。我们在 CodeVision 编辑器中使用“
在下面您可以看到我用 Codevision(C 语言)编写的整个程序。当我想编译它时,我收到一些关于 Switch block 的错误!我很确定我的 block 的形式是正确的!你能看一看吗? ***
我有一个设置为 CodeVision AVR 项目的遗留代码。我想迁移到 AVR Studio 甚至更好的 NetBeans(使用 AVR 工具链或 WinAVR)。 有什么想法吗? 最佳答案 你应该
我是一名优秀的程序员,十分优秀!