Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MSP430_НВВ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.67 Mб
Скачать

3.6 Порты ввода/вывода

Модель MSP430F149 имеет 6 двунаправленных 8-ми битных порта ввода/вывода P1 – P6. Каждая линия порта может быть настроена для ввода или вывода цифровой информации или поддержки работы периферийных устройств. Кроме того, все линии портов P1 и P2 способны работать как выводы внешних прерываний. Следует заметить, однако, что прерывания от линий каждого порта сгруппированы в общий вектор прерывания: для порта P1 – вектор с адресом FFE8h, а для P2 – FFE2h. Поэтому в подпрограмме обработки прерывания необходимо анализировать флаги прерывания с целью определения его источника.

Работа всех портов регистров ввода/вывода определяется содержимым ряда регистров управления, при этом каждый бит в этих регистрах соответствует одноименной линии порта.

Имеются следующие регистры, управляющие всеми портами ввода/вывода (x – индекс порта):

    • PxSEL (Port Select) – выбирает функцию линии:

0 – линия предназначена для ввода/вывода;

1 – линия предназначена для периферийного устройства.

    • PxDIR (Port Direction) – направление передачи данных. Как правило, воздействует на линии порта только в том случае, если соответствующий бит в регистре PxSEL равен 0.

0 – линия настроена на ввод;

1 – линия настроена на вывод;

    • PxOUT – вывод. В том случае, если линия настроена вывод, содержимое битов этого регистра будет задавать логическое состояние внешнего вывода.

    • PxIN – ввод. Содержимое бит этого регистра отражает логическое состояние линий порта. Регистр доступен только для чтения.

Для обеспечения функционирования линий портов P1 и P2 в качестве источников прерывания имеются ряд дополнительных регистров:

    • PxIE (Interrupt Enable) – разрешение прерывания

0 – запрещает прерывание;

1 – разрешает прерывание.

    • PxIES (Interrupt Edge Select) – выбор активного фронта прерывания

0 – растущий активный фронт;

1 – падающий активный фронт.

    • PxIFG (Interrupt Flag) – флаг прерывания. Устанавливается в 1 аппаратно, если на линии порта зарегистрировано событие, определенное соответствующим битом регистра PxIES. Сбрасывается в 0 программно.

Полный перечень регистров портов ввода/вывода приведен в таблице 11.

Таблица 11

Регистр

Назначение

Адрес

P1IN

Состояние порта P1

20h

P1OUT

Установка порта P1

21h

P1DIR

Направление порта P1

22h

P1IFG

Флаги прерывания порта P1

23h

P1IES

Выбор фронта прерывания порта P1

24h

P1IE

Разрешение прерывания порта P1

25h

P1SEL

Выбор функции порта P1

26h

P2IN

Состояние порта P2

28h

P2OUT

Установка порта P2

29h

P2DIR

Направление порта P2

2Ah

P2IFG

Флаги прерывания порта P2

2Bh

P2IES

Выбор фронта прерывания порта P1

2Ch

P2IE

Разрешение прерывания порта P1

2Dh

P2SEL

Выбор функции порта P2

2Eh

P3IN

Состояние порта P3

18h

P3OUT

Установка порта P3

19h

P3DIR

Направление порта P3

1Ah

P3SEL

Выбор функции порта P3

1Bh

P4IN

Состояние порта P4

1Ch

P4OUT

Установка порта P4

1Dh

P4DIR

Направление порта P4

1Eh

P4SEL

Выбор функции порта P4

1Fh

P5IN

Состояние порта P5

30h

P5OUT

Установка порта P5

31h

P5DIR

Направление порта P5

32h

P5SEL

Выбор функции порта P5

33h

P6IN

Состояние порта P6

34h

P6OUT

Установка порта P6

35h

P6DIR

Направление порта P5

36h

P6SEL

Выбор функции порта P6

37h

ПРИМЕР.

Сконфигурировать порт P1:

линии 0 и 5 – поддержка периферии;

линии 7, 6,4 –вывод;

линии 3 – ввод;

линия 1 – растущий фронт прерывания;

линия 2 – падающий фронт прерывания;

на линиях 7, 6 – выставить 1, на линии 4 -0

Для удобства определения содержимого регистров представим таблицу

7

6

5

4

3

2

1

0

0

0

1

0

0

0

0

1

P1SEL

1

1

0

1

0

0

0

0

P1DIR

1

1

0

0

0

0

0

0

P1OUT

0

0

0

0

0

1

1

0

P1IE

0

0

0

0

0

1

0

0

P1IES

mov.b #0C0h, &P1OUT

mov.b #0D0h, &P1DIR

mov.b #21h, &P1SEL

mov.b #4, &P1IES

mov.b #6, &P1IE

ПРИМЕР

Ожидать растущий фронт на выводе P3.5, после чего инвертировать вывод P1.2

L1: bit.b #20h, &P3IN ; проверяем, P3.5=1 ?

jnz L1 ; если да, ждем

L2: bit.b #20h, &P3IN ; P3.5 = 0 ?

jz L2 ; если да, ждем

xor.b #4, &P1OUT ; инвертируем P1.2

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]