Главная Микроконтроллеры [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); Устанавливаем высокие уровни
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.0021 |