Без описания |
Поиск в теме | Версия для печати |
zatmenie |
Отправлено: 17 Июня, 2011 - 23:47:50
|
Генерал
Сообщений всего: 97
Дата рег-ции: Май 2009
|
Всем привет. Давненько меня здесь не было! Вот тут написал программку которая работает не до конца! может кто скажет почему программа не изменяет значение регистра OCR0A? вот сама программа
CODE:#include <tiny2313.h>
void main(void)
{
PORTB=0x00;
DDRB=0xFF;
PORTD=0x7F;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz
// Mode: Ph. correct PWM top=OCR0A
// OC0A output: Non-Inverted PWM
// OC0B output: Disconnected
TCCR0A=0x81;
TCCR0B=0x0D;
TCNT0=0xFF;
OCR0A=0x00;
OCR0B=0x00;
ACSR=0x80;
while (1)
{
m1: if(PIND.6==0) //Если кнопка Быстро нажата
{
OCR0A=0xFF; //устанавливаем максивальное значение ШИМ
goto m4; //переходим к установки направления движения
}
else goto m2; //Если кнопка Быстро отпущена, переходим к проверки следующей кнопки выбора скорости
m2: if(PIND.5==0) //Если кнопка Средне нажата
{
OCR0A=0xC0; //устанавливаем значение ШИМ равное 75% от максимального
goto m4; //переходим к установки направления движения
}
else goto m3; //Если кнопка Средне отпущена, переходим к проверки следующей кнопки выбора скорости
m3: if((PIND.5==1)&&(PIND.6==1)) //Если кнопки Быстро и Средне отпущены
{
OCR0A=0x80; //Устанавливаем значение ШИМ равное 50% от максимального
goto m4; //переходим к установки направления движения
}
m4: if(PIND.3==0) //Если кнопка Вперед нажата
{
PORTB.7=1; //Мотор крутится вперед
}
else PORTB.7=0; //Если отпущена мотор остановлен
if(PIND.2==0) //Если кнопка Назад нажата
{
PORTB.6=1; //Мотор крутится назад
}
else PORTB.6=0; //Если отпущена мотор остановлен
if(PIND.1==0) //Если кнопка Лево нажата
{
PORTB.5=1; //Мотор крутится налево
}
else PORTB.5=0; //Если отпущена мотор остановлен
if(PIND.0==0) //Если кнопка Право нажата
{
PORTB.4=1; //Мотор крутится направо
}
else PORTB.4=0; //Если отпущена мотор остановлен
goto m1;
};
}
OCR0A ну ни в какую не хочет меняться
А например вот так меняется без проблем
CODE:m1:
while(1){
if (PIND.6==0)
{
OCR0A=0xFF;
}
else OCR0A=0x05;
goto m1;
} (Отредактировано автором: 17 Июня, 2011 - 23:49:54) |
|
|
zatmenie |
Отправлено: 24 Июня, 2011 - 19:25:40
|
Генерал
Сообщений всего: 97
Дата рег-ции: Май 2009
|
cjA пишет:Если не секрет- это вы для себя или по работе?
Это все для меня, ведь я пока не работаю
(Добавление)
Да вот еще проблема. Решил сделать электронные кубики. Написал программу но CVAVR не хочет её компилировать. В выделенной строке пишет что отсутствует символ } а куда его ставить не знаю
CODE:#include <tiny2313.h>
:)flash unsigned int tabkd[36] = {11, 12, 13, 1A, 1B, 1E,:)
21, 22, 23, 2A, 2B, 2E,
49, 32, 33, 3A, 3B, 3E,
A1, A2, A3, AA, AB, AE,
B1, B2, B3, BA, BB, BE,
E1, 62, 63, EA, EB, EE};
void main(void)
{
unsigned char i;
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;
// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTD=0x7F;
DDRD=0x00;
ACSR=0x80;
while(1)
{
for(i=0; i<37; i++)
{
if(PIND.6==0)
PORTB=0xtabkd[i];
}
}
} (Отредактировано автором: 24 Июня, 2011 - 19:31:28) |
|
|
mihail |
Отправлено: 24 Июня, 2011 - 19:44:26
|
Гуру
Сообщений всего: 1065
Дата рег-ции: Март 2010
|
Не издевайтесь над компилятором! Если я в своем ответе поставлю буквы так как мне захочется, а не так как требуют правила, поймете? Нет!!! Потому, что это будет бессмысленный набор букв.
flash unsigned int tabkd[36] = {11, 12, 13, 1A, 1B, 1E,
21, 22, 23, 2A, 2B, 2E,
49, 32, 33, 3A, 3B, 3E,
A1, A2, A3, AA, AB, AE,
B1, B2, B3, BA, BB, BE,
E1, 62, 63, EA, EB, EE};
Это не массив. Это бессмыслица.
0xtabkd[i];
Это тоже.
Соблюдайте правила того языка на котором пишите! |
|
|
|
Поиск в теме | Версия для печати |
Страниц (17): В начало « ... 9 10 11 12 13 14 15 [16] 17 » |
« Программирование микроконтроллеров » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|
|
|