Пт окт 31, 2014 17:04:04
вы, как и многие до вас, не учитываете правило неявного преобразования типов операндов в выражениях. а правило таково:yur4ik писал(а):Так вот с ее помощью задаю число, а потом пишу его в переменную key (unsigned int) . Переменная полностью совпадает с тем что ввел с клавы. Далее это число нужно умножить на регистр IRC1 и разделить на 100, по началу казалось фигней, но когда IRC1 умножаю на любое число походу происходит переполнение и в результате вижу совсем другой конечный результат. Переменная в которую пишу (f) имеет уже тип unsigned long int, но это так и не помогло
вот так вот делаю: f=(unsigned int)(ICR1*key/100);
Компилятор ругается мол переполнение: overflow is possible in 16 bit multiplication, casting to 'long' may be required
В чем я прокололся?
Пт окт 31, 2014 20:15:49
Пт окт 31, 2014 20:55:21
Помоему, если одно из значений long, то остальные автоматом подтягиваются под long... так что после 100 - L можно и не писать...ARV писал(а):итак, окончательное решение: f= (long)ICR1 * key / 100L;
Сб ноя 01, 2014 10:50:34
for(i=0;i<9;++i)
{}
for(i=0;i<9;i++)
{}
Сб ноя 01, 2014 14:01:42
int i=5;
int x,y;
x=i++;
y=++i;
//i=7; x=5; y=7;
for(i=0;i<9;i++){/*code*/}
i=0;
label_cycle:
if(i<9)goto label_ start; else goto label_end;
label_start:
/*code*/
i++;
goto lebel_cycle;
label_end:
Сб ноя 01, 2014 18:05:29
COKPOWEHEU писал(а):Потому что результат команды инкремента никуда не записывается, а сама она в обоих вариантах всего лишь увеличивает аргумент на 1.
#include <mega8.h>
#include <delay.h>
unsigned char data,i;
char array[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void main(void)
{
PORTD=0x00;
DDRD=0x07;
while(1)
{
data=0;
for(i=0;i<9;i++)
{
PORTD.1=array[data++]|0x00;
PORTD.0=1;
PORTD.0=0;
}
PORTD.2=1;
PORTD.2=0;
delay_ms(1000);
}
}
Пт дек 12, 2014 00:20:41
Пт дек 12, 2014 07:15:40
unsigned int i;
void main() {
PORTA=0;
DDRA=0xFF;
while(1)
{
PORTA=0xFF; //зажигаем светик
for(i=0;i<3*60;i++)//ждём 3 минуты
{
Delay_ms(1000); //задержка в секунду
}
PORTA=0; //гасим светик
for(i=0;i<3*60*60;i++)//ждём 3 часа
{ //3*60*60= 10800 укладываемся в int
Delay_ms(1000);
}
// и всё с начала
}
}
Пт дек 12, 2014 07:33:13
sirha писал(а):спс ,подскажите почему PORTD.1=1 за весь цикл,это ведь побитовое или ,а получается 1 за весь цикл что за бред?,или это ошибка в протеусе?
Пт дек 12, 2014 13:22:07
alex_ писал(а):
- Код:
unsigned int i;
void main() {
PORTA=0;
DDRA=0xFF;
while(1)
{
PORTA=0xFF; //зажигаем светик
for(i=0;i<3*60;i++)//ждём 3 минуты
{
Delay_ms(1000); //задержка в секунду
}
PORTA=0; //гасим светик
for(i=0;i<3*60*60;i++)//ждём 3 часа
{ //3*60*60= 10800 укладываемся в int
Delay_ms(1000);
}
// и всё с начала
}
}
Пт дек 12, 2014 13:52:17
Сб дек 13, 2014 00:13:51
Сб дек 13, 2014 08:34:52
Вс дек 14, 2014 21:31:46
Вт дек 16, 2014 07:25:48
Пн мар 02, 2015 18:58:12
Ср мар 04, 2015 12:05:45
Ср мар 04, 2015 12:14:51
Ср мар 04, 2015 12:20:35
Ср мар 04, 2015 12:24:36