Главная  Микроконтроллеры 

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [ 82 ] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93]

В предыдущем примере рассматривалось подключение внещней памяти к AT90S8515. Из четырех портов микроконтроллера порты А и С, а также два контакта порта D заняты обслуживанием внещней памяти.

Как быть, если в дополнение к подключению внещней памяти необходимо организовать передачу полутора - друх десятков управляющих сигналов от микроконтроллера к внещним устройствам? Возможный вариант - использование необходимого количества 8-разрядных регистров (буферов) с обращением к ним, как к ячейкам памяти, расположенным в общем адресном пространстве внещней памяти. На рис. 6.26 - фрагмент схемы, реализующий такое подключение. Данный фрагмент и фрагмент, изображенный на рис. 6.20, являются частями одной схемы, а щина BUS1 является общей для обоих рисунков.

Три адресные линии А13...А15 остались свободными при подключении внещней памяти объемом 8Кх8, используем их для записи данных в три 8-разрядных регистра DD6...DD8.

Использование дополнительной микросхемы дешифратора адреса А13...А15 позволило бы подключить до восьми (23) регистров.

Входные контакты D0...D7 регистров DD6...DD8 подключены к порту А микроконтроллера (линии A/D0...A/D7). К выходным контактам О0...О7 регистров можно подключить до 24-х линий внешних устройств (линии В0...В23). Выходы регистров всегда активны и не переводятся в третье состояние, поэтому контакты ЕО регистров соединены с общим проводом.


КР1533ИРЗЗМ

A/DO 2

Q0 Q1 Q2

A/D1 3

A/D2 4

A/D3 5

АЮ4 6

D4 PS

A/D5 7

A/D6 8

D6 D7

Q6 Q7

A/D7 9

WB311

АЛЗО 2

DD7 КР1533ИРЗЗМ

A/D1 3

A/D2 4

A/D3 5

АЮ4 6

Ams 7

АЮ6 8

A/D7 9

WB211

19 В8 18 В9

17 BIO

16 В11

15В12

14В13

13В14

12В15

A/D2 4 A/D3 5

DD8 КР1533ИРЗЗМ АЛ30 2„„-, l„„119B16

A/D1 3

АЛ>4 6

A/D5 7

A/D6 8

A/D7 9

WB1 11

18В17

17 В18

18 В19

15 В20

14В21

13В22

12 В23



Запись данных в регистры происходит при появлении высокого уровня на их контактах С. Микроконтроллер же формирует низкий уровень записи во внешнюю память (сигнал WR). В схеме для формирования сигнала записи высокого уровня применены элементы ИЛИ-НЕ (микросхема DD4).

В этой схеме сигнал высокого уровня на линии WB3 для записи данных в регистр DD6 образуется при низких уровнях сигналов на линиях А15 и WR. То есть, чтобы запись произошла в один регистр DD6, необходимо, чтобы на линиях WR и А15 был низкий уровень, на линиях А13 и А14 - высокие уровни.

Одновременное присутствие низких уровней на всех четырех линиях (WR, А13...А15) вызовет параллельную запись данных в три регистра.

Приведенная схема подключения регистров требует тщательного подхода к выбору адресов при написании программы.

Запись в регистр DD6 должна происходить при А 15=0, А 14=1 и А 13=1, то есть, в двоичном коде адрес

регистра DD6: 011х хххх хххх хххх, регистра DD7: lOlx хххх хххх хххх, регистра DD8: 110х хххх хххх хххх.

Для того, чтобы данные не записывались в регистры, адрес должен иметь вид:

111х хххх хххх хххх, где X - состояние бита (О или 1) не имеет значения.

Хотя состояния битов X не имеют значения, они должны быть определены. Это значит, что при записи в какой-либо регистр на контактах А0...А12 микросхемы памяти (рисунок bvn Picl.gif) будет сформирован адрес, а в ячейку с этим адресом будет произведена запись того же значения, которое посылается в регистр. Надо позаботиться, чтобы ячейка с таким адресом не использовалась для хранения данных.

Удобно определить все биты х равными единице. Тогда адреса регистров примут вид:



адрес DD6: 1101 1111 1111 1111 или SDFFF,

а в ячейке памяти с адфесом xxxl 1111 1111 1111 нельзя хранить данные, линии адреса А13...А15, соответствующие битам ххх в этом адресе, к микросхеме памяти не подключены.

Поэтому, какими бы они ни были, запись производится в одну и ту же ячейку. Однако при записи в память ххх следует определить как 111 для того, чтобы не произошло параллельной записи в регистры. Значит, данные нельзя хранить в ячейке 1111 1111 1111 1111 или $FFFF.

Для хранения данных доступны ячейки памяти с адресами

1110 0000 0000 0000 ... 1111 1111 1111 1110 или $EOOO...$FFFE.

В разделе «Интерфейс микроконтроллера AT90S8515 для подключения внешней памяти» была обозначена нижняя граница доступной для безопасного хранения данных области памяти: адрес $0060.

С учетом этого ограничения для безопасного хранения данных доступны ячейки памяти с адресами $E060...$FFFE.

Есть более привлекательный вариант распределения памяти: при записи в регистр параллельно производить запись в соответствующую этому регистру ячейку памяти. При этом всегда можно проверить, что именно записывалось в регистр, считав данные из ячейки памяти.

Выберем для регистров следующие адреса:

адрес DD6: 0111 1111 1111 1101 или $7FFD, адрес DD7: 1011 1111 1111 1110 или $BFFE, адрес DD6: 1101 1111 1111 1111 или $DFFF.

Теперь для безопасного хранения данных доступны ячейки памяти с адресами $E060...$FFFC, а из ячеек с адресами $FFFD, $FFFE и $FFFF можно считать данные, которые были записаны в регистры DD8, DD7 и DD6 соответственно.

Считывая данные из ячеек, соответствующих регистрам, мы получаем информацию о том, что записывалось в эти регистры. Следовательно, считывание данных правомерно только после первой записи в регистры. Поэтому рекомендую в начале программы записать исходные данные в регистры.



[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [ 82 ] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93]

0.0009