BSF PORTA,1 ; зажечь светодиод VD1
goto met1
met0
BCF PORTA,1 ; погасить светодиод VD1
met1
return
Задание 3.
Рассмотрим программу вывода на индикатор HG1 лабораторного макета числа в шестнадцатиричном коде, например числа 6.
loop
movlw 0x06 ; загрузить константу h’6’ в рабочий регистр W
call sev_seg ; вызов подпрограммы перекодировки sev_seg
; в регистре W – семисегментный код числа
movwf PORTB ; пересылка содержимого W порт В (вывод на HG1)
goto loop ; переход на метку loop
#include "sev_seg.asm"
sev_seg
andlw 0x0f ; маскирование (обнуление) старшей тетрады
; содержимого регистра W
addwf PCL,F ; сложение W с PCL и пересылка результата в PCL
retlw 0x80 ; возврат из подпрограммы с W=0x80 (код числа ‘0’)
retlw 0xf2 ; возврат из подпрограммы с W=0xF2 (код числа ‘1’)
retlw 0x48 ; возврат из подпрограммы с W=0x48 (код числа ‘2’)
retlw 0x60 ; возврат из подпрограммы с W=0x60 (код числа ‘3’)
retlw 0x32 ; возврат из подпрограммы с W=0x32 (код числа ‘4’)
retlw 0x25 ; возврат из подпрограммы с W=0x25 (код числа ‘5’)
retlw 0x04 ; возврат из подпрограммы с W=0x04 (код числа ‘6’)
retlw 0xf0 ; возврат из подпрограммы с W=0xF0 (код числа ‘7’)
retlw 0x00 ; возврат из подпрограммы с W=0x00 (код числа ‘8’)
retlw 0x20 ; возврат из подпрограммы с W=0x20 (код числа ‘9’)
retlw 0x10 ; возврат из подпрограммы с W=0x10 (код числа ‘A’)
retlw 0x06 ; возврат из подпрограммы с W=0x06 (код числа ‘B’)
retlw 0x8c ; возврат из подпрограммы с W=0x8C (код числа ‘C’)
retlw 0x42 ; возврат из подпрограммы с W=0x42 (код числа ‘D’)
retlw 0x0c ; возврат из подпрограммы с W=0x0C (код числа ‘E’)
retlw 0x1c ; возврат из подпрограммы с W=0x1C (код числа ‘F’)
Задание 4.
Используя подпрограмму перекодировки sev_seg, напишем программу, которая читает состояния переключателей SA1 и SA2 и выводит на индикатор HG1 соответствующее число.
loop
call get_RA ; вызов подпрограммы GET_RA
get_RA ; подпрограмма чтения состояния порта А
movf PORTA,W ; Пересылка состояния порта A в регистр W
movwf TEMPA ; Пересылка содержимого W в регистр TEMPA
return
RRF TEMPA ; сдвиг вправо через перенос
; содержимого регистра TEMPA
RRF TEMPA, W ; сдвиг вправо через перенос содержимого
; регистра TEMPA, результат в регистре W
ANDWF 00000011B ; выделить два младших разряда в регистре W,
; остальные замаскировать
call sev_seg ; вызов подпрограммы перекодировки sev_seg
MOVWF PORTB ; вывод на индикатор HG1
goto loop ; зацикливание программы
#include "sev_seg"
Задание 5.
Рассмотрим теперь программы, работающие в реальном масштабе времени, т.е. выдающие сигналы определенной длительности и частоты следования, либо учитывающие временные параметры входных сигналов. Основным элементом таких программ является подпрограмма формирования временной задержки. Рассмотрим один из возможных вариантов такой подпрограммы с использованием программных методов формирования задержки, т.е. без применения встроенного таймера.
Определим значение константы L для получения длительности задержки 0,5 мс. Эта задержка буде использоваться в дальнейших программах управления. TD = [4 + 3 * (L – 1) + 4]* Tц =(5 + 3 * L)* Tц, где L – константа, загружаемая в рабочий регистр.
При тактовой частоте Fosc = 2 МГц длительность цикла равна Tц = 2 мкс. Тогда
L= (TD – 5 Tц)/3 Tц = (0,5мс-10мкс)/6мкс=82
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.