Пн ноя 29, 2021 01:15:30
Пн ноя 29, 2021 07:35:18
Пн ноя 29, 2021 07:48:21
Пн ноя 29, 2021 08:20:53
поставленная задача имеет логику, так как какой-то уровень будет на пине, либо высокий либо низкий, одновременно два уровня не придут.1en2 писал(а):поставленная задача не имеет логики, поэтому процессору это не объяснить......настроить заранее на высокий уровень, а первым придёт низкий и пропустишь....
Пн ноя 29, 2021 09:47:11
Пн ноя 29, 2021 10:12:46
Пн ноя 29, 2021 11:12:30
Пн ноя 29, 2021 11:19:15
Пн ноя 29, 2021 12:32:49
Пн ноя 29, 2021 13:38:31
void int_ini(void)
{
//включим прерывания INT0 по нисходящему фронту
EICRA |= (1 << ISC00);
//разрешим внешнее прерывание INT0
EIMSK |= (1 << INT0);
}
//----------
ISR(INT0_vect)
{
if (digitalRead(2)==1)
{
//передний фронт
}
else
{
//задний фронт
}
}
Пн ноя 29, 2021 15:51:48
Пн ноя 29, 2021 19:03:37
Пн ноя 29, 2021 19:22:23
Пн ноя 29, 2021 19:28:15
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Any change
EICRA=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (1<<ISC00);
EIMSK=(0<<INT1) | (1<<INT0);
EIFR=(0<<INTF1) | (1<<INTF0);
PCICR=(0<<PCIE2) | (0<<PCIE1) | (0<<PCIE0);
sei();
// External Interrupt 0 service routine
ISR(INT0_vect)
{
// Place your code here
if((PIND & (1<<PIND2)) == 0)
{
// низкий уровень
}
else
{
// высокий уровень
}
}
if((PIND & (1<<PIND2)) == 0)
{ // низкий уровень
EICRA=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (1<<ISC00);
}
else
{ // высокий уровень
EICRA=(0<<ISC11) | (0<<ISC10) | (1<<ISC01) | (0<<ISC00);
}
EIMSK=(0<<INT1) | (1<<INT0);
EIFR=(0<<INTF1) | (1<<INTF0);
PCICR=(0<<PCIE2) | (0<<PCIE1) | (0<<PCIE0);
sei();
// External Interrupt 0 service routine
ISR(INT0_vect)
{
if ((EICRA & (1<<ISC00)) == 0)
{
EICRA |= (1 << ISC00);
}
else
{
EICRA &= ~(1 << ISC00);
}
}
// External Interrupt(s) initialization
// Interrupt on any change on pins PCINT16-23: On INT18
EICRA=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
EIMSK=(0<<INT1) | (0<<INT0);
PCICR=(1<<PCIE2) | (0<<PCIE1) | (0<<PCIE0);
PCMSK2=(0<<PCINT23) | (0<<PCINT22) | (0<<PCINT21) | (0<<PCINT20) | (0<<PCINT19) | (1<<PCINT18) | (0<<PCINT17) | (0<<PCINT16);
PCIFR=(1<<PCIF2) | (0<<PCIF1) | (0<<PCIF0);
sei();
// Pin change 16-23 interrupt service routine
ISR(PCINT2_vect)
{
if((PIND & (1<<PIND2)) == 0)
{
// низкий уровень
}
else
{
// высокий уровень
}
}
Пн ноя 29, 2021 20:42:19