Приветствую Вас, Гость! Регистрация RSS

Вторник, 22.08.2017
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Форум mega-avr.ucoz.ru » Вопросы начинающих » помогите разобратся с функциями (функция main)
помогите разобратся с функциями
viktorgullerДата: Вторник, 15.03.2011, 12:51 | Сообщение # 1
Заглянувший
Сообщений: 7
Репутация: 0
Город: Омск
Статус: Отсутствует
не знаю как распределить функции main у меня их две а как их разделить
помогите
Code

#include <mega8.h>
#include <lcd.h>
#include <delay.h>
#asm
.equ __lcd_port=0x12; PORTD /* ÆÊÈ äèñïëåé ïîäêëþ÷èëè ê ïîðòó I/O D */
#endasm
#define nop() {asm("nop");}
unsigned char j=0; /* îïðåäåëÿåì ïåðåìåííóþ äëÿ õðàíåíèÿ ïîëîæèòåëüíîãî ÷èñëà îò 0 äî 255 */
unsigned int s = 5000; //ïåðåìåííàÿ äëÿ çàäåðæêè
unsigned int i; //ïåðå÷èñëåíèå ïåðåìåííûõ
interrupt [EXT_INT0] void ext_int0_isr(void)
void main(void) /* Îñíîâíàÿ ôóíêöèÿ "main", ñ êîòîðîé íà÷èíàåòñÿ âûïîëíåíèå âñåé ïðîãðàììîé ïðîöåäóðû */
{
lcd_init(16);
lcd_clear();
lcd_gotoxy(1,0);
lcd_putsf("Initialization");
while(1) /* âûïîëíÿåì öèêë ïîêà îïåðàòîð iF íå âûïîëíèò óñëîâèå j==16 */
{
delay_ms(500);
j++;
lcd_gotoxy(j-1,1); /* çàïîëíÿåì ñèìâîëîì 2-óþ ñòðîêó îò 0 äî 15 */
lcd_putchar(0xff); /* Ñèìâîë çàïîëíåííîãî çíàêîìåñòà èç òàáëèöû êîäîâ ñèìâîëîâ */
if (j==16) {break;} /* åñëè óñëîâèå if âûïîëíèëîñü, òî ïðåðûâàåì âûïîëíåíèå öèêëà while */
}
while(1){ /* áåñêîíå÷íûé öèêë */};
}
{
if (s < 60000) s += 5000;
}
interrupt [EXT_INT1] void ext_int1_isr(void)
{
if(s > 5000) s -= 5000;
}
void delay(unsigned int t)
{
while(t--) {#asm("nop")}
}
void main(void)
{
unsigned int tmp;
DDRB = 0xFF; // íà âûõîä
DDRC = 0xFF; // íà âûõîä
DDRD = 0x00; // Òèïà íà âõîä ïîðò
// ïðîâåðÿéòå ýòî è ñäåëàéòå â ñîîòâåòñòâèè ñî ñâîåé ñõåìîé
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Low level
// INT1: On
// INT1 Mode: Low level
GICR|=0xC0;
MCUCR=0x00;
GIFR=0xC0;
// Global enable interrupts
#asm("sei")
while(1)
{
for(i=0; i<8; i++)
{
PORTC = 0b00000001;
#asm("cli")
tmp = s;
#asm("sei")
delay(tmp);
PORTC = 0b00000000;
delay (200);
}
};
}
 
АвторДата: Вторник, 15.03.2011, 13:28 | Сообщение # 2
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Виктор, Функция main должна быть только одна: это точка входа. А остальные функции именуйте по своему, например:
Code
AdcRead
Writedata
ReadFlags
errorFlags



_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
viktorgullerДата: Вторник, 15.03.2011, 13:42 | Сообщение # 3
Заглянувший
Сообщений: 7
Репутация: 0
Город: Омск
Статус: Отсутствует
неполучается наверно надо сначала прописать ее потом вставлять
 
АвторДата: Вторник, 15.03.2011, 13:46 | Сообщение # 4
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Виталий, а что конкретно вы пытаетесь сделать?


_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
viktorgullerДата: Вторник, 15.03.2011, 13:49 | Сообщение # 5
Заглянувший
Сообщений: 7
Репутация: 0
Город: Омск
Статус: Отсутствует
пытаюсь вывести переменную задержки на дисплей
моя ICQ 468816064
 
АвторДата: Вторник, 15.03.2011, 13:56 | Сообщение # 6
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Т.е. чтобы на LCD крутилось число?


_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
viktorgullerДата: Вторник, 15.03.2011, 14:01 | Сообщение # 7
Заглянувший
Сообщений: 7
Репутация: 0
Город: Омск
Статус: Отсутствует
моргает светодиод а кнопками + - можно менять частоту включения а какие параметры регулировки я хотел вывести на дисплей
 
АвторДата: Вторник, 15.03.2011, 14:21 | Сообщение # 8
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
ДЛЯ СПРАВКИ
Code
   
//Структура программы
//
//подключение дополнительных файлов по include
//например:
#include <mega8535.h>
#include <delay.h>
#include <Global.c>
//Объявления глобальных переменных, указателей, массивов ( Publice )
//например:
unsigned char counter, AdcData, TxData;
char LcdBuf[16];
int scan;
//Объявление прототипов функций
//например:
unsigned AdcRead( unsigned char channel );
unsigned char ReadFlas();
void WriteData();

//Основная функция
void main()
{
   //Инициализация периферии( порты, АЦП, таймеры, USART и т.д. )
   DDRD=0xFF; PORTD=0x00;
    
   //Вызов Функций
   WriteData();
   AdcData=AdcRead( 5 );//5 канал АЦП
}
     
//Реализация остальных функций
unsigned AdcRead( unsigned char channel )
{
   //Не глобальная переменная ( Private )
   unsigned char Voltage;
     
   return Voltage;
}

unsigned char ReadFlas()
{
   unsigned char Status;
     
   return Status;
}

void WriteData()
{
   PORTD=0x2D;
}

//Здесь можно расположить векторы прерываний
//например:
interrupt [ADC_INT] void adc_isr(void)
{
   unsigned int adc_data;
   adc_data=ADCW;
}

interrupt [SPI_STC] void spi_isr(void)
{
   unsigned char data;
   data=SPDR;
}

interrupt [USART_RXC] void usart_rx_isr(void)
{
   char status,data;
   status=UCSRA;
   //Обработка принятого байта с линии RS232
   data=UDR;
}



_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
АвторДата: Вторник, 15.03.2011, 14:32 | Сообщение # 9
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Прежде чем писать программу, нужно сделать набросок Алгоритма ( блок-схемы ), т.к. будет проще ориентироваться и писать код. Определиться с именами переменных, функций ( если таковы необходимы ), какие операторы условий будут использоваться... Извините за эту демогогию....


_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
viktorgullerДата: Вторник, 15.03.2011, 14:48 | Сообщение # 10
Заглянувший
Сообщений: 7
Репутация: 0
Город: Омск
Статус: Отсутствует
я читал кучу книг просто много информации голова кругом идет а вот пока на примерах непотренируюсь
ненаучусь , примеров практически нет щас вот в инете ищу хоть чтонибудь куски кода
 
us4ilqДата: Вторник, 15.03.2011, 15:10 | Сообщение # 11
Опытный
Сообщений: 173
Репутация: 2
Город: Донецк
Статус: Отсутствует
Quote
примеров практически нет

А вот и неправда!
Примеров для Атмелов в инете немеряно!

Добавлено (15.03.2011, 15:08)
---------------------------------------------
Просто надо научиться использовать их в своих целях.

Добавлено (15.03.2011, 15:10)
---------------------------------------------
Правда, с этим и у меня часто проблемы возникают biggrin
Я ведь тоже "в самом начале пути"

Сообщение отредактировал us4ilq - Вторник, 15.03.2011, 15:11
 
viktorgullerДата: Вторник, 15.03.2011, 15:14 | Сообщение # 12
Заглянувший
Сообщений: 7
Репутация: 0
Город: Омск
Статус: Отсутствует
вот и я про тоже простые программы пишу с мелкими затруднениями но получается
а сейчас есть необходимость написать и вывести на дисплей переменную для задержки вот парюсь
 
АвторДата: Вторник, 15.03.2011, 15:23 | Сообщение # 13
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Виталий, а ты попытайся осмыслить суть работы С-программы, как использовать функции, переменные, как они взаимодействуют между собой, попридумывай какие-нибудь простые схемки с кнопками, светодиодами, ставь задачи!
На сайте Chipenable.ru очень грамотно написаны статьи, сам по ним учился.



_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
АвторДата: Вторник, 15.03.2011, 15:33 | Сообщение # 14
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Твой пример попробую разобрать, правда позже!


_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
viktorgullerДата: Вторник, 15.03.2011, 15:36 | Сообщение # 15
Заглянувший
Сообщений: 7
Репутация: 0
Город: Омск
Статус: Отсутствует
кстати с этого сайта первый файл cvavr я и взял и в него пытаюсь внести изменения

Добавлено (15.03.2011, 15:36)
---------------------------------------------
спасибо буду благодарен

 
Форум » Форум mega-avr.ucoz.ru » Вопросы начинающих » помогите разобратся с функциями (функция main)
Страница 1 из 11
Поиск: