Вс окт 19, 2014 14:48:01
Вс окт 19, 2014 16:12:06
Вс окт 19, 2014 20:40:34
Вс окт 19, 2014 22:31:52
COKPOWEHEU писал(а):Само по себе оно не имеет типа (в ассемблерном виде обрабатывается как блок if с присвоением 1 либо 0), но по логике языка тип тот же, что у аргументов, тем более что по факту операция сравнения - вычисление разности без записи результата.
Пт окт 24, 2014 09:39:48
void function1 (void)
{
if (...)
{..... return;
.....PORTA.1=1;
}
if (...)
{
}
void function2(void)
{}
}
Пт окт 24, 2014 10:00:06
Пт окт 24, 2014 10:11:13
ARV писал(а):после исполнения return никакие нижеидущие операторы в функции не выполняются
Пт окт 24, 2014 10:14:00
Пт окт 24, 2014 10:46:30
#include <mega8.h>
#define BTN_LOCK_TIME 30
#define BTN_LONG_TIME 1000
#define BTN_PORT PORTB
#define BTN_PIN PINB
#define BTN_LINE (1<<0)
#define BTN_SHRT (1<<0)
#define BTN_LONG (1<<4)
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
static unsigned char LockCoun;
static unsigned char LongCoun;
static unsigned char LastState;
static unsigned char BtnLockBit;
char mask = 0;
if (! (BTN_PIN & BTN_LINE)) mask = BTN_SHRT;
if (mask){
if (LockCoun < (BTN_LOCK_TIME/10)){
LockCoun++;
return;
}
LastState = mask;
BtnLockBit =1;
if (LongCoun >= (BTN_LONG_TIME/10))
return;
if (++LongCoun >= (BTN_LONG_TIME/10))
BtnFlags |= (LastState<<4);
}
else{
if ( LockCoun --;) {
return;
}
if (! BtnLockBit)
return;
if (LongCoun < (BTN_LONG_TIME/10))
BtnFlags |= LastState;
BtnLockBit =0;
LongCoun = 0;
}
}
void BtnInit (void)
{
BTN_PORT |= BTN_LINE;
}
unsigned char BtnGet (void)
{
char temp;
#asm("cli")
temp = BtnFlags;
BtnFlags = 0;
#asm("sei")
return temp;
}
void main(void)
{
ASSR=0x00;
TCCR2=0x0F;
TCNT2=0x00;
OCR2=0x4e;
TIMSK=0x80;
BtnInit ();
DDRB = 0x06;
#asm("sei")
while (1)
{
button = BtnGet ();
if (button == BTN_SHRT) PORTB ^= 0x02;
if (button == BTN_LONG) PORTB ^= 0x04;
}
}
#include <mega8.h>
#define BTN_LOCK_TIME 30
#define BTN_LONG_TIME 1000
#define BTN_PORT PORTB
#define BTN_PIN PINB
#define BTN_LINE (1<<0)
#define BTN_SHRT (1<<0)
#define BTN_LONG (1<<4)
Пт окт 24, 2014 10:52:26
правдо что именно включается еще я не знаю
Пт окт 24, 2014 10:56:18
Pink-Pank писал(а):понИл правильно.
Особенно в частиправдо что именно включается еще я не знаю
Пт окт 24, 2014 11:23:37
Пт окт 24, 2014 11:26:20
ARV писал(а):а если серьезно, ответьте на вопрос: вам кнопку обязательно через прерывния
Pink-Pank писал(а):понИл правильно.
Особенно в частиправдо что именно включается еще я не знаю
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{}
void main(void)
{TCCR2=0x0F;
OCR2=0x4e;
TIMSK=0x80;
BtnInit ();
DDRB = 0x06;
#asm("sei")
}
TCCR2=0x0F;
OCR2=0x4E;
BtnInit ();
DDRB = 0x06;
#asm("sei")
Пт окт 24, 2014 12:00:35
Пт окт 24, 2014 14:10:08
Pink-Pank писал(а):..ять!!!! (здесь должен быть трехэтажный мат)
Кто разрешать прерывания будет?
.?
static unsigned char LockCoun;
static unsigned char LongCoun;
static unsigned char LastState;
static unsigned char BtnLockBit;
if (mask){
if (LockCoun < (BTN_LOCK_TIME/10)){
LockCoun++;
return;
}
unsigned char LockCoun;
static unsigned char LockCoun;
Пт окт 24, 2014 15:59:55
Сб окт 25, 2014 11:49:34
static unsigned char
char mask = 0;
Сб окт 25, 2014 12:05:47
Сб окт 25, 2014 12:58:16
unsigned char BtnGet (void)
{
....
}
Пт окт 31, 2014 12:24:27