Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

danilov_x51_p2

.pdf
Скачиваний:
11
Добавлен:
10.02.2015
Размер:
1.04 Mб
Скачать

11.Записать константу в ячейку памяти 251h внешнего ОЗУ. Используя инкремент указателя данных, записать другую константу в ячейку памяти 252h внешнего ОЗУ. Вычесть значение ячейки памяти 251h из значения ячейки 252h. Если результат получился положительный, то организовать следующий цикл записи в ячейки внешнего ОЗУ: в ячейку 205h значение ячейки 251h, в ячейку 206h значение ячейки 251h плюс 2, в ячейку 207h значение ячейки 251h плюс 4 и т.д. до ячейки 212h. Иначе сложить старшую тетраду значения ячейки 251h, сдвинутую вправо на 4 бита, с младшей тетрадой значения ячейки 252h, и записать ответ в ячейку памяти 3Ah страницы 1 внешнего ОЗУ, используя регистр EMI0CN. Проверить с различными константами.

12.Записать константу в ячейку памяти 60h внешнего ОЗУ. Используя инкремент указателя данных, записать другую константу в ячейку памяти 61h внешнего ОЗУ. Вычесть значение ячейки памяти 60h из значения ячейки 61h. Если результат получился нулевой, то организовать следующий цикл записи в ячейки внешнего ОЗУ: в ячейку 400h значение ячейки 61h, в ячейку 402h значение ячейки 61h плюс 1, в ячейку 404h значение ячейки 61h плюс 2 и т.д. до ячейки 412h. Иначе вычесть младшую тетраду значения ячейки 60h из старшей тетрады значения ячейки 61h, сдвинутой вправо на 4 бита и записать ответ в ячейку памяти 56h страницы 2 внешнего ОЗУ, используя регистр EMI0CN. Проверить с различными константами.

13.Записать 16-иразрядную константу в ячейки памяти внешнего ОЗУ, начинающиеся с адреса 3Bh страницы 3, используя регистр EMI0CN. Записать константу в ячейку памяти ABh внешнего ОЗУ, разделить ее значение на 2, выделить 1,4,5 биты результата. В случае если все выделенные биты не равны 1, разделить 16-разрядную константу, содержащуюся в ячейках 3Bh-3Сh страницы 3 на 8 (с помощью операций сдвига), результат поместить в ячейки памяти внешнего ОЗУ, начинающиеся с адреса 1AAh. Если нет, сложить содержимое ячеек 3Bh, 3Ch страницы 3 и ABh. Результат поместить в R3 банка регистров №4. Проверить с различными константами.

14.Записать 24-хразрядную константу в ячейки памяти внешнего ОЗУ, начинающиеся с адреса 1Bh страницы 2, используя регистр EMI0CN. Записать константу в ячейку памяти CAh внешнего ОЗУ, разделить ее значение на 4, выделить 0,1,2 биты результата. В случае если все выделенные биты не равны 0, умножить 24-хразрядную константу, содержащуюся в ячейках 1Bh-1Dh страницы 2 на 4 (с помощью операций сдвига), результат поместить в ячейки памяти внешнего ОЗУ, начинающиеся с адреса 123h. Если нет, сложить содержимое ячеек 1Bh, 1Ch страницы 2 и CAh. Результат поместить в R5 банка регистров №2. Проверить с различными константами.

15.Записать 24-хразрядную константу в ячейки памяти внешнего ОЗУ, начинающиеся с адреса 3Ah страницы 4, используя регистр EMI0CN.

21

Записать константу в ячейку памяти 19h внешнего ОЗУ, разделить ее значение на 2, выделить 1,3 биты результата. В случае если все выделенные биты не равны 1, разделить 24-хразрядную константу, содержащуюся в ячейках 3Ah-3Ch страницы 4 на 8 (с помощью операций сдвига), результат поместить в ячейки памяти внешнего ОЗУ, начинающиеся с адреса 135h. Если нет, сложить содержимое ячеек 1Bh, 1Ch страницы 2 и 19h. Результат оставить в А. Проверить с различными константами.

16.Записать 32-хразрядную константу в ячейки памяти внешнего ОЗУ, начинающиеся с адреса 4Bh страницы 1, используя регистр EMI0CN. Записать константу в ячейку памяти 2Eh внешнего ОЗУ, умножить ее значение на 3, выделить 2,4,6 биты результата. В случае если все выделенные биты равны 1, разделить 32-хразрядную константу, содержащуюся в ячейках 4Bh-4Eh страницы 1 на 16 (с помощью операций сдвига), результат поместить в ячейки памяти внешнего ОЗУ, начинающиеся с адреса 1AAh. Если нет, сложить содержимое ячеек 4Dh, 4Eh страницы 1 и 2Eh. Результат оставить в А. Проверить с различными константами.

4.2.Раздел 2

