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

 
 
> Непонятна логика программы, Не могу найти ошибку. Подскажите.
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

Сообщений в этой теме
- Владимир_КПИ   Непонятна логика программы   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
- - Владимир_КПИ   Спасибо. Исправил. Сейчас проверю работу на практи...   Feb 13 2008, 21:15
|- - =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 Текстовая версия Сейчас: 3rd August 2025 - 11:06
Рейтинг@Mail.ru


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