|
Новый вопрос возник., Опять новичек, опять простейшее (имхо). |
|
|
|
Mar 18 2006, 02:21
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Написал программу для Avr MEGA 8, которая занимается тем, что следит за состоянием кнопки на ножке PORTC.0 (ножка - кнопка - Vcc) и если кнопка нажата, то загорается диод, подключенный к ножке PORTB.0. Вся проблема в том, что ISIS напрочь отказывается выполнять программу, т.е. вне зависимости от того, нажата кнопка, или нет, светодиод либо горит либо нет (в зависимости от начальных условий). Бъюсь уже ап стену, но не помогает, может вы поможете? Вот исходник: /***************************************************** This program was produced by the CodeWizardAVR V1.24.5 Standard Automatic Program Generator © Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com e-mail:office@hpinfotech.com
Project : Version : Date : 18.03.2005 Author : ps1x Company : ccc Comments:
Chip type : ATmega8 Program type : Application Clock frequency : 4,000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *****************************************************/
#include <mega8.h>
// Declare your global variables here
void main(void) { // Declare your local variables here
// Input/Output Ports initialization // 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 C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00; DDRC=0x00;
// Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00;
// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00;
// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;
// Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00;
// External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;
// Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00;
for (;;)
{ while (PORTC.0 & 0); { PORTB.0=0; while (PORTC.0 & 1); { PORTB.0 = 1; } } }
|
|
|
|
|
Mar 18 2006, 03:07
|
Местный
  
Группа: Свой
Сообщений: 300
Регистрация: 15-03-06
Из: Москва
Пользователь №: 15 284

|
Приложил рисунок для ясности дела. Еще, может быть дело в симуляторе? или в CVAVR? Рисунок в момент работы симулятора, второй вариант тоже пробовал, однако не помогло... Еще настораживает момент, что (см рисунок) ярлычки рядом с кнопкой и на МК красные (на них Vcc???), хотя прошивка залита с 0 на всех разьемах порта C...
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 18 2006, 07:51
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 7-12-05
Пользователь №: 11 912

|
не могу понять, что значит разнесены порты?... я тоже CVavr пользуюсь...
|
|
|
|
|
Mar 18 2006, 08:17
|
Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491

|
Цитата(MakFatum @ Mar 18 2006, 10:51)  не могу понять, что значит разнесены порты?... я тоже CVavr пользуюсь... Это значит, что чтобы вывести значение в порт надо написать PORTx, а чтобы считать значение - PINx.
|
|
|
|
|
Mar 18 2006, 12:48
|
Участник

Группа: Новичок
Сообщений: 54
Регистрация: 7-12-05
Пользователь №: 11 912

|
ага, понятно....просто термин "разнесены" сбил с толку... Вот вопрос по синтаксису...
for (;;)
вот это в скобках (;;) - что обозначает?... Попробую догадаться: Бесконечный цикл?
|
|
|
|
|
Mar 18 2006, 13:11
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Цитата Сам лично предпочитаю while(true), красивее смотрится... smile.gif Красиво конечно, но как правило не оптимально, будут лишние операторы. До jmp label компилируется именно for (;;)
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Mar 19 2006, 15:00
|

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

|
Цитата(Old1 @ Mar 19 2006, 16:50)  Цитата(defunct @ Mar 18 2006, 07:40)  Абаждите, а в CV часом порты не разнесены? регистр ввода - PINX регистр вывода - PORTX
Причем здесь CV или какой другой компилятор? Это в AVR порты разнесены, и какой компилятор не используй если нужно вывести данные через порт - пишем в PORTX, если нужно прочитать уровни на выводах порта - читаем PINX. Или нет? Да все так, позор мне, что сразу не заметил этой ошибки, да еще и ввел в заблуждение уважаемую публику. Конечно это в AVR порты физически разнесены. Только C настолько могучий язык, что можно всякого нагородить, как например реализованы свойства в классах (при записи можно обращаться к одному полю, а при чтении к совершенно другому).
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|