Составители:
229
// Далее записывается адрес перехода Vector
TmpVector = (unsigned char xdata *) (Address + 1);
*TmpVector = (unsigned char) ((unsigned short)Vector >> 8);
++TmpVector;
*TmpVector = (unsigned char) Vector;
// Таким образом, по адресу Address теперь
// располагается инструкция ljmp Vector
}
//////////////////////// Main ////////////////////////////////
// Главная функция
//////////////////////////////////////////////////////////////
void main( void )
{
TH0 = 0xFF; // Инициализация таймера 0
TL0 = 0xF0; //
TMOD = 0x01; //
TCON = 0x10; //
// Установка вектора в пользовательской таблице
SetVector( 0x200B, (void *)T0_ISR );
// Разрешение прерываний от таймера 0
ET0 = 1; EA = 1;
while( 1 );
}
В ходе выполнения лабораторной работы производится ознакомление с
организацией и принципом работы не только таймеров/счетчиков по
прерываниям, но и внешних прерываний INT0/INT1. Необходимо отметить, что
в случае последних возможны следующие настройки: по перепаду (фронт или
спад напряжения) или по уровню напряжения на внешнем входе. В контроллере
SDK-1.1 линии счетного входа таймера/
счетчика 0/1 (T0/1) и внешних
прерываний INT0/INT1 выведены на DIP-переключатели SW3-1 (см. рис. 129).
Рис. 129. Расположение линий T0/1 и INT0/1 МК ADuC812 (справа) и их вывод на DIP-переключатели
(слева) на принципиальной электрической схеме контроллера SDK-1.1
Необходимо настроить внешнее прерывание INT0/1 так, чтобы оно
работало по спаду, а не по уровню (регистр специального назначения TCON).
Для корректной работы внешнего прерывания INT0 5-й бит регистра
управления ENA (адрес 0x080004 ПЛИС) должен быть равен 1.
Страницы
- « первая
- ‹ предыдущая
- …
- 228
- 229
- 230
- 231
- 232
- …
- следующая ›
- последняя »
