[an error occurred while processing this directive]
Помогите плиз!!!
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено kent 18 июня 2006 г. 22:04

Добрый день начал изучать AVR по курсу на сайте avr123.nm.ru.Вроде думал что чего-то понял и решил написать програмку.Как Вы наверное поняли работать она отказалась Если не трудно ткните носом где ошибка.Программа в будующем будет намного сложнее пока решил ограничится самым простым что она должна делать, этим и вызван выбор 128меги.В этом варианте она должна зажигать светодиоды по алгоритму 2-3-2-3-2-3 вперёд или назад в зависимости от того какой логический уровень находится на ножке входа. Всего нужно 6 диодов в бинарном это так :000011 000111 000110 001110 001100 011100 011000 111000 110000 110001 100001 100011 . Ваял сие творение три вечера(до 3 ночи ) в CVAVR. Скомпилил и решил в VMLAB поэмулировать. Сразу загорелись два верхних диода(000011) а при нажатии на кнопку которая должна вызывать прерывание ничего не происходит-вернее происходит переход на СТРОКИ оператора множественного выбора (как и должно быть) по ним ползёт желтая полоска и на этом все- диоды не переключаются как горели первые два так и горят. Сейчас расскажу чего там понаписал(вернее это только я так думаю а VMLAB как оказалось совсем по другому). Подключил хидеры на мегу. Сделал порт А выходом и записал туда число 3(что и соответствует первому варианту включения диодов 000011). Сделал порт В входом с подтяжкой(хотя в будующем нужна будет всего одна ножка входа -сейчас решил не парится и сделал все) Дальше сотворил функцию initialization в которую воткнул(к стати надо ещё раз?) инициализацию портов,разрешил прерывания глобально и прерывание INT0 . Дальше сделал функцию rabota которая и должна переключать диоды с заданым алгоритмом с помощю оператора множественного выбора switch оператор if else по моему скромному разумению должен проверить состояние ножки входа PINB1 и в зависимости от результатов проверки подключить один из switch в котором я указал(повторюсь что это я так думаю) прочитать число в PINA, найти в своих вариантах такое-же число и присвоить порту А число в соответствии заданному алгоритму. Потом описал работу прерывания INT0- вызвать функцию работа. В главной функции происходит инициализация портов и все-сидим ждём прерывания.
Блин пока писал сей труд опять в мозгах ещё раз все прогнал- вроде все правильно?
Хотел послать архив с исходником но что-то хреново представляю как тут это можно сделать.Во сейчас посмотрел что тут длинну сообщения можно большую делать попробую воткнуть.
#include
#include
#define PA_OUT DDRA = 3;
#define PB_IN PORTB = 0xFF;
void initialization(void){
PA_OUT DDRA = 3;
PB_IN PORTB = 0xFF;
#asm("sei")
EICRA=0x00;
EICRB=0x00;
EIMSK=0x01;
EIFR=0x01; }
void rabota(void){
if(PINB1){
switch(PINA){
case 3:DDRA=7;
break ;
case 7:DDRA=6;
break ;
case 6:DDRA=14;
break ;
case 14:DDRA=12;
break ;
case 12:DDRA=28;
break ;
case 28:DDRA=24;
break ;
case 24:DDRA=56;
break ;
case 56:DDRA=48;
break ;
case 48:DDRA=49;
break ;
case 49:DDRA=33;
break;
case 33:DDRA=35;
break;
case 35:DDRA=3;
break; } }
else{
switch(PINA){
case 3:DDRA=35;
break;
case 35:DDRA=33;
break;
case 33:DDRA=49;
break;
case 49:DDRA=48;
break;
case 48:DDRA=56;
break;
case 56:DDRA=24;
break;
case 24:DDRA=28;
break;
case 28:DDRA=12;
break;
case 12:DDRA=14;
break;
case 14:DDRA=6;
break;
case 6:DDRA=7;
break;
case 7:DDRA=3;
break;} } }
interrupt [EXT_INT0] void ext_int0_isr(void) {
rabota () ; }
void main(void){
initialization() ; }

Влезла ура.Мне кажется что в этом творении много лишнего(а мож и не очень ) но я НЕ ПОНИМАЮ почему она работать не желает. ПОДСКАЖИТЕ ПЛИИИИИИИЗ!!!!!!!!
Это проект для VMLAB
.MICRO "ATmega128"
.TOOLCHAIN "GENERIC"
.TARGET "555.hex"
.COFF "555.cof"
.SOURCE "555__.c"

.POWER VDD=5 VSS=0

.CLOCK 5meg

D1 VDD D1_NODE
R1 D1_NODE PA0 560

D2 VDD D2_NODE
R2 D2_NODE PA1 560

D3 VDD D3_NODE
R3 D3_NODE PA2 560

D4 VDD D4_NODE
R4 D4_NODE PA3 560

D5 VDD D5_NODE
R5 D5_NODE PA4 560

D6 VDD D6_NODE
R6 D6_NODE PA5 560

D7 VDD D7_NODE
R7 D7_NODE PA6 560

D8 VDD D8_NODE
R8 D8_NODE PA7 560

K1 VSS PD0 LATCHED

.PLOT V(PA0) V(PA1) V(PA2) V(PA3) V(PA4) V(PA5) V(PA6) V(PA7)

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru