реклама на сайте
подробности

 
 
> Непонятна логика программы, Не могу найти ошибку. Подскажите.
Motion
сообщение Feb 13 2008, 20:12
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 23-07-07
Из: Киев
Пользователь №: 29 297



Пишу программу на С для AVR. Cуть - плавный пуск.

Проблемный кусок:

Цитата
int n=0;

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
n=n+1;


if (0<n<11) {
TCNT0=0x83;
TCCR0=0x03;
}

if (10<n<21) {
TCNT0=0x91;
TCCR0=0x03;
}


if (20<n<31) {

TCNT0=0x9D;
TCCR0=0x03;

}

}


Объявил глобальную переменную. Присвоил ей нулевое значение. При каждом внешнем прерывании переменная инкрементируется. В зависимости от количества прерываний запускается таймер с разной константой.

То есть первых 10 прерываний - константа будет 0x83
Следующий 10 - 0x91 и т.д.

Но на асемблере получилось не так, как планировалось. Программа проверяет каждое условие и всё равно выполняет все подряд операторы. Например в начале, когда n=1, она проверяет не меньше ли оно 10. Оно меньше. Значит выполняются операторы. Потом идёт вторая проверка. Тут условие не выполняется, но всё равно операторы выполняются.

Программа на асемблере:

Цитата
; 44 // Place your code here
; 45 n=n+1;
MOVW R30,R4
ADIW R30,1
MOVW R4,R30
; 46 second=0;
CLR R6
CLR R7
; 47
; 48 if (0<n<11) {
MOVW R30,R4
LDI R26,LOW(0)
LDI R27,HIGH(0)
CALL __LTW12
CPI R30,LOW(0xB)
BRSH _0x3

; 49 TCNT0=0x83;
LDI R30,LOW(131)
OUT 0x32,R30
; 50 TCCR0=0x03;
LDI R30,LOW(3)
OUT 0x33,R30
; 51 }
; 52
; 53 if (10<n<21) {
_0x3:
MOVW R30,R4
LDI R26,LOW(10)
LDI R27,HIGH(10)
CALL __LTW12
CPI R30,LOW(0x15)
BRSH _0x4

; 54 TCNT0=0x91;
LDI R30,LOW(145)
OUT 0x32,R30
; 55 TCCR0=0x03;
LDI R30,LOW(3)
OUT 0x33,R30


...................................


__LTW12:
CP R26,R30
CPC R27,R31
LDI R30,1
BRLT __LTW12T
CLR R30
__LTW12T:
RET




То что подчеркнул красным проблемные места. Получается R30 всегда либо 1, ли бо 0.


Подскажите, в чём ошибка.

Сообщение отредактировал Владимир_КПИ - Feb 13 2008, 20:21
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Motion
сообщение Feb 13 2008, 21:15
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 23-07-07
Из: Киев
Пользователь №: 29 297



Спасибо. Исправил. Сейчас проверю работу на практике.

Всё отлично работает. Программа своё отрабатывает. Единственное, что плавный пуск делается за 10 шагов. Нужно сделать чаще, чтобы для зрения не было замерно. Чтобы был именно планым, а не рывками.
Но если добавлю ещё операторов if будет не совсем хорошо - при каждом прерывании делать множество проверок. Нельзя ли как-то оптимизировать код?

Видео

Сообщение отредактировал Владимир_КПИ - Feb 13 2008, 21:23
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Владимир_КПИ   Непонятна логика программы   Feb 13 2008, 20:12
- - zltigo   Проблема в том, что это написано не на "C...   Feb 13 2008, 20:32
|- - singlskv   Цитата(zltigo @ Feb 13 2008, 23:32) Пробл...   Feb 13 2008, 22:53
- - Владимир_КПИ   Программа писалась в CodeVisionAVR. Языка особо не...   Feb 13 2008, 20:43
|- - zltigo   Цитата(Владимир_КПИ @ Feb 13 2008, 23:43)...   Feb 13 2008, 20:47
- - rezident   Жесть! Зело позабавило Владимир_КПИ, для нача...   Feb 13 2008, 20:55
|- - =AK=   Цитата(Владимир_КПИ @ Feb 14 2008, 06:45)...   Feb 13 2008, 23:49
|- - zltigo   Цитата(=AK= @ Feb 14 2008, 02:49) http://...   Feb 14 2008, 00:20
- - SSerge   Более эффективный способ проверок, требуется тольк...   Feb 14 2008, 02:56
- - Владимир_КПИ   Цитата__flash char table[] = { 131, 132, ..... 145...   Feb 14 2008, 06:19
- - Gogan   unsigned int n=0; #define tcnt0_max 0xff #define...   Feb 14 2008, 06:50
- - Владимир_КПИ   Есть массив: int time[100]={0xFB04, 0xF8F2, ........   Feb 14 2008, 09:57
|- - Liseev   Цитата(Владимир_КПИ @ Feb 14 2008, 12:57)...   Feb 14 2008, 10:14
|- - zltigo   Цитата(Liseev @ Feb 14 2008, 13:14) TCNT1...   Feb 14 2008, 15:51
|- - Liseev   Цитата(zltigo @ Feb 14 2008, 18:51) TCNT1...   Feb 14 2008, 16:28
|- - zltigo   Цитата(Liseev @ Feb 14 2008, 19:28) резул...   Feb 14 2008, 18:12
- - Владимир_КПИ   Спасибо   Feb 14 2008, 10:48
- - Владимир_КПИ   Вчера написал программу для плавного пуска с испол...   Feb 14 2008, 15:45
- - Владимир_КПИ   Исправил. Всё равно пока не работает. Обновлённа...   Feb 14 2008, 16:01
- - Владимир_КПИ   Может проблема с тактированием. Устанавливал фъюзы...   Feb 14 2008, 17:46
- - Владимир_КПИ   Как же всё просто было. Я увеличил тактовую частот...   Feb 14 2008, 18:30
- - Владимир_КПИ   Добавил в схему кнопку для увеличения яркости. Сто...   Feb 15 2008, 07:03
|- - zltigo   Цитата(Владимир_КПИ @ Feb 15 2008, 10:03)...   Feb 15 2008, 07:22
|- - Dog Pawlowa   Цитата(Владимир_КПИ @ Feb 15 2008, 11:03)...   Feb 15 2008, 07:31
- - Владимир_КПИ   ЦитатаКаким генератором случайных текстов пользует...   Feb 15 2008, 07:29
|- - zltigo   Цитата(Владимир_КПИ @ Feb 15 2008, 10:29)...   Feb 15 2008, 07:48
- - Владимир_КПИ   while (1) { while (PINC.0==1){} //кнопка подключе...   Feb 15 2008, 07:37
|- - Dog Pawlowa   Цитата(Владимир_КПИ @ Feb 15 2008, 11:37)...   Feb 15 2008, 07:55
- - Владимир_КПИ   В постоянном цикле происходит проверка линия порта...   Feb 15 2008, 07:56
|- - Dog Pawlowa   Цитата(Владимир_КПИ @ Feb 15 2008, 11:56)...   Feb 15 2008, 08:17
- - Владимир_КПИ   ЦитатаПопробуйте подумать, что будет дальше, если ...   Feb 15 2008, 08:22
|- - Dog Pawlowa   Цитата(Владимир_КПИ @ Feb 15 2008, 12:22)...   Feb 15 2008, 08:30
- - Владимир_КПИ   И что из этого следует? Нужно увеличить задержку? ...   Feb 15 2008, 08:34
|- - Dog Pawlowa   Цитата(Владимир_КПИ @ Feb 15 2008, 12:34)...   Feb 15 2008, 09:19
- - Владимир_КПИ   ЦитатаТо есть думать сами Вы категорически отказыв...   Feb 15 2008, 09:25
- - BigCoster   Цитата(Владимир_КПИ @ Feb 15 2008, 13:25)...   Feb 15 2008, 13:23


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th August 2025 - 11:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01444 секунд с 7
ELECTRONIX ©2004-2016