1 / 1 / 1
Регистрация: 11.02.2015
Сообщений: 82
1

Работа с UART ATMega8

11.02.2015, 11:17. Показов 1625. Ответов 5
Метки нет (Все метки)

Всем привет! Использую эту программу
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <mega8.h>
#include <delay.h>
#include <stdio.h>
 
void main(void) {
    // USORT initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USORT Receiver: Off
    // USORT Transmitter: On
    // USORT Mode: Asynchronous
    // USORT Baud Rate: 9600
    UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
    UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
    UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
 
    while(1) {
        putsf("Hello, world!"); 
        delay_ms(1000);
    }
}
Приходит:
Что то не то с кодировкой что-ли...
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2015, 11:17
Ответы с готовыми решениями:

Использование UART в ATMega8
Доброго времени суток! Столкнулся с проблемой написания программы на C для микроконтроллера...

Работа в Proteus. Atmega8 + светодиодная матрица
Не могу понять как собрать схему в программе proteus... В схеме должно быть МК Atmega8 и матрица...

Работа с графическим дисплеем WG12864 из Atmega8
Добрый день. У меня такая проблема. Я тупое существо (похожее на палено), меня интересует...

MSP430F5435A. Работа с UART
написал такую програмку для отправки по UART... эффекта нету, со стороны схемы всё норм, в чём...

5
1927 / 1242 / 124
Регистрация: 04.01.2010
Сообщений: 4,448
11.02.2015, 11:22 2
Цитата Сообщение от bartle Посмотреть сообщение
// USORT Baud Rate: 9600
где и чем вы его задаете? Посмотите в ДШ контроллера. У него для этого есть специальные регистры.
0
1 / 1 / 1
Регистрация: 11.02.2015
Сообщений: 82
11.02.2015, 11:44  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <mega8.h>
#include <stdio.h>
 
int i;
int lng;
char mystr[]="Atmega8 UART ready!";
char rc;
 
void lampOFF()
{
    PORTB.0=0;
}
 
void lampON()
{
    PORTB.0=1;
}
 
void initUART()
{
    UCSRB|=(1<<3)|(1<<4);   
    UBRRH=0x00;
    UBRRL=0x33;
}
 
void main(void)
 
{
    DDRB.0=1;
    initUART();
 
    lng=19;
    for (i=0; i < lng; i++)    {
        while ( !( UCSRA & (1<<5)) ) {}
        UDR=mystr[i];
    }
 
    while (1)
    {
        if ((UCSRA & (1<<7)))
        {
            rc=UDR;
        }
 
        switch (rc)
        {
            case '1': lampON(); break;
            case '2': lampOFF(); break;
        }
 
    }
 
}
И вот что пришло:
0
1927 / 1242 / 124
Регистрация: 04.01.2010
Сообщений: 4,448
11.02.2015, 12:50 4
Лучший ответ Сообщение было отмечено bartle как решение

Решение

Цитата Сообщение от bartle Посмотреть сообщение
UCSRA & (1<<5)
- в такой записи мало смысла - называйте в коде флаги своими именами - вы ж потом сами не разберетесь. я вот, скажем, не помню что означает 5й бит в UCSRA...

Ну, и все еще неправильно настроена скорость. По-простому, не меняя кода, просто пощелкайте скорости в программе - возможно, она в 8 раз меньше (1200). Тогда очевидно, проц работает на на той частоте, которую вы предполагаете.
1
1 / 1 / 1
Регистрация: 11.02.2015
Сообщений: 82
11.02.2015, 13:35  [ТС] 5
Да!! Спасибо! Поставил 1200 все работает)
Странно эта строчка не говорит о скорости? UBRRL=0x33;
0
1927 / 1242 / 124
Регистрация: 04.01.2010
Сообщений: 4,448
11.02.2015, 14:45 6
Цитата Сообщение от bartle Посмотреть сообщение
Странно эта строчка не говорит о скорости? UBRRL=0x33;
Эта строчка работает вместе с UBRRH=0, причем, в ДШ описаны ньюансы использования этого 16-битного регистра. Будьте внимательны в дальнейшем. Она говорит лишь о делителе частоты UART'а по отношению к тактовой частоте CPU. А задание тактовой частоты в Меге подробно описано в ДШ - это несколько регистров, выбирающих источник тактования и делитель. Частично они доступны из кода, частично программируются фьюзами. То, что вы в проекте задаете какую-то там частоту - это всего лишь привязка к ней в коде, не никак не по факту.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.02.2015, 14:45

Работа с UART ATMega8
к примеру надо отправить число 21367 в ком порт с атмеги8 чтобы потом на компе программой считать....

Работа с UART в МК ATMega8
Не хочет работать передача данных. Подключаю к ножкам PD0 и PD1 через USB/UART TTL конвертор...

UART Atmega8 Terminal
Всем доброго времени суток! У меня есть код : #define F_CPU 8000000UL #include &lt;avr/io.h&gt;...

DS18B20->Atmega8->UART
Всем привет! Я ломаю голову над тем, как передавать температуру по UART, а именно как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.