Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Bokser4ik
2 / 2 / 1
Регистрация: 28.07.2013
Сообщений: 13
1

Пример работы таймера AT90S2313 из книги Прокопенко В

02.01.2015, 02:45. Просмотров 1564. Ответов 3
Метки нет (Все метки)

Уважаемые форумчане! Помогите новичку, пожалуйста. Обучаюсь самостоятельно по книге Прокопенко "Программирование микроконтроллеров ATMEL на языке C".

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
#include <avr/io.h>
 
int main(void)
{
   DDRD = 0x7F;          //0b01111111 все выводы порта D 
                                //работают как выходы
   PORTD = 0x7F;        //0b01111111 на всех выводах порта D
                                //устанавливаем уровень лог.1(+5В)
 
//Настройка таймера/счетчика 1
//Регистр управления TCCR1 - 16-ти разрядный, состоит из 
//двух 8-ми разрядных регистров TCCR1A и TCCR1B.
 
 
   TCCR1A = 0x00;       //Режим совпадения на выходе отключен
                                //поскольку мы не используем регистр
                                //совпадения OCR1. Также запрещена ШИМ.
 
   TCCR1B = 0x06;       //0b00000110 - регистр захвата (ICR1) не 
                                //используем, не используем OCR1. Значение
                                //110 означает, что источник импульсов - 
                                //ниспадающий фронт на выводе T1(PD5).
                                //Когда на PD5 сигнал с +5В перейдет к 0 В,
                                //счетный регистр TCNT1 увеличится на 1.
 
   TCNT1H = 0x00;
   TCNT1L = 0x00;
 
  while (1)
  {
   if (TCNT1L == 0x00 && TCNT1H == 0x00) //Если TCNT1=0, то
    {PORTD = 0x7F;}     //на все выводы порта D подаем +5 В.
   
   if (TCNT1L == 0x00 && TCNT1H == 0x80) //Если TCNT1 = 32768, то
    {PORTD = 0x00;}        //на выводы порта D подаем 0 D.
                                    }
}
Ну вот я в протеусе закинул это в МК. У меня загораются все диоды и ничего больше не происходит. А как здесь получить ниспадающий фронт? Получается нужно кнопку добавлять с заземлением? Понимаю, что причина ну совсем простенькая, но что то до меня не доходит. Совсем недавно с МК столкнулся.
Я изменял TCCR1B = 0x06 на TCCRB1 = 0x03. Получался сигнал каждые 525 мс(так как в книге указанно), диодики моргают все хорошо. Почему же не работает с листингом представленным в книге? Выходит, что в книге ошибка или нет?
Спасибо
Схема из протеуса ниже
0
Миниатюры
Пример работы таймера AT90S2313 из книги Прокопенко В  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2015, 02:45
Ответы с готовыми решениями:

Режим работы таймера Normal
При работе восьмиразрядного таймера в режиме Normal,он после вызова...

Не понимаю пример кода из книги по микроконтроллерам
Читаю книгу &quot;Практическое программирование MK Atmel AVR на языке ассемблера&quot;...

Странная зависимость работы таймера от внешних прерываний
Добрый день! При реализации одного проекта столкнулся с непониманием работы...

Замена AT90S2313 на ATtiny2313
Добрый день! Собираю адаптор UNIScan и в связи с тем что не могу найти...

Проверка ключей на AT90S2313
Доброго времени суток Прошу помочь с написанием программы,не могу заполнить 2...

3
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
02.01.2015, 08:12 2
Цитата Сообщение от Bokser4ik Посмотреть сообщение
//используем, не используем OCR1. Значение
* * * * * * * * * * * * * * * * //110 означает, что источник импульсов -
* * * * * * * * * * * * * * * * //ниспадающий фронт на выводе T1(PD5).
И где импульсы на PD5? Таймер счетчик не тактируется однако.
Используйте для тактирования таймера тактирование от ядра
C
1
TCCR1B=0x05;//CLK/1024
1
Yersen
0 / 0 / 1
Регистрация: 18.03.2015
Сообщений: 6
18.03.2015, 08:53 3
Столкнулся с той же проблемой. Просмотрел файлы примеров на диске к книге Прокопенко. В файле time16bit.lss
интересные строки:
ldi r24, 0x03 - не 0x06!!!
out 0x2e, r24 - 2e - это по даташиту TCCR1B.
Хотя и в книге, и в тексте записывается 0x06. Брал текст оригинала, компилировал в AVR Studio, сравнивал с оригинальным hex файлом, вся разница 3 вместо 6.
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
18.03.2015, 09:18 4
В переводной литературе могут быть ошибки поэтому лучше обращаться к первоисточнику. Для МК это даташит.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2015, 09:18

Работа с SRAM (AT90S2313)
СodeVisionaAVR Записать в кодах МК AT90S2313 программу, которая: -...

Зажигание светодиодов AT90S2313
Доброго времени суток. На AVR только начинающий Вот написал программу для...

интерпритация кода at90s2313 в ATtiny13A
Доброго вечера! Очень нужна помощь в портировании прошивки одного камня на...


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

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

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