|
|
  |
регистр TCNT3 в атмеге162, где он???? |
|
|
|
Apr 15 2010, 08:04
|
Участник

Группа: Участник
Сообщений: 60
Регистрация: 16-06-05
Пользователь №: 6 074

|
1. Есть. В пространстве ОЗУ, TCNT3H - 0x89, TCNT3L - 0x88 2. CODE unsigned int blabla; TCNT3H = blabla << 8; TCNT3L = blabla;
|
|
|
|
|
Apr 15 2010, 09:16
|
Частый гость
 
Группа: Участник
Сообщений: 128
Регистрация: 12-11-09
Из: Perm
Пользователь №: 53 565

|
Цитата(Vetal-Soft @ Apr 15 2010, 14:19)  1. Есть. В пространстве ОЗУ, TCNT3H - 0x89, TCNT3L - 0x88 2. CODE unsigned int blabla; TCNT3H = blabla << 8; TCNT3L = blabla; TCNT3H и TCNT3L я от туда и считываю но получаю 8битное число.. хотя таймер 16битный...
|
|
|
|
|
Apr 15 2010, 11:33
|
Частый гость
 
Группа: Участник
Сообщений: 128
Регистрация: 12-11-09
Из: Perm
Пользователь №: 53 565

|
Цитата(SSerge @ Apr 15 2010, 16:15)  Для начала нужно прочитать раздел "Accessing 16-bit Registers" из даташита, в разделе посвященном описанию таймеров "16-bit Timer/Counter (Timer/Counter 1 and Timer/Counter3 )". Там написано в каком порядке нужно читать/писать эти регистры. Приличный компилятор делает это сам, например для IAR просто описан 16-разрядный регистр TCNT3 и с ним можно работать именно как с 16-битной переменной не задумываясь о порядке доступа к младшей/старшей части. при всем том что написано в разделе "Accessing 16-bit Registers" С регистром TCNT1 можно работать как обычной 16битной переменной.. а вот регистра TCNT3 вообще нет.. даже в ДШ. кто найдет напишите адрес Ну даладно вопрос решен по другому. Был использован регистр TCNT1 на множество процессов.. только вот код вышел раз в 20 больше...
|
|
|
|
|
Apr 15 2010, 12:37
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(Станис @ Apr 15 2010, 14:48)  при всем том что написано в разделе "Accessing 16-bit Registers" С регистром TCNT1 можно работать как обычной 16битной переменной.. а вот регистра TCNT3 вообще нет.. даже в ДШ. кто найдет напишите адрес Ну даладно вопрос решен по другому. Был использован регистр TCNT1 на множество процессов.. только вот код вышел раз в 20 больше...  Не понятно что у вас не получается.... В документации всё предельно ясно написано с примерами кода: Код Assembly Code Examples(1) ... ; Set TCNTn to 0x01FF ldi r17,0x01 ldi r16,0xFF out TCNTnH,r17 out TCNTnL,r16 ; Read TCNTn into r17:r16 in r16,TCNTnL in r17,TCNTnH ... C Code Examples(1) unsigned int i; ... /* Set TCNTn to 0x01FF */ TCNTn = 0x1FF; /* Read TCNTn into i */ i = TCNTn; Если пишете на С то вообще не понятно к чему эта возня с адресами, разделениями на H/L и т.п. TCNT3 = 0x1234; //запись или unsigned int tcnt3_val = TCNT3; //чтение На ассемблере просто соблюдайте порядок: при записи TCNT3H/TCNT3L при чтении TCNT3L/TCNT3H
|
|
|
|
|
Apr 16 2010, 02:57
|
Частый гость
 
Группа: Участник
Сообщений: 128
Регистрация: 12-11-09
Из: Perm
Пользователь №: 53 565