1.Записать константы в ячейки 6040h и 6041h Flash-памяти. Считать и сложить значения ячеек 6040h и 6041h. Если результат получился больше, чем 0xFF, то записать в 9 ячеек Flash-памяти, начинающихся с адреса 5020h числа с 3 по 11, организовав цикл. Иначе стереть блок, содержащий ячейки 6040h и 6041h Flash-памяти и сохранить значение суммы по адресу 6042h. Проверить с различными константами.

2.Записать константы в ячейки 6009h и 6010h Flash-памяти. Считать и вычесть значение ячейки 6009h из значения ячейки 6010h. Если результат получился меньше, чем 0x05, то записать в 10 ячеек Flash-памяти, начинающихся с адреса 4000h числа с 0 по 9, используя блочный режим записи. Иначе стереть блок, содержащий ячейки 6009h и 6010h Flashпамяти и сохранить значение разности по адресу 6001h. Проверить с различными константами.

3.Записать константы в ячейки 5009h и 6010h Flash-памяти. Считать и вычесть значение ячейки 5009h из значения ячейки 6010h. Если результат получился не нулевой, то записать в 12 ячеек Flash-памяти, начинающихся с адреса 4000h числа с 0 по 11, используя блочный режим записи. Иначе стереть блок, содержащий ячейку 6010h Flash-памяти и сохранить значение разности по адресу 6001h. Проверить с различными константами.

4.Записать константы в ячейки 5031h, 5032hи 5034h Flash-памяти. Считать и вычесть значение ячейки 5032h из значения ячейки 5034h. Если результат получился отрицательный, то записать в 7 ячеек Flash-памяти,

22

начинающихся с адреса 6000h числа, начинающиеся со значения ячейки 5031h до значения ячейки 5031h плюс 6, организовав цикл. Иначе стереть блок, содержащий ячейки 5031h, 5032h и 5034h Flash-памяти и сохранить значение разности по адресу 5032h. Проверить с различными константами.

5.Записать константы в ячейки 40A0h, 40A1h и 40A2h Flash-памяти. Считать и сложить значение ячеек 40A0h и 40A2h. Если произошло переполнение, то записать в ячейку Flash-памяти с адресом 5000h значение ячейки 40A1h, в ячейку Flash-памяти с адресом 5001h значение ячейки 40A1h плюс 2 и т.д. всего 8 ячеек, используя блочный режим записи. Иначе стереть блок, содержащий ячейки 40A0h, 40A1h и 40A2h Flash-памяти и сохранить значение суммы по адресу 40A3h. Проверить с различными константами.

6.Записать константы в ячейки 20A0h, 30A1h и 40A2h Flash-памяти. Считать и вычесть значение ячейки 20A0h из значения ячейки 40A2h. Если результат получился не нулевой, то записать в 9 ячеек Flash-памяти, начинающихся с адреса 3600h (предварительно стерев их) числа, начинающиеся со значения ячейки 30A1h до значения ячейки 30A1h плюс 9, организовав цикл. Иначе стереть блок, содержащий ячейку 30A1h Flash-памяти и сохранить значение суммы по адресу 30A3h. Проверить с различными константами.

7.Записать константы в ячейки 4063h, 4064h Flash-памяти. Считать и умножить значение ячейки 4063h на значение ячейки 4064h. Если результат получился меньше чем 0xFA, то записать в 6 ячеек Flashпамяти, начинающихся с адреса 5000h (предварительно стерев их) числа, начинающиеся со значения полученного произведения до значения полученного произведения плюс 6, организовав цикл. Иначе стереть блок, содержащий ячейки 4063h, 4064h Flash-памяти и сохранить значение произведения по адресам 4061h, 4062h. Проверить с различными константами.

8.Записать константы в ячейки 2063h, 40ABh Flash-памяти. Считать и умножить значение ячейки 2063h на значение ячейки 4064h. Если результат получился больше чем 0x0A, и не произошло переполнение, то записать в 8 ячеек Flash-памяти, начинающихся с адреса 3000h числа (предварительно стерев их), начинающиеся со значения полученного произведения до значения полученного произведения плюс 8, используя блочный режим записи. Иначе стереть блок, содержащий ячейку 2063h Flash-памяти. Проверить с различными константами.

9.Записать константы в ячейки 3003h, 3004h Flash-памяти. Считать и разделить значение ячейки 3003h на значение ячейки 3004h. Если результат получился меньше чем 0x07, то записать в 10 ячеек Flashпамяти, начинающихся с адреса 5000h (предварительно стерев их) числа, начинающиеся со значения полученного частного от деления до значения полученного частного от деления плюс 10, используя блочный режим

23

записи. Иначе стереть блок, содержащий ячейки 3003h, 3004h Flashпамяти и сохранить значение частного от деления по адресу 3013h. Проверить с различными константами.

