Добавлено: Ср ноя 04, 2009 14:54:13
не хочу перечитывать все 55 страниц, может уже где обсуждалось, но как сделать рэндомность?? чтоб случайным образом выбирало, какой цикл запустить!?
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/

Код: Выделить всё
MCUCR=0x03;
EIFR=0x40; Код: Выделить всё
MCUCR=1<<ISC00|1<<ISC01;
EIFR=1<<INTF0;Все очень просто - у Вас не определены константы - номера битов, поэтому и ошибка. Выход - либо найти заголовочный файл где номера битов определены, либо написать самому (первое проще и правильней).sheva_s писал(а):...
что не так делаю хотел научиться настраивать регистры вторым способом что бы было видно что настроено, а невыходит подскажите как правильно делать .
Код: Выделить всё
#include <mega16>
#include <delay>
#define PA_OUT DDRA = 0xFF
#define PB_IN DDRB = 0x00
#define PC_OUT DDRC = 0xFF
#define LED_ON PORTA.7=1
#define LED_OFF PORTA.7=0
#define SW_ON PINB.0==0
#define SW_OFF PINB.0==1
void initialization(void){
PA_OUT;
PB_IN;
PC_OUT;
}
void main(void){
unsigned char a;
initialization();
a=0;
while(SW_ON)
{
if (a<7)
{
a++;
LED_ON;
delay_ms(200);
LED_OFF;
delay_ms(800);
}
}
}
Код: Выделить всё
void lcd_putcharDS(unsigned char character)
{
int tablept;
unsigned char count, W;
//unsigned char tablept, count;
//123 символ означает что рисовать следующий символ будем инверсно
if(character==123)
InvPrint=!InvPrint;
else
{
lcd_gotoxy(LCD_x, LCD_y);
if ((character<0x20>150)) {return;}
tablept = ((6*character) - 192);
// первый проход по таблице
for (count=6;count>0;count--)
{
//char_column = table[tablept];
for(W=0;W<Width;W++)
{
writedata( 0b00000001&table[tablept] |
(0b00000001&table[tablept])<<1 |
(0b00000010&table[tablept])<<1 |
(0b00000010&table[tablept])<<2 |
(0b00000100&table[tablept])<<2 |
(0b00000100&table[tablept])<<3 |
(0b00001000&table[tablept])<<3 |
(0b00001000&table[tablept])<<4>0;count--)
{
//char_column = table[tablept];
for(W=0;W<Width>>4 |
(0b00010000&table[tablept])>>3 |
(0b00100000&table[tablept])>>3 |
(0b00100000&table[tablept])>>2 |
(0b01000000&table[tablept])>>2 |
(0b01000000&table[tablept])>>1 |
(0b10000000&table[tablept])>>1 |
(0b10000000&table[tablept]));
}
tablept++;
}
LCD_x+=5*(1+Width);
LCD_y-=1;
//writedata(0x00);
}
}
Мож чего я пропустил, но мне кажется если опишешь по подробней, что куда подключаешь, общий катод анод, и что хочешь сделать, а лучше файлик протеуса прикрепишь, то шансов получить ответ, будет больше.CyxoeBuHo писал(а):пытался написать код на мегу 16-ю...по коду 7-ми сигментник должен "бегать по кругу" 7 раз и потом высветить определеное число... но в протеусе проэкт не запескается.... подскажите, что не так здесь...
А можно подробнее как это сделать .smac писал(а): Все очень просто - у Вас не определены константы - номера битов, поэтому и ошибка. Выход - либо найти заголовочный файл .
Тут даже не в кодевижене дело. То, что сразу бросается в глаза. 1) в обработчиках прерываний надо сидеть как можно меньше. Не сдедует в них использовать задержки (функцию delay). Не надо там же заниматься выводом на LCD индикатор. Там надо только устанавливать флаги, а прочие дела делать в теле основной программы. 2) бесконечные циклы с использованием оператора for и выход из них с помощью goto это, конечно круто. Но лучше обойтись без них. Для проверки какого-то условия обычно используются операторы while или do 3) Часть кода, где выполняется ввод/вывод лучше оформить в виде функций, чтобы не загромождать основную программу.ssvd писал(а):...буду рад получить критику по алгоритму написания программы!...
А зачем это вообще делать через прерывание? Лучше в основной программе отмерять промежуток времени, и когда он закончится, выполнять нужные действияssvd писал(а):1. Как выставить, что бы таймер переполнялся каждую минуту и запускал прерывание...
Лучше написать отдельный кусок кода, который бы опрашивал кнопки и устранял дребезг. И оформить его в виде функции.ssvd писал(а):2. как лучше в этом тексте убрать дребезг...
У Вас какая версия CodeVisionAVR ? В старых версиях нет определения названий битов управляющих регистров. А в новых есть файлы что-то вроде xxxx-bit.h Где xxxx - название микроконтроллера. Вот такой файл и надо прицепить к своему проекту. Можно скачать свежую демо версию CodeVisionAVR и попробовать взять эти файлы оттуда.sheva_s писал(а):А можно подробнее как это сделать.
edds писал(а):Доброго времени суток!!!! Необходимы примеры кода (для CVAVR, рабочие) меню (выбор и установка режимов, значений), если будет с коментариями, тада ваще супер. Если есть у кого поделитесь ???
Код: Выделить всё
[color=red]Объёмные вещи оформляются в виде приложения. Сэр Мурр[/color]
Код: Выделить всё
char temp_str[33];
void main(void)
{
int temp;
w1_init();
lcd_init(16);
while (1)
{
temp=ds18b20_temperature(0);
if (temp>1000){
temp=65536-temp;
}
sprintf(temp_str,"t=%i.%u\xdfC",temp,temp%1);
lcd_clear();
lcd_puts(temp_str);
delay_ms(500);
};
}
а вот видео (~5M), как работает мой вариант "менюшки"clawham писал(а):Вот пожалуйста кусочек кода менюшки со вложенными подменюшками
под кнопкой WWW есть ссылка на новость про TUI - а там есть и ссылка на закачку исходников и прочего.Aiudara писал(а):Ссылочку на исходнички !Работает прикольно. И проект в PROTEUS хочется поиграться.
Ну так можно или нет? И если можно, то схемку включения быzatmenie писал(а):Всем привет. хотел спросить можно ли с помощью CVAVR зашить МК через COM-программатор?