Среда, 24.04.2024, 06:26
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Микроконтроллеры » Вопросы по МК » Помогите с микроконтроллером Mega128 (Не компилируется исходник)
Помогите с микроконтроллером Mega128
ArtosДата: Воскресенье, 13.02.2011, 18:00 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: Offline
Здравствуйте уважаемые.
Проблема такая:
При задействовании портов выше PORTF даного микроконтроллера компилятор начинает ругаться
и выдает ошибку...
Перед этим была проблема с Mega3290P тоже с портами....
Как их назначить чтоб компайлер не ругался?

Добавлено (13.02.2011, 17:56)
---------------------------------------------
[code]#include <mega128.h>
//#include <m8_128.h>
#include <mega128_bits.h>
//#include <STDIO.H>

// 1 Wire Bus functions
#asm
.equ __w1_port=0x1B ;PORTA
.equ __w1_bit=0
#endasm
#include <1wire.h>

// DS1820 Temperature Sensor functions
#include <ds18b20.h>

// maximum number of DS1820 devices
// connected to the 1 Wire bus
#define MAX_DS1820 8
// number of DS1820 devices
// connected to the 1 Wire bus
unsigned char ds1820_devices;
// DS1820 devices ROM code storage area,
// 9 bytes are used for each device
// (see the w1_search function description in the help)
unsigned char ds1820_rom_codes[MAX_DS1820][9];

//*****************************************

#include "delay.h"

#define EPP_SING 0x5a
#define LED_DIG_COUNT 6
#define LED_DOT_MASK 0x7f
#define BTN_PLUS PINB.0
#define BTN_MENU PINB.1
#define BTN_MINUS PINB.2
#define BTN_MUTE PINB.3

#define BTN_ERROR1 PINA.1
#define BTN_ERROR2 PINA.2
#define BTN_ERROR3 PINA.3
#define BTN_ERROR4 PINA.4
#define BTN_ERROR5 PINA.5

typedef unsigned char byte;

//--------------- 0-9 10 ........... 18 символов
//Символы для LED (0-9, ,-,t,L,A,r,d,b,DP)
flash byte led_table[23]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0x87,0xC7,0x88,0xAF,0xA1,0x83,0x7F,0x8C,0xC6,0xC1,0x86};
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
// [] - t L A r d b Dp P C U E

byte menu=0; //Индек меню
byte menu_tmr=0;
byte menu_tmr2=0;
byte menu_tmr3=0; //Счетчик в меню
byte led_dig=0; //Отображаемый разряд LED
byte led_buff[LED_DIG_COUNT]; //Буфер дял LED

byte temp1; //обьявление переменных
byte temp2;
byte temp3;

eeprom byte epp_sing=EPP_SING; //Сигнатура корректности еепром
eeprom byte epp_temp1=1;//Загрузка значения в Еепром
eeprom byte epp_temp2=1;
eeprom byte epp_temp3=1;

void epp_load() { //Загрузка данных с еепром
if (epp_sing==EPP_SING) { //Если сигнатура прявельнаяб читаем данные с еепром
temp1=epp_temp1; // загрузка из еепром при выходе из меню
temp2=epp_temp2;
temp3=epp_temp3;
}else{
temp1=1; // если сигнатура битая
temp2=1; // грузим единици.
temp3=1;
}
}

void epp_save() { //Сохранение данных в еепром
epp_temp1=temp1; // Запись данных темп в Еепром
epp_temp2=temp2;
epp_temp3=temp3;
epp_sing=EPP_SING;// сигнатура соответствия Еепром
}

void clear_leds() { //функция очистки лед.
byte i; // переменная
for (i=0;i<LED_DIG_COUNT;i++) led_buff[i]=led_table[10]; //прибавляем единицу гоняем пустой знак по дисплею
}
//-----------------ERROR CHANEL---------------------
// отображение активных ошибок
// и блокировка работы реле
void error_5 () {
if (BTN_ERROR1==0){
led_buff[0]=led_table[22]; //Заполняем буфер разрядов
led_buff[1]=led_table[15]; // индикация Error ток выхода
led_buff[2]=led_table[15];
led_buff[3]=led_table[20];
led_buff[4]=led_table[11];
led_buff[5]=led_table[0];
PORTF.1=0;
PORTF.2=0;
menu=5;
}
if (PINA.6==0){ // сброс защиты
menu=0;
while (PINA.6==0) ;
}

}

