Atmega8 Проблема с простейшим кодом

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Аватара пользователя
Сообщения: 14
Зарегистрирован: Пн апр 27, 2009 17:55:03

Сообщение Legolas »

Доброе время суток всем!
Почитал обучалку, начал писать..
У меня светодиод стоит на PB5 (SCK). Нужно его зажечь (Во время прошивки горит).
Порассуждав, написал:

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

.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m8def.inc"

.def     Temp=R16

.cseg
.org 0

ldi Temp, 0b11111111
out DDRB,Temp

ldi Temp,0b11111111
out PortB,Temp 
По идее, должно работать, или я не прав?
Попробовал написать на С:

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

#include <stdio>
#include <MEGA8>
int main (void)
{    
DDRB = 0xFF;

while(1)
{
PORTB = 0xFF;
}
}
Тоже ничего загораться не хочет :(
Что я тут перепутал?! Подскажите плиз!
Желательно, конечно, на Си..
Реклама
Родился
Сообщения: 1
Зарегистрирован: Вт сен 30, 2008 20:06:22

Сообщение Max_Electro »

Вот так, как то, если не ошибаюсь!
Написано в Avr Studio!
#include <avr>
#include <avr>

int main ()
{
DDRB = 0xFF; //Порт B - как выход;
PORTB = 0x00; //На всех ножках 0 В;

if (;;)
{
PORTB = 0xFF; -> PORTB |= 1<<x;
//где х - это номер ножки!
}
}
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18786
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Legolas, ваши программы не могут не работать! :) только вот вы не указали, как подключили светодиод: очень многие любят подключать их катодом на вывод МК и анодом на плюс питания. так вот, в этом случае для зажигания светодиода надо выводить НУЛИ в порт, а не единицы, как у вас. для вашей программы надо подключать светодиод анодом на вывод МК, катодом на общий провод.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 151
Зарегистрирован: Пн сен 01, 2008 14:49:03
Откуда: Казахстан

Сообщение YurkaM »

Legolas и ещё в варианте на АСМе надо бы зациклить программу, типа loop: rjmp loop
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк

Сообщение sachok »

Я не Сашок!!!
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Сообщения: 2108
Зарегистрирован: Пт авг 29, 2008 16:28:19
Откуда: Киев

Сообщение Foks »

В Си тоже не мешало-бы зациклить while(1);, а то начнет процедуру main() бесконечно повторять. Насчет светодиода, лучше сразу делать мигалку на таймере, тогда можно обыкновенным тестером на ножке МК увидеть, что же там происходит. Как реализовать таймер на Си я не знаю, умею только на асме.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк

Сообщение sachok »

Есть проблема когда вывожу показания на ЖКИ, вот таким методом:

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

 if (way>99999 && way<999999)
        {
        lcd_putsf("S=");
        lcd_putchar (way/100000+0x30);         
        lcd_putchar ((way/10000)%10+0x30);     
        lcd_putchar ((way/1000)%10+0x30);     
        lcd_putsf(".");
        lcd_putchar ((way/100)%10+0x30);     
        lcd_putchar ((way/10)%10+0x30);     
        lcd_putchar ((way/1)%10+0x30);     
        lcd_putsf("km");
        }
Proteus выдает ошибку:Изображение
Что делать?
Я не Сашок!!!
Контактная информация:
Родился
Аватара пользователя
Сообщения: 14
Зарегистрирован: Пн апр 27, 2009 17:55:03

Сообщение Legolas »

ОКе, всем спасибо!! Вроде разобрался как зажечь :)
А вот как на Си задержку сделать?!
Вот у меня кусок кода:

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

while (1)
      {
PORTB=0x00;
      }
при подаче 0x00 он загорается, мне нужно, чтобы мигал :(
Родился
Аватара пользователя
Сообщения: 14
Зарегистрирован: Пн апр 27, 2009 17:55:03

Сообщение Legolas »

сам разобрался :)
Нашел транзистор. Понюхал.
Сообщения: 185
Зарегистрирован: Чт сен 06, 2007 22:36:09
Откуда: Санкт-Петербург

Сообщение Skrrmrchoh »

sachok писал(а): Proteus выдает ошибку...
...Что делать?

А это значит, что получившееся 0хFFFFF8C1 не помещается в память программ, которая всего- то имеет размер 0х2000

Видимо, из-за этих сумасшедших делений. Потому и вотчдог ругается.

Кроме того, где у вас Эл-Си-Ди ГотоХУ?
Опытный кот
Аватара пользователя
Сообщения: 849
Зарегистрирован: Сб янв 05, 2008 11:05:15
Откуда: Україна м.Луцьк

Сообщение sachok »

Skrrmrchoh писал(а): Кроме того, где у вас Эл-Си-Ди ГотоХУ?
Эт у меня было перед этим всем. Возможно есть более гуманный способ считать такие цифры и выводить их на ЖКИ.
Я не Сашок!!!
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»