Страница 1 из 1

Не работает инкремент

Добавлено: Сб сен 25, 2010 11:37:37
Alexonus
Вот код:

Код: Выделить всё

/***************************************************** 
This program was produced by the
CodeWizardAVR V2.03.9 Evaluation
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
 
Project : 
Version : 
Date    : 31.08.2009
Author  : Freeware, for evaluation and non-commercial use only
Company : 
Comments: 
 
 
Chip type               : ATmega8
Program type            : Application
AVR Core Clock frequency: 8,000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/
 
#include <mega8.h> 
#include <delay.h> 
#define FIRST_ADC_INPUT 0 
#define LAST_ADC_INPUT 0 
#define SET_B(x) |= (1<<x) 
#define CLR_B(x) &=~(1<<x) 
unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1]; 
#define ADC_VREF_TYPE 0x20 
unsigned int count,count1,count2,m,i;
interrupt [ADC_INT] void adc_isr(void) //стандартное прерывание по ADC от CVAVR 

static unsigned char input_index=0; 
// Read the 8 most significant bits 
// of the AD conversion result 
adc_data[input_index]=ADCH; 
// Select next ADC input 
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) 
input_index=0; 
ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index; 
// Delay needed for the stabilization of the ADC input voltage 
delay_us(10); 
// Start the AD conversion 
ADCSRA|=0x40; 

void main(void) 

count=0;
count1=0;
count2=0;
m=0;
 
PORTB=0x00; 
DDRB=0xFF; 
 
PORTD=0x00;
DDRD=0xFC;
PORTB = 0b11111111;
 
ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff); 
ADCSRA=0xCC; 
#asm("sei") 
delay_ms(200);
while (1) 

 
if (PIND.0==0) {count2=count2+1;while(PIND.0==0){};}
if (count2==2) {
 
 
 
PORTD SET_B(7);
count=count+1;
delay_ms(50);
 
if (count==1) {while (PIND.1==1) {PORTB = 0b00000000;}} 
 
if (count==2) {while (PIND.1==1) {PORTB = 0b00000001;}}
 
if (count==3) {count=0;}
 
count1=count1+1;
 
count2=0;
PORTB = 0b11111111;
PORTD CLR_B(7);
};
 
 
}; 
}


Не включается условие count==2 Работает только при count==1

Тестил в (Шпроте) там все нормально

Может что то с Ватчдогом , надо юзать?

Пробывал reset (1)

АЦП может как то влиять ?

Re: Не работает инкремент

Добавлено: Сб сен 25, 2010 12:11:56
Murav
Alexonus писал(а):Может что то с Ватчдогом , надо юзать?

Он включен?

Re: Не работает инкремент

Добавлено: Сб сен 25, 2010 12:21:07
Alexonus
нет. А его нужно всегда включать?

Re: Не работает инкремент

Добавлено: Сб сен 25, 2010 16:11:57
Foks
Просто Вы невнимательны в написании программы. Включите подсветку парных операторных скобок "{" и "}" и проверьте свою программу. Оформите исходный код красиво, в соотв. с каким-нибудь стилем, и у Вас больше не будет таких проблем.

P.S. Вачдог не должен быть включен, если программа не написана с его использованием, т.е. у Вас он должен быть ВЫКЛЮЧЕН.

P.P.S. Указывать Вам на Вашу ошибку прямо не имеет смысла, т.к. через 10 минут после исправления этой, у Вас возникнет такая же, в другом месте.

Re: Не работает инкремент

Добавлено: Сб сен 25, 2010 18:04:00
Mamonth
Судя по коду вы пишите в CodevisionAVR - он не подсвечивает скобок... у Вас в них проблема. Воспользуйтесь Notepad++, CodeBlocks, Eclipse - и Ваша ошибка будет ясна.

Re: Не работает инкремент

Добавлено: Сб сен 25, 2010 23:05:34
maximkamiass
Mamonth писал(а):Судя по коду вы пишите в CodevisionAVR - он не подсвечивает скобок... у Вас в них проблема. Воспользуйтесь Notepad++, CodeBlocks, Eclipse - и Ваша ошибка будет ясна.

В новой версии коде вижн есть подсветка скобок.

Re: Не работает инкремент

Добавлено: Вс сен 26, 2010 15:42:38
Alexonus
Ну вот как может быть проблема в скобках если, в (Шпроте) все работает....

Re: Не работает инкремент

Добавлено: Вс сен 26, 2010 16:10:17
Аlex
Со скобками у Вас всё в порядке. К Вам один вопрос.
Не включается условие count==2
С чего Вы это взяли ? Не забывайте, протеус далеко не железо !