![]() |
Главная Микроконтроллеры [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] Копирование массива из внутренней во внешнюю память St45bt: Idi ZL,low(aPack) Idi ZH,high(aPack) Idi cnt,45 mSt45: rcall SetAddr rcall DataSt out SPL.tm Idi tm,high(RAMEND) out SPH.tm ; Загрузка во внутреннее ОЗУ микроконтроллера, ; начиная с ячейки с адресом аРаск ; 45-ги байтов массива: $20, $21, $22 Idi XL,low(aPack) Idi XH,hlgh(aPack) Idi tm,$20 Idi cnt,45 StRAM: St X+,tm inc tm dec cnt brne StRAM ; Перепишем этот массив во внешнюю память на страницу №2 ; (старшие биты адреса внешней памяти AR2 AR1 ARO = 101) in tm,PORTC andi tm,$ff-((1«AR2)+(1«AR1)+(1«AR0)) ; очистка битов AR2, AR1, ARO ; 1111 1000 = $ff-@KOD = ((1«AR2)+(1«AR1)+(1«AR0)) ori tm, (1«AR1) ; Установка бита АР1(адрес страницы 010 ; (страница 1*2)) out PORTC,tm ; Вывод в порт С содержимого tm clr tm ; Очистка содержимого tm (tm=0) sts RamH,tm ; Сохранение в ячейке RamH содержимого tm sts Rami,tm rcall St45bt ; Вызов подпрограммы St45bt ; Скопируем массив из внешней памяти на странице 1*2 ; (старшие биты адреса внешней памяти AR2 AR1 ARO = 101) ; во внутреннее ОЗУ микроконтроллера clr tm ; Очистка содержимого tm (tm=0) sts RamH,tm ; Сохранение в ячейке RamH содержимого tm sts Rami,tm rcall DOutPrp cycle:rjmp cycle Подпрограммы: dec cnt brne mSt45 ret Подпрограмма копирования 45 байтов из внешней памяти во внутреннее ОЗУ DOutPrp: Idi ZL.low(aADC) Idi ZH,hign(aADC) Idi cnt,45 DOutI: rcall SetAddr rcall DataLd dec cnt brne DOutI ret PORTD,Bufi PORTD,Bufi ; Сбросить бит Bufi порта D ; Подпрограмма установки SetAddr: Ids XL,Rami ; Ids XH.RamH out PORTB,XL nop ; nop ; sbi nop nop cbi nop nop out nop nop sbi nop nop cbi PORTD,Buf2 adiw XL,1 sts RamH.XH sts RamL,XL ret PORTB,XH адреса Скопировать содержимое ячейки RamL в XL Вывести в порт В содержимое XL Задержка 156 не Задержка 156 не Установить бит Bufi порта D Вывести в порт В содержимое ХН PORTD,Buf2 ; Установить бит Buf2 порта D Сбросить бит Buf2 порта D Увеличить содержимое пары XH:XL на 1 Сохранить содержимое ХН в ячейке RamH Возврат из подпрограммы Подпрограмма копирования байта из внутреннего ОЗУ во внешнюю память DataSt: Id tm,Z+ out PORTB,tm
Отладка программы После ассемблирования (клавиша F7) при отсутствии ошибок приступим к отладке (клавиша F11), в появившемся окне Simulator options I Device выберем микроконтроллер AT90S8535. Рассмотрим определение констант в программе. Ячейки внутренней памяти микроконтроллера с адресами RamH и RamL хранят старший и младший байты адреса внешней памяти. То есть, в этих ячейках будет отражаться информация об адресе внешней памяти, которая выводится в буферы адреса (регистры DD3 и DD4 по схеме электрической). Константа ARO равна константе РСО; РСО в свою очередь определена в файле, вставляемом в программу директивой .include. Остальные константы, не определенные в тексте программы, также определяются в файле 8535def.inc. Нажмем F11. Выполним View New Ю view, в открывшемся окне выполним PortB I +, здесь же выполним PortC + и PortD + для контроля информации, выводимой на контакты портов В, С и D, а следовательно и на шину данных нашей схемы (порт В), и на линии управления внешней памятью (соответствующие контакты портов С и D). Замечание. Имена констант в программе соответствуют именам линий управления внешней памятью на электрической схеме. сЫ PORTC, Wr sbi PORTC, Wr ret Подпрограмма копирования байта из внешней памяти во внутреннее ОЗУ DataLt): [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.0014 |