Указание. При накоплении входных кодов из порта P0 возможно переполнение аккумулятора, поэтому результат суммирования следует хранить в двух смежных ячейках памяти данных. При вычислении среднего значения для деления на 5 используйте подпрограмму D16_8.
; *************************************************************** |
|||
; --------------------------------- D16_8 ----------------------------------------------------- |
|||
; Подпрограмма деления целых двоичных чисел без знака ; формата 16:8=(8,8). ; Входные параметры: (R4,R3) – СтБ, МлБ делимого, (R2) – делитель. ; Выходные параметры: (R3) – частное, (R4) остаток. |
|||
; *************************************************************** |
|||
D16_8: |
MOV В, #8 |
; |
; Счетчик циклов |
; Сдвиг влево остатка и частного в R4,R3 |
|||
CYCLE: |
MOV A, R3 |
||
ADD A, R3 |
|||
MOV R3, A |
|||
MOV A, R4 |
|||
ADDC A, R4 |
; |
; В (А) – СтБ остатка |
|
JC PER1 |
; |
; Если переполнение остатка |
|
; Вычитание делителя из остатка |
|||
SUBB A,R2 |
|||
JNC PER2 |
; |
; Если разность > 0 |
|
; Разность < 0, восстановление остатка |
|||
ADD A, R2 |
; |
||
MOV R4, А |
|||
JMP PER3 |
|||
; Переполнение остатка, разряд частного = 1 |
|||
PER1: |
CLR C |
||
SUBB A, R2 |
|||
PER2: |
MOV R4, A |
||
INC R3 |
; |
; +1 в частное |
|
PER3: |
DJNZ В, CYCLE |
; |
; Зацикливание |
RET |
|||
Суммирование и вычисление среднего значения удобно реализовать в обработчике ISR0. Для подсчета количества нажатий кнопки используйте любой регистр. После последнего нажатия кнопки прерывания должны быть запрещены.
Программу назовите INTER1 и занесите в файл inter1.asm. Проверьте правильность работы программы с помощью симулятора/отладчика AVSIM51.
4. Содержание отчета
Наименование и цель работы. Функциональная схема исследуемого микроконтроллера. Блок-схемы алгоритмов и тексты программ IN_OUT1, INTER1 к заданиям для самостоятельной работы. Тексты программ DISPL и CROSSCOD. Файлы in_out1.hex и inter1.hex для демонстрации работы программ.
Контрольные вопросы
1. Для какой цели используются директивы Ассемблера PUBLIC и EXTERN?
2. Как выполняется компоновка многомодульной программы?
3. Как можно определить начальные и конечные адреса модулей в программе?
4. Как можно разрешить и запретить прерывания по INT1?
5. Как можно определить среднее значение результата ввода 10 данных из порта P1?
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.