10.Записать 32-хразрядную константу в ячейки Flash-памяти, начинающиеся

садреса 200Ah. Записать константу в ячейку 3004h Flash-памяти, считать и умножить ее значение на 2, выделить 1,4 биты результата. В случае если все выделенные биты не равны 1, разделить записанную 32хразрядную константу на 8 (с помощью операций сдвига), результат поместить в ячейки Flash-памяти, начинающиеся с адреса 4000h, предварительно стерев их. Если нет, то стереть блок, содержащий записанную 32-хразрядную константу. Проверить с различными константами.

11.Записать 24-хразрядную константу в ячейки Flash-памяти, начинающиеся

садреса 301Сh. Записать константу в ячейку 4051h Flash-памяти, считать и разделить ее значение на 4, выделить 0,2 биты результата. В случае если хотя бы один выделенный бит равен 1, умножить записанную 24хразрядную константу на 8 (с помощью операций сдвига), результат поместить в ячейки Flash-памяти, начинающиеся с адреса 3000h, предварительно стерев их. Если нет, то стереть блок, содержащий записанную 24-хразрядную константу, и заполнить первые 5 ячеек блока числом 0x11. Проверить с различными константами.

24

ПРИЛОЖЕНИЕ

Таблица 11. Описание команд доступа к внешнему ОЗУ и встроенной Flash-памяти микроконтроллера C8051F411.

 

 

 

 

 

 

Кол-

Кол-

Мнемоническое

Краткое описание

 

во

во

описание

 

байт

такт

 

 

 

 

 

 

 

 

 

 

 

ов

ов

 

 

Скопировать из памяти команд в А

 

 

1

MOVC A, @A+DPTR

косвенно адресуемый в DPTR байт, с

1

4 - 72

 

 

адресом DPTR+A

 

 

 

 

 

 

Скопировать из памяти команд в А

 

 

2

MOVC A, @A+PC

косвенно адресуемый в PC байт, с

1

4 - 72

 

 

адресом PC+A

 

 

 

 

 

 

 

Скопировать

из

внешней

памяти

 

 

3

MOVX A, @Ri

данных в А косвенно адресуемый в

1

3

 

 

регистре байт (8 битный адрес)

 

 

 

 

 

Скопировать из А в косвенно

 

 

4

MOVX @Ri, A

адресуемый в регистре байт внешней

1

3

 

 

памяти данных (8 битный адрес)

 

 

 

 

Скопировать

из

внешней

памяти

 

 

5

MOVX A, @DPTR

данных в А косвенно адресуемый в

1

3

 

 

DPTR байт (16 битный адрес)

 

 

 

 

 

Скопировать из А в косвенно

 

 

6

MOVX @DPTR, A

адресуемый в DPTR байт внешней

1

3

 

 

памяти данных (16 битный адрес)

 

 

25

ЛИТЕРАТУРА

1.Silicon Laboratories. C8051F410/1/2/3. 2.0 V, 32/16 kB Flash, smaRTClock, 12-bit ADC. Rev1.1, 2008. – 270 p.

2.Silicon Laboratories. C8051F411 EVALUATION KIT USER’S GUIDE. Rev. 0.1, 2006. – 12 p.

3.Silicon Laboratories. AN201. Rev. 0.4, 2006. – 168 p.

4.Keil Software. Macro Assembler and Utilities Macro Assembler, Linker/Locator, Library Manager, and Object-HEX Converter for 8051, Extended 8051, and 251 Microcontrollers, 2001. – 44 9 p.

5.Keil Software. Cx51 Compiler Optimizing C Compiler and Library Reference for Classic and Extended 8051 Microcontrollers User’s Guide, 2000. – 393 p.

6.Бельченко А. Keil C51: Спецификаторы типа памяти и указатели. URL: http://onembedding.bialix.com/tools/keil/articles/memory-n-pointers/(дата обращения: 10.12.2011).

7.Латыпов Р.Р. Методическое пособие «Микроконтроллеры х51 архитектуры. Начальное освоение». Казань, 2012. – 34 с.

8.Николайчук О. х51-совместимые микроконтроллеры фирмы Cygnal. – М.:

ООО «ИД СКИМЕН», 2002. – 472 с.

9.Фрунзе А.В. Микроконтроллеры? Это же просто! Т.1. – М.: ООО «ИД СКИМЕН», 2002. – 336 с.

10.Каспер Э. Программирование на языке ассемблера для микроконтроллеров семейства i8051. – М.: Горячая линия-Телеком, 2004.

– 191 с.

11.Магда Ю. С. Микроконтроллеры серии 8051: практический подход. –

М.: ДМК Пресс, 2008. – 228 с.

12.Гладштейн М. А. Микроконтроллеры смешанного сигнала C8051Fxxx

фирмы Silicon Laboratories и их применение. – М.: Додэка XXI, 2008. – 336 с.

26

27

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]