Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб апр 06, 2013 23:29:24
Вы ошибаетесь уважаемый. У меня код другой. Попроще.unalex писал(а):проект взят отсюда
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
Вы ошибаетесь уважаемый. У меня код другой. Попроще.unalex писал(а):проект взят отсюда
а я разве об этом не писал?Aid1992 писал(а):sprintf(lcd_buffer,"t%u=%.2f\xdfC",++i,temp);
unalex писал(а):как все нормальные люди выводят
Код:
float temp;
printf ("temp= %4.2f", temp, " градусов\n");
Ну понимаете, я въехал не сразуunalex писал(а):а я разве об этом не писал?
Код: Выделить всё
//MCUCR&=0b11111100;
//MCUCR|=0b00000010;//прерывание INT0 по спадуКод: Выделить всё
// Place your code here
if (flag==front)//если прерывание по фроту
{
T=TCNT1-3;//считать значение периода обращения
if(uoz>T)
{TCNT1=0;//обнулить таймер
OCR1A=uoz-T;
OCR1B=OCR1A+n;
}
send=1;//флаг отправки периода
if(uoz<T)
{
TCCR1B=stop;//остаовить таймер
TCNT1=0;//обнулить таймер
spark=0;//сброс искры
}
flag=spad;
MCUCR=MCUCR-1;//этот код работает ниже которйы закомментирован нет
//MCUCR&=0b11111100;
//MCUCR|=0b00000010;//прерывание INT0 по спаду
red_led=0; //красный светодиод погасить индикация того что ВМТ
}
else //если прерывание по спаду
{
TCCR1B=start;//запустить таймер
flag=front;
MCUCR=MCUCR+1;//этот код работает ниже которйы закомментирован нет
//MCUCR&=0b11111100;
//MCUCR|=0b00000011;//прерывание INT0 по фронту
OCR1A=uoz;
OCR1B=uoz+n;
red_led=1; //красный светодиод зажечь индикация того что до ВМТ осталось 30 градусов
} Код: Выделить всё
#include <mega8.h>
#include <delay.h>
unsigned char ABC;
void main(void)
{
switch (ABC){
case 1:
PORTD = 0b10000000;
break;
case 2:
PORTD = 0b11000000;
break;
case 3:
PORTD = 0b11100000;
break;
case 4:
PORTD = 0b11110000;
break;
case 5:
PORTD = 0b11111000;
break;
case 6:
PORTD = 0b11111100;
break;
case 7:
PORTD = 0b11111110;
break;
case 8:
PORTD = 0b11111111;
break;
}
PORTD=0x00;
DDRD=0xFF;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
while (1)
{
for (ABC = 0; ABC < 8; ABC++){
delay_ms(1000);
};
};
}
если значения ABC идут подряд - проще использовать табличную выборкуСериг писал(а):работаю с оператором switch(решил попробовать,удобная штука)
Код: Выделить всё
flash char table[8]={0x80,0xC0....};
......
PORTD = table[ABC-1];
while, for, if-gotoкак организовать выполнение куска программы определенное кол-во раз?
нет таймер не останавливаю дело не в том в протеусе все работает нормальо это по таймеру а вот перенастройка прерывания не хочет выполятся так как хотелось бы я про*Trigger* писал(а):А Вы останавливаете таймер перед считыванием? Вообще-то, можно использовать для таких целей Input Capture.
Код: Выделить всё
MCUCR=MCUCR-1;//это работает
//MCUCR&=0b11111100;//это нет
//MCUCR|=0b00000010;//прерывание INT0 по спаду
Код: Выделить всё
MCUCR&=0b11111100;//устанавливает в ноль 0,1 разряды остальные не изменяются
MCUCR|=0b00000011;//устаавливает в 1 разряды 0,1 остальные не меняет
Код: Выделить всё
str1[0]='\0';верноdimka86 писал(а):устанавливает в ноль 0,1 разряды остальные не изменяются
верно, не ошибсяdimka86 писал(а):устаавливает в 1 разряды 0,1 остальные не меняет
подойдет.dimka86 писал(а):перемеая чтоб ее сделать пустой подойдет такой метод
Код: Выделить всё
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
// INT1: On
// INT1 Mode: Rising Edge
GICR|=0xC0;
MCUCR=0x0E;
GIFR=0xC0;
а так я меняю настройку
MCUCR&=0b11111110;//по спаду
а так
MCUCR|=0b00000001;//прерывание INT0 по фронту