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

[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



; Очистка tfii

DDRB,tm

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

PORTC, Rt)

; Сбросить бит Rt) порта С

tm,PINB

; Считать данные на контактах порта В в tm

PORTC, Rt)

; Установить бит Rt) порта С

Z+,tm

; Сохранить содержимое tm в ячейке ОЗУ

; Установить tm

DDRB,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.0019