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

[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]

линии BUF2 для записи младшего байта адреса в регистр DD3. Затем на линии BUF2 устанавливается низкий уровень.

Далее на шину данных через порт В выводится старший байт адреса, запись которого в регистр DD4 происходит по установке микроконтроллером высокого уровня на линии BUF1. После записи на линии BUF1 устанавливается низкий уровень.

Теперь на линиях А0...А18, следовательно, и на контактах А0...А18 микросхемы памяти адрес ячейки памяти установлен, можно производить запись или считывание.

Некоторое смущение может вызвать то, что к контактам микросхемы памяти А0...А19 подсоединены линии адреса с другими именами (к контакту А17, например, линия А14). Это сделано для удобства трассировки печатной платы, на которой размещены детали схемы. Для микросхемы памяти безразлично, в какой последовательности выбираются ячейки, последовательность же выбора при записи и при считывании будет одинаковой.

Если вы занимаетесь трассировкой, то представляете, как были перепутаны дорожки до оптимизации соединений линий адреса с контактами адреса микросхемы памяти.

Запись в ячейку

После формирования адреса микроконтроллер выводит через порт В на шину данных В0...В7 байт информации. Затем микроконтроллер устанавливает низкий уровень на линии WR, что приводит к записи байта информации в ячейку памяти. После записи на линии WR устанавливается высокий уровень.

Считывание из ячейки

После формирования адреса микроконтрол1юр переводит порт В в режим ввода данных в микроконтроллер. Затем на линии RD микроконтроллер устанавливает низкий уровень, что приводит к выводу данных из адресуемой ячейки памяти на шину данных В0...В7. Микроконтроллер через порт В считывает байт данных, установленный на линиях В0...В7, после чего устанавливает высокий уровень на линии RD. Обратите внимание на резисторы R43 и R44.

При программировании линии портов микроконтроллера находятся в высокоим1юдансном состоянии, а поскольку входы WE и ОЕ



микросхемы памяти также имеют высокий импеданс, наводки на подключенных к ним линиях могут привести как к записи в произвольную ячейку памяти, так и к выводу данных из произвольной ячейки на линии В0...В7. Последняя ситуация опасна, так как запись программы в микроконтроллер производится с использованием линий В5...В7 (разъем для подключения программатора ХР1 изображен справа на схеме). Поэтому возможны сбои при программировании (наблюдались в отсутствие резистора R43), выход из строя программатора (маловероятно из-за достаточной стойкости используемой в нем микросхемы) или микросхемы памяти (вполне возможно).

Установка резистора R43, подключенного к источнику питания +5 В, создает в описанной ситуации на линии RD высокий уровень и переводит выходы IO0...IO7 микросхемы памяти в высокоимпеданс-ное состояние, исключая подобную ситуацию, резистор R44 устраняет возможность хаотичной записи при программировании. В обычном режиме работы эти резисторы не мешают микроконтроллеру управлять микросхемой памяти.

Программа записи данных в ОЗУ 512 Кбайт

В рабочей программе, взятой за основу для нашего примера, АЦП микроконтроллера производил группу преобразований, результаты которых записывались во внутреннюю оперативную память микроконтроллера. Результаты группы преобразований обрабатывались и также записывались во внутреннюю оперативную память в виде массива размером в 45 байтов, начиная с ячейки с адресом аРаск. Этот массив переносился во внешнюю память для хранения. АЦП выполнял новую группу преобразований, которые тем же способом обрабатывались, а очередной массив размером в 45 байтов добавлялся во внешнюю память. Процесс продолжался до заполнения страницы внешней памяти (64 Кбайт), после чего вся информация со страницы внешней памяти через микроконтроллер передавалась в компьютер.

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



include c:\atmel\8535def.inc

equ RamH =$16а ;Адрес ячейки внутренней SRAH, хранящей старший байт адреса страницы внешней памяти

equ Rami =$16b ;Адрес ячейки внутренней SRAM, хранящей младший байт адреса внешней памяти

Три старших бита адреса внешней памяти (номер страницы внешней памяти):

equ ArO =РСО

equ Arl =РС1

equ Аг2 =РС2

equ Wr =РС4 ;Управление записью во внешнюю память

equ Rd =РСЗ ;Управление считыванием из внешней памяти

.equ Bufi =PD3 ;Управление записью в буфер 1

.equ Buf2 =PD4 ;Управление записью в буфер 2

.equ aADC =$60 ; Адрес для переноса массива из внешней ; памяти во внутреннюю SRAM

.equ аРаск =$bO ; Адрес 45-байтового массива во , внутренней SRAM микроконтроллера

.def tm =r16

.def cnt =r19

RESET:

Idi tm, (1«Wr)+(1«Rd); Устанавливаем высокие уровни

PORTC,tm

; на линиях WR и RD

tm,$ff

; контакты порта С -

DDRC,tm

; в режиме выходов

; На линиях порта D низкие уровни

PORTD,tm

; (в том числе BUF1, BUF2=0)

tm,$ff

: контакты порта О -

DDRD,tm

; в режиме выходов

; Установка регистра tm (tm=$ff)

DDRB,tm

: вывод в порт DDRB содержимого tm

; контакты порта В - в режиме выходов

Idi tm,low(RAMEND) ;Стек - начиная с конца внутренней SRAM

Создадим новую директорию c:\Avr\Ram512, поместим в нее файл 8535def.inc, полученный при распаковке файла avrOOO.exe (ищите его там же, где распаковался файл 8515def.inc). В директории c:\Avr\Ram512 создадим проект Ram512 с новым файлом программы Ram512.asm, в который следует перенести следующую программу.

Подключение 03У512К к AT90S8535



[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.0012