4 / ЗаданЛабраб 4 Таймеры 0,1
.docxИсследование работы Таймеров Т0, Т1 на симуляторе.
Запустите программный имитатор микроконтроллера.
Управление периодом работы таймера. 2.1 Расположите в поле редактора программу: ; Update Freq установить 200
;кнопки 7,6,5,4,3,2,1,0 задают код в регистре TH0 (коэффициент счёта)
ORG 0
JMP START
ORG 0BH
SETB P1.7 ;высокий уровень импульса на Scope = 128+64
NOP ;длительность
NOP ;единицы
NOP ;задаём
NOP ;количеством
NOP ;команд NOP
NOP
CLR P1.7
SETB P0.7 ;вывод на осциллограф
CLR P0.7
RETI
START: MOV TMOD,#00000010B ;таймер Т0 в режиме 2 автозагрузка
SETB TR0
MOV IE,#10000010B
MOV P1,#64 ;низкий уровень импульса на Scope
PR: MOV TH0,P2
JMP PR
END
2.2 Транслируйте программу. Установите в окне Update Freq 200.
2.3 Запустите программу. Поочередно нажимая кнопки 7 … 2 наблюдайте на осциллографе изменение периода счёта Т0.
3. Включение/выключение и совместная работа таймеров Т0 и Т1. 3.1 Расположите в поле редактора программу: ORG 0 JMP START
ORG 0BH
CPL P1.7 ;прерывание Т0
SETB P0.7
CLR P0.7
RETI
ORG 01BH
CPL P1.7 ;прерывание Т1
SETB P0.7
CLR P0.7
RETI START: MOV TMOD,#00100010B ;автозагрузка Т0 и Т1
MOV TH0,#221 ;период Т0=35 машинных циклов
MOV TL0,TH0
MOV TH1,#216 ;период Т1=40 машинных циклов
MOV TL1,TH1
SETB TR0
SETB TR1
MOV IE,#10001010B
MOV P1,#64 ;нижний уровень сигнала на Scoup
PR: MOV C,P2.0
MOV TR0,C ;пуск/остановка Т0 кнопкой SW0
MOV C,P2.1
MOV TR1,C ;пуск/остановка Т1 кнопкой SW1
JMP PR
END
;прерывания Т0 и Т1 изменяют уровень сигнала ;на экране осциллографа на 128 единиц
3.2 Транслируйте и запустите программу. 3.3 Кнопками 0 и 1 включайте таймеры по одному. Наблюдайте изменение периода импульса на осциллографе.
3.4 Включите оба таймера одновременно. Объясните получившуюся осциллограмму.
4. Совместное формирование таймерами Т0 и Т1 сигнала широтно-импульсной модуляции (ШИМ).
4.1 Расположите в поле редактора программу:
ORG 0
JMP START
ORG 0003H
JMP NX0 ;переход на прерывание INТ0
ORG 000BH ;прерывание Т0
SETB TR1 ;пуск таймера Т1
SETB P1.6 ;высокий уровень на осцилл.
JMP PL_MN ;на подпрограмму +/-
ORG 0013H
JMP NX1 ;переход на прерывание INТ1
ORG 001BH ;прерывание Т1
CLR TR1 ;остановка таймера Т1
CLR P1.6 ;низкий уровень на осцилл.
CALL DAC ;запись уровня в ЦАП
RETI
START: SETB IT0 ;прерывания по перепаду Р3.2
SETB IT1 ; прерывания по перепаду Р3.3
MOV TMOD,#00100010B ;автозагрузка
MOV TH1,#204 ;средняя длительность
MOV TL1,TH1 ; импульса
MOV TH0,#127 ;период ШИМ
MOV TL0,TH0
MOV IE,#10001111B;разреш.прерывания
MOV P1,#150 ;нижний уровень на осц.
CALL DAC
SETB TR0 ;пуск таймера Т0
PR: JMP PR ;основной бесконечный цикл NX0: ;INT0 увеличивает длительность импульса MOV A,TH1
CJNE A,#140,K_NX0 ;«концевой» выключатель
RETI
K_NX0:
DEC TH1
RETI
NX1: ;INT1 уменьшает длительность импульса
MOV A,TH1
CJNE A,#255,K_NX1 ;«концевой» выключатель
RETI
K_NX1:
INC TH1
RETI PL_MN: ;выполняем один раз в период ШИМ
CALL DAC
JB P2.0,MINUS
CLR P3.2 ;аппаратный вызов INT0
SETB P3.2
RETI
MINUS:
JB P2.1,FIN
CLR P3.3 ;аппаратный вызов INT1
SETB P3.3
FIN: RETI
DAC: CLR P0.7 ;запись уровня в ЦАП
SETB P0.7
RET
END
;Таймер Т0 формирует период, таймер Т1 – формирует длительность импульса .
4.2 Транслируйте программу. Установите Update Freq = 200. Запустите программу кнопкой “Run”.
4.3 Изменяйте длительность импульса в сигнале ШИМ, нажимая кнопки «0» и «1».
Наблюдайте результат на осциллографе.
5. В отчёте приведите программы с комментариями и осциллограммы сигналов с указанием, какие входные воздействия были применены.