void error_6 () {
if (BTN_ERROR2==0){
led_buff[0]=led_table[22]; //Заполняем буфер разрядов
led_buff[1]=led_table[15]; // индикация ошибки Error напряжение входа
led_buff[2]=led_table[15];
led_buff[3]=led_table[21];
led_buff[4]=led_table[11];
led_buff[5]=led_table[1];
PORTF.1=0;
PORTF.2=0;
menu=5;
}
if (PINA.6==0){ // сброс защиты
menu=0;
while (PINA.6==0) ;
}

}

void error_7 () {
if (BTN_ERROR3==0){
led_buff[0]=led_table[22]; //Заполняем буфер разрядов
led_buff[1]=led_table[15]; // индикация ошибки Error напряжение выхода
led_buff[2]=led_table[15];
led_buff[3]=led_table[21];
led_buff[4]=led_table[11];
led_buff[5]=led_table[0];
PORTF.1=0;
PORTF.2=0;
menu=5;
}
if (PINA.6==0){ // сброс защиты
menu=0;
while (PINA.6==0) ;
}
}

void error_8 () {
if (BTN_ERROR4==0){
led_buff[0]=led_table[22]; //Заполняем буфер разрядов
led_buff[1]=led_table[15]; // индикация ошибки Error напряжение питания
led_buff[2]=led_table[15];
led_buff[3]=led_table[21];
led_buff[4]=led_table[11];
led_buff[5]=led_table[19];
PORTF.1=0;
PORTF.2=0;
menu=5;
}
if (PINA.6==0){ // сброс защиты
menu=0;
while (PINA.6==0) ;
}
}

void error_9 () {
if (BTN_ERROR5==0){
led_buff[0]=led_table[22]; //Заполняем буфер разрядов
led_buff[1]=led_table[15]; // индикация ошибки Error нагрузка выхода
led_buff[2]=led_table[15];
led_buff[3]=led_table[13];
led_buff[4]=led_table[11];
led_buff[5]=led_table[0];
PORTF.1=0;
PORTF.2=0;
menu=5;
}
if (PINA.6==0){ // сброс защиты
menu=0;
while (PINA.6==0) ;
}
}

// индикация ошибки

void led_error () {
if (menu_tmr3==4) {
PORTF.3 = 1;
}
if (menu_tmr3==5) {
PORTF.3 = 1;
}
if (menu_tmr3==6) {
PORTF.3 = 1;
}
if (menu_tmr3==7) {
PORTF.3 = 1;
}

else {
PORTF.3 = 0;
}
}

//---------------END ERROR-----------------------
//-----------------READY-------------------------
// мигалка - это индикация о нормальной работе микроконтроллера
void menu_shou_5 () {
if (menu_tmr3==5) {
PORTG.0 = 1;
}
if (menu_tmr3==6) {
PORTG.0 = 1;
}
if (menu_tmr3==7) {
PORTG.0 = 1;
}

else {
PORTG.0 = 0;
}
}

