Программирование микроконтроллера МКС-51

Автор работы: k********@yandex.ru, 27 Ноября 2011 в 16:37, курсовая работа

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

Таймер в режиме 5 может использоваться для формирования одиночных аппаратно формируемых стробов. Запуск счетчика производится положительным фронтом сигнала GATE. Загрузка счетчика новым значением числа N в процессе счета не влияет на длительность текущего цикла но следующий цикл счета будет соответствовать новому значению N.

Содержимое работы - 1 файл

Курсач.doc

— 598.50 Кб (Скачать файл)
 

3.1. Найти сумму двух шестибайтных слагаемых по правилам сложения шестнадцатеричных чисел 

          BE 12 B0 83 08 65

            BF 80 B2 E2 0F 64

         1 7D 93 63 65 17 C9 

3.2. Составить программу сложения двух шестибайтных чисел

Условие:

     Первое слагаемое располагается в РПД по адресам 2АН – 2FH, второе слагаемое в РПД по адресам 3AH – 3FH, сумма в РПД по адресам 40H – 4FH. Область РПД, где расположены слагаемые адресовать через R0 и R1 банка 0, а область РПД, где располагается сумма – через R1 банка 1. 

Реализация:

LST: 

                       1            $MOD845

----                   2            CSEG

0000                   3            ORG 0000H

                       4           

0000 782A              5            MOV R0, #2AH  ; первое число

0002 76D5              6            MOV @R0, #0BEH

0004 08                7            INC R0

0005 7673              8            MOV @R0, #12H

0007 08                9            INC R0

0008 76B3             10            MOV @R0, #0B0H

000A 08               11            INC R0

000B 76E0             12            MOV @R0, #083H

000D 08               13            INC R0

000E 7605             14            MOV @R0, #08H

0010 08               15            INC R0

0011 7662             16            MOV @R0, #65H

                      17           

0013 793A             18            MOV R1, #3AH  ; второе число

0015 77D8             19            MOV @R1, #0BFH

0017 09               20            INC R1

0018 7722             21            MOV @R1, #80H

001A 09               22            INC R1

001B 77C2             23            MOV @R1, #0B2H

001D 09               24            INC R1

001E 77F2             25            MOV @R1, #0E2H

0020 09               26            INC R1

0021 7706             27            MOV @R1, #0FH

0023 09               28            INC R1

0024 7763             29            MOV @R1, #64H

                      30           

0026 08               31            INC R0

0027 09               32            INC R1

                      33           

0028 D2D3             34            SETB 0D3H   ; переключаем банк с 0-ого

             на 1-ый

002A 794F             35            MOV R1, #4FH  ; задаём в R1 адрес

             младшего байта суммы

                      36   

002C C2D3             37    ITER:   CLR 0D3H   ; банк 0

002E 19               38            DEC R1   ; выбираем следующий байт

002F 18               39            DEC R0

0030 E6               40            MOV A, @R0   ; в ACC помещаем текущий

             байт 1-ого числа

0031 A205             41            MOV C, 00H   ; бит 00h в SFR используем

                      как переменную для хранения бита переноса с предыдущей итерации цикла суммирования

0033 37               42            ADDC A, @R1   ; складываем текущие байты

                      слагаемых с учётом переноса

0034 9205             43            MOV 00H, C   ; сохраняем перенос

0036 D2D3             44            SETB 0D3H   ; банк 1

0038 F7               45            MOV @R1, A   ; записываем в РПД текущий

                      байт  с результатом операции сложения

0039 19               46            DEC R1   ; выбор следующего байта

003A B940EF           47            CJNE R1, #40H, ITER ; пока не дойдём до

                      последнего  байта (40h) – складываем очередные 2 байта слагаемых

                      48   

                      49    END 

VERSION 1.2h ASSEMBLY COMPLETE, 0 ERRORS FOUND 

ITER . . . . . . . . . . . . . .  C ADDR  002CH   

HEX:

:10000000782A76BE0876120876B0087683087608D5

:10001000087665793A77BF0977800977B20977E280

:1000200009770F0977640809D2D3794FC2D3191819

:0D003000E6A200379200D2D3F719B940EFD5

:00000001FF 
 
 
 
 
 
 

Скриншоты 6 циклов:

