реклама на сайте
подробности

 
 
> Вопросы новичка, Первая программа, первые вопросы
Anjey_N
сообщение Jan 21 2007, 21:43
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 12-01-07
Из: Энергодар Украина
Пользователь №: 24 374



Добрый вечер уважаемые знатоки! help.gif Написал первую программу в IAR 4.20/
У меня 2 вопроса:
1. Как разрешить глобальные прерывания?
2.Не работает команда PORTD=decode[Tens], хоть компилятор ошибок не выдаёт. Проверку производил в AVRStudio.
Программу прилагаю.

/*Программа выводит на индикатор числа с возрастанием
с 0 до 99 или с убыванием с 99 до 0 с частотой 1 сек
Если кнопка на выводе 0 порта С отжата - происходит счёт на увеличение,
если нажата - на уменьшение.
Среда IAR 4.20
Микроконтроллер AtMega 16
Кварц 16 МГц*/

#include <ioavr.h>

// Описание глобальных переменных
unsigned char n,c,flag,Ones,Tens;
char decode[10]={0xC0,0xFC,0xA4,0xB0,0x99,0x92,0x02,0xF8,0x80,0x90};
#define Bit(n) (1<<(n))

// Обработка прерываний по таймеру ТС0
#pragma vector=TIMER0_OVF_vect
__interrupt void FIRST (void)
{
PORTB=0x03; // выключаем индикатор
if (n){
PORTD=decode[Ones];
PORTB&=~Bit(0); // включаем 1 индикатор
}
else{
PORTD=decode[Tens];
PORTB&=~Bit(1); // включаем 2 индикатор
}
n=!n;
}

// Обработка прерываний по таймеру ТС1
#pragma vector=TIMER1_OVF_vect
__interrupt void SECOND (void)
{
TCNT1=0xC35A;
flag=1;
if ((PINC & Bit(0))!=0) c++; // увеличиваем, если кнопка отжата
else c--; // уменьшаем, если кнопка нажата
if (c==0x64) c=0x00;
if (c==0xFF) c=0x63;
}

// Преобразование 2-10 кода в 2-й
char CharToBCD(char c)
{
char high;
high=0;
while (c>=10){

high++;
c-=10;
}
return (high<<4)|c;
}

// Настройка регистров контроллера
void unit_avr (void)
{
//Порт А
PORTA=0x00;
DDRA=0xFF;
//Порт B
PORTB=0x03;
DDRB=0x03;
//Порт C
PORTC=0x01;
DDRC=0x00;
//Порт DD
PORTD=0xFF;
DDRD=0xFF;

// Настройка таймера ТС0
// Источник синхронизации: внутренний
// Частота на входе: 62,500 kHz
// Переполнение каждые 4 мс
TCCR0=0x03;
TCNT0=0x00;
OCR0=0x00;

// Настройка таймера ТС1
// Источник синхронизации: внутренний
// Частота на входе: 15,625 kHz
// Переполнение каждую секунду
TCCR1A=0x00;
TCCR1B=0x04;
TCNT1=0xC35A;
ICR1=0x00;
OCR1A=0x00;
OCR1B=0x00;

// Таймер 2 отключён
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// Внешние прерывания отключены
MCUCR=0x00;
MCUCSR=0x00;

// Разрешены прерывания по переполнению таймеров ТС0 и ТС1
TIMSK=0x05;

// Аналоговый компаратор отключён
ACSR=0x80;
SFIOR=0x00;
}

void main (void)
{
unit_avr();
// Разрешены глобальные прерывания
// __enable interrupt(); // здесь выдаёт ошибку
SREG|=Bit(7);

while (1){
while(flag){
// Place your code here
flag=0;
Tens=CharToBCD©;
PORTA=Tens;
Ones=Tens;
Ones=Ones&(0x0F);
Tens=Tens>>4;
}
}
}



Помогите разобраться!