//---------------END READY-----------------------
//-----------------LOAD--------------------------
void menu_show_4 () {
// индикация загрузки и управление реле

if (menu_tmr2==3) { //если таймер достиг.... вывести на индикатор следующее...
led_buff[0]=led_table[10]; //Заполняем буфер разрядов
led_buff[1]=led_table[10]; // индикация пустого меню
led_buff[2]=led_table[10];
led_buff[3]=led_table[10];
led_buff[4]=led_table[10];
led_buff[5]=led_table[10];
PORTF.0=1;
}
if (menu_tmr2==4) { //если таймер достиг.... вывести на индикатор следующее...
led_buff[0]=led_table[10]; //Заполняем буфер разрядов
led_buff[1]=led_table[10]; //индикация пустого меню
led_buff[2]=led_table[10];
led_buff[3]=led_table[10];
led_buff[4]=led_table[10];
led_buff[5]=led_table[10];
PORTF.1=1;
}
if (menu_tmr2==5) { //если таймер достиг.... вывести на индикатор следующее...
led_buff[0]=led_table[10]; //Заполняем буфер разрядов
led_buff[1]=led_table[10]; //индикация пустого меню
led_buff[2]=led_table[10];
led_buff[3]=led_table[10];
led_buff[4]=led_table[10];
led_buff[5]=led_table[10];
PORTF.2=1;
}
else {
led_buff[0]=led_table[13]; //индикация LOAD
led_buff[1]=led_table[0];
led_buff[2]=led_table[14];
led_buff[3]=led_table[16];
led_buff[4]=led_table[10];
led_buff[5]=led_table[10];

} // таймер отсчитывает за секунду примерно 20 значений tmr2
}

// при достижении таймера заданого значения перейти в следующее (рабочее) меню
void menu_act_4 () {
if (menu_tmr2==7) {
menu=1;
}
}
//-----------------END---------------------------

//----------------- MENU 1 ----------------------
void menu_show_0 () {
{ // режим работа ЕРР
led_buff[0]=led_table[14];
led_buff[1]=led_table[19];
led_buff[2]=led_table[19];
led_buff[3]=led_table[10];
led_buff[4]=led_table[10];
led_buff[5]=led_table[10];
} // режим тишина индикация
if (PORTF.5==1) { //если на 4пине лог.1 вывести на индикатор следующее...
led_buff[0]=led_table[21]; //Заполняем буфер разрядов
led_buff[1]=led_table[12]; // отображение режима тишина
led_buff[2]=led_table[22];
led_buff[3]=led_table[14];
led_buff[4]=led_table[10];
led_buff[5]=led_table[10];
}
}

void menu_act_0() {
if (BTN_MENU==0) { //Если кнопка нажата
menu=2; //Переходим к меню 1
while (BTN_MENU==0); //Ждем пока отпустят кнопку
}
if (BTN_MUTE==0) { // режим тишина,
PORTF.5= ~PORTF.5;
while (BTN_MUTE==0);
if (BTN_ERROR0==0) {
menu=5;
}
if (BTN_ERROR1==0) {
menu=6;
}
if (BTN_ERROR2==0) {
menu=7;
}
if (BTN_ERROR3==0) {
menu=8;
}
if (BTN_ERROR4==0) {
menu=9;
}
}
}
//--------------- END MENU 1 --------------------

//----------------- MENU 2 ----------------------
void menu_show_1() {
led_buff[0]=led_table[20];
led_buff[1]=led_table[0];
led_buff[2]=led_table[21];
led_buff[3]=led_table[12];
led_buff[4]=led_table[11];
led_buff[5]=led_table[temp1];
}

void menu_act_1() {
if (BTN_MENU==0) {
menu=3;
while (BTN_MENU==0);
}
if (BTN_PLUS==0) {
if (temp1<3) temp1++; else temp1=1;
while (BTN_PLUS==0);
}
if (BTN_MINUS==0) {
if (temp1>1) temp1--; else temp1=3;
while (BTN_MINUS==0);
}

}
//--------------- END MENU 2 --------------------

//----------------- MENU 3 ----------------------
void menu_show_2() {
led_buff[0]=led_table[19];
led_buff[1]=led_table[15];
led_buff[2]=led_table[0];
led_buff[3]=led_table[12];
led_buff[4]=led_table[11];
led_buff[5]=led_table[temp2];
}

void menu_act_2() {
if (BTN_MENU==0) {
menu=4;
while (BTN_MENU==0);
}
if (BTN_PLUS==0) {
if (temp2<3) temp2++; else temp2=1;
while (BTN_PLUS==0);
}
if (BTN_MINUS==0) {
if (temp2>1) temp2--; else temp2=3;
while (BTN_MINUS==0);
}
}
//--------------- END MENU 3 --------------------