|
Цитата(mempfis_ @ Apr 15 2010, 18:52)  Не понятно что у вас не получается.... В документации всё предельно ясно написано с примерами кода: Код Assembly Code Examples(1) ... ; Set TCNTn to 0x01FF ldi r17,0x01 ldi r16,0xFF out TCNTnH,r17 out TCNTnL,r16 ; Read TCNTn into r17:r16 in r16,TCNTnL in r17,TCNTnH ... C Code Examples(1) unsigned int i; ... /* Set TCNTn to 0x01FF */ TCNTn = 0x1FF; /* Read TCNTn into i */ i = TCNTn; Если пишете на С то вообще не понятно к чему эта возня с адресами, разделениями на H/L и т.п. TCNT3 = 0x1234; //запись или unsigned int tcnt3_val = TCNT3; //чтение На ассемблере просто соблюдайте порядок: при записи TCNT3H/TCNT3L при чтении TCNT3L/TCNT3H В ДШ вообще не указан адрес этого регистра и компилятор кодвижн вообще не хочет компилировать.. мотивируя тем что я вообще ему написал какуюто лажу TCNT3..
|
|
|
|
|
Apr 16 2010, 05:26
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата В ДШ вообще не указан адрес этого регистра Адрес вам указали: Код 1. Есть. В пространстве ОЗУ, TCNT3H - 0x89, TCNT3L - 0x88 Цитата и компилятор кодвижн вообще не хочет компилировать.. мотивируя тем что я вообще ему написал какуюто лажу TCNT3.. А хидер правильный подключён? Напишите свою функцию и читайте через указатель: Код unsigned int tcntL=0, tcntH=0; tcntL = (unsigned int) *( (unsigned char*) 0x88); tcntH = (unsigned int) *( (unsigned char*) 0x89);
|
|
|
|
|
Apr 18 2010, 10:01
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Ошибочка у Вас тут: Цитата(Станис @ Apr 16 2010, 09:33)  #define TCNT3 (*(unsigned char *) 0x88) // 16 bit access Вы наверное хотите этого... Код #define TCNT3 (*(unsigned short*) 0x88)
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Apr 18 2010, 23:19
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Станис @ Apr 15 2010, 08:56)  Где шайтан зарыт??? В IAR и в WinAVR никаких проблем с TCNT3 нет. Просто пишете x = TCNT3; без всякого шайтанства. Наверно с CV работаете? Вот в нем шайтан и зарыт. Может пора снести этот шайтан-CV, и начать пользоваться нормальными инструментами?
|
|
|
|
|
Apr 19 2010, 02:57
|
Частый гость
 
Группа: Участник
Сообщений: 128
Регистрация: 12-11-09
Из: Perm
Пользователь №: 53 565

|
Цитата(demiurg_spb @ Apr 18 2010, 16:16)  Ошибочка у Вас тут: Вы наверное хотите этого... Код #define TCNT3 (*(unsigned short*) 0x88) ну да ошибся.. Я думаю лучше будет (*(unsigned int *) .. short тут никчему Цитата(defunct @ Apr 19 2010, 05:34)  В IAR и в WinAVR никаких проблем с TCNT3 нет. Просто пишете x = TCNT3; без всякого шайтанства.
Наверно с CV работаете? Вот в нем шайтан и зарыт. Может пора снести этот шайтан-CV, и начать пользоваться нормальными инструментами? Когда начал осваивать МК первое что попалось на глаза CVAVR, в принципе пока меня устраивает ну и изучаю я мк всего еще 3 месяца..
Сообщение отредактировал Станис - Apr 19 2010, 03:31
|
|
|
|
|
Apr 19 2010, 06:57
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(Станис @ Apr 19 2010, 07:12)  ну да ошибся.. Я думаю лучше будет (*(unsigned int *) .. short тут никчему Это абсолютно безразлично для Вашего конкретного случая. Цитата(Станис @ Apr 19 2010, 07:12)  Когда начал осваивать МК первое что попалось на глаза CVAVR, в принципе пока меня устраивает ну и изучаю я мк всего еще 3 месяца.. Побаловались и хватит. Переходите на что-нибудь серьёзное (gcc, iar). И чем раньше, тем лучше.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|