Сообщение отредактировал Anjey_N - Jan 21 2007, 21:47
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Anjey_N   Вопросы новичка   Jan 21 2007, 21:43
- - prottoss   Цитата(Anjey_N @ Jan 22 2007, 01:43) Помо...   Jan 21 2007, 21:53
- - Anjey_N   Эта строчка "чтобы использовать __enable_inte...   Jan 21 2007, 22:07
|- - prottoss   Цитата(Anjey_N @ Jan 22 2007, 02:07) Эта ...   Jan 21 2007, 22:15
|- - junoSynthesizer   Цитата(Anjey_N @ Jan 21 2007, 21:07) А во...   Jan 22 2007, 00:47
- - SasaVitebsk   __enable_interrupt(); // Разрешить прерыва...   Jan 22 2007, 02:18
- - satellite-plus   Цитата(Anjey_N @ Jan 21 2007, 20:43) Помо...   Jan 22 2007, 10:45
- - Anjey_N   junoSynthesizer Дата Сегодня, 01:47 (Anjey_N @...   Jan 22 2007, 11:31
|- - prottoss   Цитата(Anjey_N @ Jan 22 2007, 15:31) ... ...   Jan 22 2007, 11:38
||- - Anjey_N   Цитата(prottoss @ Jan 22 2007, 12:38) Цит...   Jan 22 2007, 12:51
||- - aesok   Переменные 'flag', 'c' - должны бы...   Jan 22 2007, 13:13
||- - prottoss   Цитата(Anjey_N @ Jan 22 2007, 16:51) Цита...   Jan 22 2007, 13:26
|- - otrog   Цитата(Anjey_N @ Jan 22 2007, 11:31) #inc...   Jan 22 2007, 11:54
|- - satellite-plus   Посмотри как это делается.   Jan 22 2007, 12:11
- - GDI   Цитатаn=!n; здесь инверсию хотите сделать? Им...   Jan 22 2007, 12:13
|- - Сергей Борщ   Цитата(GDI @ Jan 22 2007, 11:13) Цитатаn=...   Jan 22 2007, 12:48
- - Anjey_N   Спасибо всем, кто мне помогал, особенно Сергею Бор...   Jan 22 2007, 22:32
|- - Сергей Борщ   Цитата(Anjey_N @ Jan 22 2007, 21:32) Он о...   Jan 23 2007, 10:04
- - Anjey_N   Согласен, правы были все и всем за это спасибо. О...   Jan 23 2007, 11:27
|- - IgorKossak   Цитата(Anjey_N @ Jan 23 2007, 10:27) Объя...   Jan 23 2007, 11:45
|- - satellite-plus   Цитата(Anjey_N @ Jan 23 2007, 10:27) Согл...   Jan 23 2007, 11:46
|- - Anjey_N   Цитата(satellite-plus @ Jan 23 2007, 12...   Jan 23 2007, 12:07
- - SpiritDance   Да.   Jan 23 2007, 12:30
- - GDI   Только лучше написать __flash const char decode[10...   Jan 23 2007, 12:38
|- - Сергей Борщ   Цитата(GDI @ Jan 23 2007, 11:38) Только л...   Jan 23 2007, 13:40
|- - SasaVitebsk   Цитата(Сергей Борщ @ Jan 23 2007, 14:40) ...   Jan 24 2007, 03:11
- - Anjey_N   Ура! Жизнь налаживается! Пора заводить с...   Jan 23 2007, 12:56
- - SpiritDance   эээ... long и float разный размер на разных платфо...   Jan 23 2007, 14:17
|- - Сергей Борщ   Цитата(SpiritDance @ Jan 23 2007, 13:17) ...   Jan 23 2007, 15:17
|- - SpiritDance   Да собственно и нужны то только целые, так как с п...   Jan 23 2007, 17:25
|- - Сергей Борщ   Цитата(SpiritDance @ Jan 23 2007, 16:25) ...   Jan 24 2007, 11:10
- - SpiritDance   Можно в этом файле для тех компиляторов в котрых е...   Jan 24 2007, 12:22
- - Сергей Борщ   Цитата(SpiritDance @ Jan 24 2007, 11:22) ...   Jan 24 2007, 13:46


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.01435 секунд с 7
ELECTRONIX ©2004-2016