//----------------- MENU 4 ----------------------
void menu_show_3() {
led_buff[0]=led_table[12];
led_buff[1]=led_table[3];
led_buff[2]=led_table[10];
led_buff[3]=led_table[temp3];
led_buff[4]=led_table[10];
led_buff[5]=led_table[10];
}

void menu_act_3() {
if (BTN_MENU==0) {
menu=1;
epp_save(); //Сохраняем в еепром
while (BTN_MENU==0);
}
if (BTN_PLUS==0) {
if (temp3<4) temp3++; else temp3=1;
while (BTN_PLUS==0);
}
if (BTN_MINUS==0) {
if (temp3>1) temp3--; else temp3=4;
while (BTN_MINUS==0);
}
}
//--------------- END MENU --------------------

void menu_show() { //Список вывода на LED, в зависимости от меню
switch (menu) {
case 0:menu_show_4();break;
case 1:menu_show_0();break;
case 2:menu_show_1();break;
case 3:menu_show_2();break;
case 4:menu_show_3();break;
case 5:led_error();break;
}
}

void menu_act() { //Список обработки кнопок, в зависимости от меню
switch (menu) {
case 0:menu_act_4();break;
case 1:menu_act_0();break;
case 2:menu_act_1();break;
case 3:menu_act_2();break;
case 4:menu_act_3();break;

}
}

interrupt [TIM0_OVF] void timer0_ovf_isr() {

PORTC&=0xc0; //Отключаем все разряды LED
PORTD=led_buff[led_dig]; //Загружаем в порт данные текущего разряда
PORTC|=1<<led_dig; //Отображаем нужный разряд
led_dig++; //Счетчик разрядов
if (led_dig>(LED_DIG_COUNT-1)) led_dig=0;

}

//*****************************************
// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTA=0xFF;
DDRA=0x00;

// 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
// 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
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTD=0xFF;
DDRD=0xFF;

// Port E initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=P State6=P State5=P State4=P State3=P State2=P State1=P State0=P
PORTE=0xFF;
DDRE=0x00;

// Port F 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
PORTF=0x00;
DDRF=0xFF;

// Port G initialization
// Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State4=0 State3=0 State2=0 State1=0 State0=0
PORTG=0x00;
DDRG=0x1F;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0xFD;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: Timer 3 Stopped
// Mode: Normal top=FFFFh
// Noise Canceler: Off
// Input Capture on Falling Edge
// OC3A output: Discon.
// OC3B output: Discon.
// OC3C output: Discon.
// Timer 3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;
ETIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// SPI initialization
// SPI Type: Slave
// SPI Clock Rate: 2000,000 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0x40;
SPSR=0x00;

// Determine the number of DS1820 devices
// connected to the 1 Wire bus
ds1820_devices=w1_search(0xf0,ds1820_rom_codes);

epp_load(); //Загружаем данные с еепром
clear_leds();
#asm("sei") //Разрешаем все прерывания
TCCR0A=2; // вкл. таймер 0

while (1)
{
menu_act(); //Опрашиваем кнопки меню
menu_show(); //Отображаем меню
error_5 ();
error_6 ();
error_7 ();
error_8 ();
error_9 ();


delay_ms(50);
menu_shou_5 (); //Пауза для опроса кнопок и отображения меню, 20 раз в секунду
menu_tmr++; //Считает до 20 примерно за 1 секунду
if (menu_tmr>100) menu_tmr=0;
menu_tmr2++; // считает до 10
if (menu_tmr2>10) menu_tmr2=0;
menu_tmr3++;
if (menu_tmr3>10) menu_tmr3=0;

};
}

Добавлено (13.02.2011, 18:00)
---------------------------------------------
Здесь могут быть и другие косяки.. но для меня сейчас важна именно эта проблема...

 
Форум » Микроконтроллеры » Вопросы по МК » Помогите с микроконтроллером Mega128 (Не компилируется исходник)
  • Страница 1 из 1
  • 1
Поиск:

Хостинг от uCoz