1.

2.

 
3.

 
4.

5.

6.

 
 
 
 
 
 
 
7.

 
 

4. Программирование параллельного интерфейса КР580ВВ55 и таймера  КР580ВВ53 

4.1. Спроектировать логические  схемы ЛС55 и ЛС53

      адрес ВВ55:  88H  >   100010002

      адрес ВИ53:  8СH >   100011002

Число A7 A6 A5 A4 A3 A2 A1 A0
98h 1 0 0 0 1 0 0 0
9Ch 1 0 0 0 1 1 0 0
 
ЛС55: ЛС53:
 

4.2. Расшифровать управляющие  слова ППИ КР580ВВ55

      УС0: 22H = 001000102 

D7 D6 D5 D4 D3 D2 D1 D0
0 0 1 0 0 0 1 0
 

            D7 = 0: установка определённых разрядов порта PС;

            D6 = 0, D5 = 1, D4 = 0: не используется, т.к. D7 = 0;

            D3 = 0, D2 = 0, D1 = 1: итого 0012 = 110, т.е. выбираем PC1;

            D0 = 0: сброс бита, т.е. PC1 = 0. 

Фрагмент программы  настройки ППИ: 

MOV A, #22H   ; запись в аккумулятор УС0

MOV R0, #43H  ; запись в R0 адрес РУС ППИ

MOVX @R0, A   ; запись в РУС УС0 из аккумулятора 
 
 
 
 

                  УС1: 2DH = 001011012 

D7 D6 D5 D4 D3 D2 D1 D0
0 0 1 0 1 1 0 1
 

            D7 = 0: установка определённых разрядов порта PС;

            D6 = 0, D5 = 1, D4 = 0: не используется, т.к. D7 = 0;

            D3 = 1, D2 = 1, D1 = 0: итого 1102 = 610, т.е. выбираем PC6;

            D0 = 1: установка бита, т.е. PC6 = 1. 

Фрагмент программы  настройки ППИ: 

MOV A, #2DH   ; запись в аккумулятор УС0

MOV R0, #43H  ; запись в R0 адрес РУС ППИ

MOVX @R0, A   ; запись в РУС УС0 из аккумулятора 

                  УС2: A0H(A8H) = 101000002(101010002) 

Число D7 D6 D5 D4 D3 D2 D1 D0
A0 1 0 1 0 0 0 0 0
A8 1 0 1 0 1 0 0 0
 

A2H:  D7 = 1: задание режима работы каналов PA, PB, PC;

            D6 = 0, D5 = 1: установка режима 1 (однонаправленный асинхронный);

            D4 = 0: порт PА на вывод;

            D3 = 0: старшая тетрада (PCH) порта PС на вывод;

            D2 = 0: установка режима 0 (синхронный);

            D1 = 0: порт PВ на вывод;

            D0 = 0: младшая тетрада (PCL) порта PС на вывод. 

Фрагмент программы  настройки ППИ: 

MOV A, #0A0H  ; запись в аккумулятор УС0

MOV R0, #43H  ; запись в R0 адрес РУС ППИ

MOVX @R0, A   ; запись в РУС УС0 из аккумулятора 

AAH:  D7 = 1: задание режима работы каналов PA, PB, PC;

            D6 = 0, D5 = 1: установка режима 1 (однонаправленный асинхронный);

            D4 = 0: порт PА на вывод;

            D3 = 1: старшая тетрада (PCH) порта PС на ввод;

            D2 = 0: установка режима 0 (синхронный);

            D1 = 0: порт PВ на вывод;

            D0 = 0: младшая тетрада (PCL) порта PС на вывод. 

Фрагмент программы настройки ППИ: 

MOV A, #0A8H  ; запись в аккумулятор УС0

MOV R0, #43H  ; запись в R0 адрес РУС ППИ

MOVX @R0, A   ; запись в РУС УС0 из аккумулятора 

4.3. Пример программы  настройки счётчика 

Режим работы 5
Счётчик 2
Режим счёта 10
только  мл. байт
 
  7 6 5 4 3 2 1 0
РУС: SC1 SC0 RL1 RL0 M2 M1 M0 BCD
  1 0 0 1 1 0 1 0

Информация о работе Программирование микроконтроллера МКС-51