Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

MOV A, TL1



... ;выход из процедуры

; Программа счетчик импульсов

DSEG

counter EQU 30h

CSEG

org 200

clr P1.1

mov counter,#0h

C1: jnb P1.1, C1

inc counter

mov A, counter

jnz C2

inc (counter+1)

C2: jb P1.1, C2

jmp C1

END;

Задача #2 – “Программная генерация ШИМ”

; Период = 250 мкс

; Длительность = 100 мкс

; Выходной сигнал подается на P1.0

MOV TMOD, #0; Т/С0 и Т/С1 – 8-и разрядные таймеры

START: MOV TH0, #(NOT(250)+1); Период отслеживает Т/С0

MOV TH1, #(NOT(100)+1); Длительность Т/С1

SETB P1.0; Начало сигнала

MOV TCON, #1010000B; Старт таймеров

TAU: JNB TCON.7, TAU; Ожидаем переполнение Т/С1

CLR P1.0; Спад сигнала

T: JNB TCON.5, T; Ожидаем переполнение Т/С0

XRL TCON, TCON; Остановка таймеров

SJMP START; Генерируем новый импульс

Задача #3 – “Измерение длительности импульсов без прерываний”

; Подсчет длительности импульса в P1.0 (длительность импульса не превышает 125 мс)

XRL TH0, TH0; Очистка регистра TH0

XRL TL0, TL0; Очистка регистра TL0

XRL P0, P0; Очистка выходного порта

MOV TMOD, #1; Таймер / счетчик 0 – 16-и разрядный таймер

IMP_BEGIN: JNB P1.0, IMP_BEGIN; Ожидание появления импульса

SETB TCON.4; Активация таймера

IMP_END: JB P1.0, IMP_ END; Ожидание окончания импульса

CLR TCON.4; Остановка таймера

; В паре регистров TH0: TL0 сохранена длительность импульса

Задача #5 – “Программная генерация ЧИМ ”

Порт P0 - порт задания длительности Т(периода следования). P1.1 формирует сигнал. Длительность самого импульса - TAY = 50мкс.

MOV TMOD, #0 //установка режима работы таймеров: T/C0 и T/C1 как 8-рязрядные таймеры

START: MOV THO, #NOT((50)+1) //запись в доп.коде TAY

MOV TH1, P0 //запись в доп.коде T

SETB R1.1 //установка бита P1.1 в 1

MOV TCON, #1010000B //запуск таймеров

WAIT1: JNB TCON.5, WAIT1 //отсчет 50мкс

CLR P1.1 //сброс бита P1.1 в 0

WAIT2: JNB TCON.7, WAIT2 //отсчет T

XRL TCON, TCON //очистка TCON

SJMP START //переход в начало

Задача #6 – “Измерение длительности импульсов без прерываний”

MOV IE, #128 // отменяем все прерывания

MOV TMOD, #1 //Т0 – как 16-разрядный таймер

XRL TH0, TH0 // сбрасываем значение старшего байта Т0

XRL TL0, TL0 // сбрасываем значение младшего байта Т0

WAIT_1: JNB P0.0, WAIT_1; // ждем начала импульса

MOV TCON, #16 // запускаем таймер

WAIT_0: JNB P1.0, END; // ждем конца импульса

JNB TCON.5, WAIT_0: // проверяем флаг переполнения

CLR TCON.5 // сбрасываем флаг переполнения

SJMP END; // считаем, что импульс не пришел и передача закончена

END: XRL TCON, TCON // остановили таймер

Задача #8 – “Измерение периода следования импульсов с прерываниями”

11h = 00010001b – конец импульса

21h = 00100001b – начало импульса

DSEG

P_W EQU 30h

CAPTRE EQU 32h // сохранить первое значение времени

FLAG BIT 00h // привязывает следующую команду жестко к памяти

CSEG

ORG 0000h

AJMP MAIN

ORG 0033h

AJMP PCA_IR0

ORG 0100h

MAIN: // настройка и запуск

MOV CMOD, #00h; // WDTE =0 clock=fosc\12

MOV CL, #00h; // обнуляем регистр режима и счетчик

MOV CH, #00h;

MOV CCAPM0, #21h; // настроить модуль 0, разрешение прерывания (2 бита в 1: 0010 0001 – позитив + фиксация событий)

CLR FLAG;

SETB IE.6; // разрешить прерывание от PCA массива

SETB IE.7; // отключить блокировку прерываний

SETB CCON.6; // установить CR

ORG 0200h

НАЧАЛО

PCA_ISR:

CLR CCF0; // Флаг прерывания модуля 0. Сбрасывается программно.

JBC FLAG, SECOND; // Переходим на метку если бит установлен и сбрасываем его.

FIRST:

MOV CAPTURE, CCAP0L; // запись в CAPTURE значения времени из CCAP0L

MOV (CAPTURE+1), CCAP0H; // запись по адресу CAPTURE+1 значения CCAP0H (фиксируем время наступления)

SETB FLAG; // Flag = 1

RETI; // разрешение прерывания этого уровня

SECOND:

PUSH PSW;… // выталкивает из стека последнюю затолкнутую переменную (сохранить признаки

PUSH ACC; // и значения результата)

CLR C; // очистка бита переноса

MOV A, CCAP0L; // запись в ACC значения времени из CCAP0L

SUBB A, CAPTURE; // Вычитание из A – CAPTURE -C Вычитаем младшие байты времени поступления двух событий

MOV P_W, A (Pulse_WIDTH)

MOV A, CCAP0H

SUBB A, (CAPTURE+1) // аналогично старшие байты

MOV (P_W +1), A

POP ACC; // закидывает значение в стек // чтоб не испортить текущих значений

POP PSW;

MOV CCAPM0, #21h; // (начало импульса); (

CLR FLAG;

RETI;

Задача #10 – “Измерение частоты следования импульсов без прерываний”

; Программа измерения частоты импульсов

; Считает число импульсов, пришедшее за 65535 мкс

DSEG

counter EQU 30h

CSEG

org 200

mov TMOD, #10101B; 16 разрядный таймер Т1, 16 разрядный счетчик Т0 от внешнего сигнала

mov TH0, #0; Обнуление регистров T/C1 и T/C0

mov TL0,#0

mov TL1,#0

mov TH1,#0

setb TCON.4; Запуск обоих Т/С

setb TCON.6;

C1: jnb TCON.7,C1; Пока не переполнится таймер Т1

clr TF1

mov A,TH0

rrc A

mov (counter+1), A

mov A,TL0

rrc A

mov counter, A

END;

Задача #11 – “ Измерение частоты следования импульсов с прерываниями”

; Программа измерения частоты импульсов

; Считает число импульсов, пришедшее за 65535 мкс

DSEG

counter EQU 30h

CSEG

org 200

mov TMOD, #10101B; 16 разрядный таймер Т1, 16 разрядный счетчик Т0 от внешнего сигнала

mov TH0, #0; Обнуление регистров T/C1 и T/C0

mov TL0,#0

mov TL1,#0

mov TH1,#0

setb TCON.4; Запуск обоих Т/С

setb TCON.6;

C1: jnb TCON.7,C1; Пока не переполнится таймер Т1

clr TF1

mov A,TH0

rrc A

mov (counter+1), A

mov A,TL0

rrc A

mov counter, A

END;

Задача #12– “Синхронизация программ”

В процессе вычисления выражения промежуточные результаты, присваиваемые рабочим объектам, обычно используются для объединения независимо вычисляемых частей выражения. В случае, когда эти части вычисляются параллельно на разных процессорах, рабочие объекты могут быть применены и для синхронизации.

Синхронизация выполняется командой с двумя операндами, вторым из которых является рабочий объект. В команде устанавливается индикатор w. В исходном состоянии рабочий объект имеет тег wr. По сути дела к команде с синхронизацией обращаются дважды. Трасса, которая первая обращается к такой команде, записывает в рабочую ячейку результат. Запись разрешена, поскольку тег равен wr. После записи работа трассы завершается фиктивной командой stop. Тег рабочей ячейки становится равным rd. Трасса, выполняющая эту команду второй, завершает ее выполнение, поскольку присутствуют оба операнда. Операнд, полученный первым, очевидно, может быть прочтен, поскольку его тег – rd. Порядок операндов определяется кодом последней выполненной команды. Если это команда разветвления, то переданный ей операнд – второй. После выполнения команды синхронизации тег рабочей ячейки переходит в исходное состояние – wr. Рассмотрим пример. Допустим, что подвыражения в выражении

(M+N)*(P-10)

вычисляются разными трассами. Пусть первый процессор начинает считать с точки First, а второй с точки Second.

First rdv a no M

add a no N

fork a no Mlt

Second rdv a no P

sub l S 10

Mlt mult w no Wa

Задача #13 – “Аналого-цифровое преобразование с двойным интегрированием без прерываний”

BEGIN: MOV TH0, #0

MOV TL0, #0

MOV TMOD, #9h; Установка бита GATE, режим работы 16 разрядный счетчик

SETB P1.0; Подача опорного напряжения

C1: JB P3.2, C1; Ждем отрицательного уровня

CLR P1.0; подача Uвх

SETB TCON.4; Запуск таймера 0

C2: JNB TCON.5, C2; Ждем пока пройдет интервал времени Т1 (переполнится таймер)

SETB P1.0; Подача опорного напряжения, начало обратного интегрирования

C3: JB P3.2, C3; Ожидание момента T2

CLR TCON.4; Останов таймера 0

CLR TCON.5; Сброс флага TF0

MOV B, TH0

MOV ACC, TL0; Сохранение результата преобразования

END;

Задача #14 – “Аналого-цифровое преобразование с двойным интегрированием с прерываниями”

; R0.0 – Флаг начала вычисления (1 – вычисления продолжаются)

ORG 0BH; Начало обработчика прерывания Timer0

CALL TM0; Вызов подпрограммы обработки прерывания Timer0

RETI; Возврат из прерывания

ORG 33H; Начало программы

BEGIN: MOV TH0, #0

MOV TL0, #0

MOV TMOD, #9h; Установка бита GATE, режим работы 16 разрядный счетчик

SETB ET0; Разрешение прерывания от Таймера0

SETB P1.0; Подача опорного напряжения

C1: JB P3.2, C1; Ждем отрицательного уровня

CLR P1.0; подача Uвх

SETB R0.0; Устанавливаем флаг начала вычисления

SETB TCON.4; Запуск таймера 0

L1: JB R0.0, L1; Ожидаем окончания вычислений

END;

TM0: NOP; Начало подпрограммы обработки прерывания Timer0

CLR TF0; Очистка источника прерывания (сброс флага TF0)

CLR TCON.4; Останов таймера 0

SETB P1.0; Подача опорного напряжения, начало обратного интегрирования

C2: JB P3.2, C2; Ожидание момента T2

MOV B, TH0

MOV ACC, TL0; Сохранение результата преобразования

RET; Выход из подпрограммы

Задача #15 – “Борьба с "дребезгом" контактов”

Задача #16 – “Борьба с "дребезгом" контактов”

Дребезг представляет собой многократное замыкание и размыкание цепи. В результате на вход микропроцессорного устройства поступает не единичный перепад напряжения, а целая пачка импульсов. Предположим, что сигнал приходит на бит 0 порта P1. А продолжительность "дребезга" меньше 200 мкс.

T1: JNB P1.0, T1 //ждем прихода импульса

CALL WAIT //делаем первую задержку

T2: JB P1.0, T2 // ждем окончания импульса

CALL WAIT //делаем вторую задержку

SJMP T1 // вначало программы

WAIT: MOV R2, #200 //инициализируем счетчик на 200 повторений

T3: DJNZ R2, T3 //повторяем пока R2 не станет равно 0

RET

Задача #19 – “ Аналого-цифровое преобразование следящего типа.

begin: mov R3,#10; искомая цифровая величина

loop: jb P2.0, decr

inc R3; увеличивается число, Uцап тоже увеличивается

mov P1, R3

jmp loop

decr: dec R3; c уменьшением R3 уменьшается Uцап

mov P1, R3

jmp loop

END;

Задача #20 – “Генерация ШИМ”

Генерации ШИМ импульсов с использованием модуля PCA.

Любой из пяти модулей может быть использован как генератор импульсов заданной скважности. Частота генерируемых импульсов непосредственно зависит от частоты сигналов на счетном входе РСА таймера-счетчика. При внешнем резонаторе 16МГц, максимальная возможная частота генерируемых импульсов будет 15.6КГц. В этом режиме происходит сравнение регистра CL (младший байт РСА таймера-счетчика) с регистром CCAPnL (см. рисунок).

Когда CL < CCAPnL на внешнем контакте будет сигнал низкого уровня, при CL>=CCAPnL на выходе будет сигнал высокого уровня. Значение в CCAPnL задает скважность импульсов. Для того. чтобы во время изменения значения CCAPnL на выходе не возникло помех, нужно новое значение записывать в регистр ССАРnН. Затем это значение аппаратно загрузится в CCAPnL при переходе CL из значения 0FFH в 00Н, что будет соответствовать началу следующего периода. Изменяя значение в ССАРпН от 0 до 255 можно задавать скважность от 100% до 0.4%.


Текст программы:

MOV CMOD, #03h; Частота работы PCA f/4

MOV CL, #00h; Обнуляем счетчик

MOV CH, #00h

MOV CCAP0H, #7Dh; Значение этого регистра задает скважность

MOV CCAP0L, #7Dh; Значение этого регистра перезагружается из CCAP0H

MOV CCAPM0, #42h; Использование PCA 0 в качестве ШИМ генератора

MOV CR, #01h; Запуск таймера PCA массива

LOOP:

RJMP LOOP; Бесконечный цикл

Задача #22 – “Генерация последовательностей импульсов”

; Программа генерации последовательности импульсов

; Формирует сигналы на P1.0

DSEG

counter EQU 40; обозначает начало массива

CSEG

begin:

mov R4,#4

mov counter,#2Fh

mov (counter+1),#70h

mov (counter+2),#30h

mov (counter+3),#0F0h

mov (counter+4),#5Fh

org 200

loop:

lcall impulse

djnz R4, loop

jmp begin

impulse:

push ACC

push PSW

mov A, #counter

add A, R4

mov R0, A

mov A,@R0

mov R3,A

setb P1.0

C1: djnz R3,C1

clr P1.0

pop PSW

pop ACC

ret

END;

Задача #23– “Обслуживание WDT на примере i80C51FX ”

На вход блока АЦП микроконтроллера можно подать до 8 аналоговых сигналов. Время преобразования для 1 входа составляет 26 мкс на тактовой частоте 12 МГц. В данном программном модуле проверяется аналоговый вход 0, результат выводится в младшие 4 разряда дискретного порта P5. Таймер 1 используется для организации сброса сторожевого таймера.

Процедура тестирования заключается в следующих действиях:

установка на входе Uref микроконтроллера необходимого значения опорного напряжения для блока АЦП

установка на входе ACH0 микроконтроллера необходимого уровня входного сигнала

измерение значений логического сигнала на выходах P5.0-P5.3

;только опрос АЦП

?C0009 CLR A

MOV ADCON,A

ORL ADCON,#010H

?C0011: MOV A,ADCON

CJNE A,#030H,?C0011

?C0012

MOV R4,ADRES0

MOV A,R4

MOV R0,#04H

?C0015:

MOV C,ACC.7

RRC A

DJNZ R0,?C0015

MOV R4,A

LCALL L?0016

SJMP?C0009

Включение сторожевого таймера.

Вход: AH FDh

AL 01h

DX FFFFh

Выход Нет

на asm

MOV AX, 0FD01h

MOV DX, 0FFFFh

INT 17h

Выключение сторожевого таймера.

Вход AH FDh

AL 03h

DX FFFFh

Выход Нет

на asm

MOV AX, 0FD03h

MOV DX, 0FFFFh

INT 17h

Сброс сторожевого таймера

Вход: AH FDh

AL 02h

DX FFFFh

Выход Нет

на asm

MOV AX, 0FD02h

MOV DX, 0FFFFh

INT 17h

Доп. вопрос #1 – “Механизм прерываний”

- Прерывания по уровню (организация, обработка, применение) и прерывания по срезу (организация, обработка, применение):

Внешним прерываниям можно задать характер установкой соответствующих битов:

- TCON.0 - Бит, определяющий вид прерывания INT0 (0 - прерывание по уровню; 1 - прерывание по фронту);

- TCON.2 - Бит, определяющий вид прерывания INT1 (0 - прерывание по уровню; 1 - прерывание по фронту);

Факт внешнего прерывания фиксируется в соответствующем бите:

- TCON.1 – Бит, фиксирующий факт прерывания INT0;

- TCON.3 – Бит, фиксирующий факт прерывания INT1;

Обработчики прерываний INT0 и INT1 должны располагаться по адресам 0003H и 0013H соответственно. Для обнаружения прерывания уровень сигнала должен держаться, по меньшей мере, 1 цикл. Задержка между моментом возникновения прерывания и запуском обработчика может составлять 3 – 9 циклов. Прерывание по уровню используется, если к одному входу подключено несколько источников прерываний. Прерывание по срезу происходит при перепаде из 1 в 0, выход из запроса происходит аппаратно.

- Прерывания по уровню (организация, обработка, применение):

Каждое из внешних прерываний ~INT0, ~INT1 может быть активизировано по уровню ("0"), что определяется состоянием битов IT0 и IT1 регистра TCON. При поступлении запроса внешнего прерывания ~INTx устанавливается флаг 1Ех регистра TCON. Установка флагов 1Ех в регистре TCON вызывает соответствующее прерывание. Очистка флага 1Ех производится следующим образом: при прерывании по уровню флаг очищается при снятии запроса внешнего прерывания, то есть в 1Ех отслеживается состояние вывода ~INTx.

Чтобы внешнее прерывание по уровню было распознано, необходимо, чтобы низкий уровень на выводе ~INTx удерживался в течение не менее 12 периодов сигнала тактовой частоты ОМЭВМ. Это объясняется тем, что проверка выводов ОМЭВМ ~INT0, ~INT1 выполняется внутренними аппаратными средствами ОМЭВМ один раз в каждом машинном цикле. Если внешнее прерывание активизируется по уровню, запрос должен удерживаться до начала обслуживающей подпрограммы и сниматься до завершения этой подпрограммы для предотвращения повторного обслуживания.

2: Если значение бита IT0 (для вывода INT0) или IT (для вывода INT0) равно 0, то соответствующий запрос на прерывание возникает при нулевом уровне сигнала на данном входе (прерывание по уровню). Если запрограммировано прерывание по уровню, то состояние флага запрос соответствует уровню сигнала на его внешнем выводе. Для обнаружения запроса требуемые уровни сигналов должны присутствовать на входе в течение как минимум одного машинного цикла. Подпрограмма обработки любого прерывания должна заканчиваться командой RETI.

Применяется, если необходимо обеспечить прерывание от нескольких источников. Процессор по средством программы обращается к устройству и снимает запрос.

- Прерывания по срезу (организация, обработка, применение)

Прерывание происходит при перепаде из 1 в 0 на входах 8051. Выход из запроса происходит аппаратно (флаги сбрасываются аппаратно). Для организации необходимо в NCON установить биты IT0 и IE1 соответственно. Запрос сбрасывается аппаратно, а устанавливается и программно и аппаратно.

- Немаскируемые прерывания:

Прерывания, которые нельзя отключить (Reset). Регистр IE полон, прерывания от WDT.

- Внепрограммная обработка прерываний:

Осуществляется посредством PTS. Обработка прерывания происходит параллельно с выполнением программы. Сервер периферийного обмена (PTS) является микропрограммным аппаратным обработчиком прерываний. Он может использоваться вместо стандартных подпрограмм обработки прерываний для любых маскируемых прерываний. PTS обслуживает прерывания с небольшой задержкой; он не модифицирует стек или PSW, что позволяет нормально продолжить выполнение прерванной программы. По этим причинам PTS может обслуживать прерывание за время, необходимое для выполнения одиночной команды. PTS работает в пяти специальных микропрограммных режимах, которые позволяют PTS выполнять отдельные задачи гораздо быстрее, чем подпрограммы обслуживания прерывания. Смотрите описание режимов PTS в приложении C. Каждое прерывание PTS требует блока данных, называемого блоком управления PTS (PTSCB). Если имеет место прерывание PTS, то декодировщик приоритетов выбирает соответствующий вектор и вызывает PTSCB. PTSCB определяет режим, общее число передач (при необходимости), общее число циклов, которые будут выполнятся, пока PTS не потребует дополнительного обслужтиания, и источник и/или приёмник данных при передаче (при необходимости). Каждое прерывание PTS генерирует один цикл PTS. В микроконтроллерах некоторых типов кроме программного контроллера прерываний имеется микропрограммный контроллер прерываний (PTS). Любой запрос прерывания, кроме нескольких особых запросов, может быть направлен для обслуживания или в PIC или в PTS. Обслуживание запроса прерывания с использованием PTS заключается в выполнении типовой микропрограммы, при этом выполнение операций по микропрограмме совмещается во времени с выполнением команд текущей программы. Микропрограммы PTS охватывают, в основном, пересылки данных. Прерывания, обслуживаемые PTS, отрабатываются быстрее, чем те, которые обслуживаются обычным способом. Однако, программировать PTS непросто, а отлаживать еще сложнее..

- Способы уменьшения числа прерываний при обмене данными:

Необходимо запросы на прерывания организовывать в очередь (использовать FIFO - систему) или использовать контроллер прямого доступа. Также можно сообщения о прерываниях делать более длинными (увеличивать их информативность).

- Механизм приоритетов:

Каждому типу прерывания может быть программно присвоен высокий или низкий приоритетный уровень путем установки соответствующего бита в регистре IP (Interrupt Priority):

- IP.7, IP.6, IP.5 - reserved, зарезервированы для дальнейшего использования;

- IP.4 - Priority of Serial Port Interrupt (PS), приоритет последовательного порта;

- IP.3 - Priority of Timer 1 Interrupt (PT1), приоритет Т/С1;

- IP.2 - Priority of External Interrupt 1 (PX1), приоритет внешнего прерывания INT 1;

- IP.1 - Priority of Timer 0 Interrupt (PT0), приоритет Т/С0;

- IP.0 - Priority of External Interrupt 0 (PX0), приоритет внешнего прерывания INT 0.

Низкоприоритетное прерывание может прерываться высокоприоритетным, но никогда не прерывается запросом того же уровня приоритета. Поэтому, если одновременно возникают два прерывания с различным уровнем приоритета, то сначала выполняется высокоприоритетное. Если же подобная ситуация складывается для прерываний с одинаковым уровнем приоритета, то последовательность их обработки определяется специальной последовательностью опроса флагов прерываний (Interrupt Polling Sequence). В процессе работы "фиксация" всех флагов прерываний происходит в состоянии S5 каждого машинного цикла, а опрос - во время следующего машинного цикла. Порядок обхода прерываний одного уровня: INT0, таймер 0, INT1, таймер 1, последовательный порт.

ИЛИ

Существуют высокие и низкие уровни прерывания, определяемые по состоянию битов регистра IP.0-IP.4 (1 – высокий, 0 - низкий). При одновременном появлении нескольких запросов одного уровня очередность обслуживания определяется с помощью внутренней процедуры поллинга (последователь­ного опроса), который производится в порядке фиксированного старшинства источников внутри одного уровня приоритета. Этот порядок следующий: Приоритеты прерываний при поллинге

Источник Приоритет внутри уровня
Вход INT0# Высший
Таймер 0  
Вход INT1#  
Таймер 1  
Последовательный порт Низший

Доп. вопрос #2 – “Таймеры”

- Т0 как таймер:

TMOD.2 = 0 - режим таймера, содержимое регистра таймера счетчика инкрементируется в непрерывном цикле

- Т1 как счетчик:

TMOD.6 = 1 – режим счетчика; TMOD.5 и TMOD.4 задают режим работы (00 – 13 разрядный счетчик, 01 – 16 разрядный счетчик, 10 – 8 разрядный счетчик, 11 – TL0 – 8-и разрядный таймер или счетчик, TL1 – 8-и разрядный таймер). В режиме счетчика производится подсчет сигналов на входе Т1 (P3.5).

- Т1 как устройство синхронизации UART:

В режимах UART 1 или 2 (SM0:SM1:SM2 = 0:1:0/1 или SM0:SM1:SM2 = 1:1:0/1) частота обмена задается через T/C1 и равна:

2 SMOD *FOV /32, где FOV – частота переполнения таймера 1 и равна: FOV = FOSC/(12* [256 – (TH1)]), где FOSC – частота осцелятора, а (TH1) – десятичный код содержимого регистра TH1. Т/С1 используется для приемника только если T2CON.5 = 0. Т/С1 используется для передатчика только если T2CON.4 = 0. Наиболее типично использование его в режиме таймера с автоперезагрузкой (старшая тетрада TMOD = 0010В).

SCON=0xd8; //reg. UART - 3, razr. priema., 9-i bit=1

TMOD=0x21; //T1 - reg.2, T0 - reg.1

TCON=0;

PCON=0x80; //skorost` *2

TL1=TH1=0xff; //115200

TR1=1; //run timer UART

IP=0;

IE=0x90; //Global, UART

- Т1 как вход запроса на прерывание:

В TH1 и TH0 записывается FF, далее содержимое счетчика увеличится на 1, если в предыдущем цикле был считан сигнал высокого уровня, а в следующем низкого, после чего будет выставлен запрос на прерывание.

- Т2 как таймер:

В режиме таймера Т2СОN.1 = 0. При переполнении Т/С2 устанавливается бит TF2 в T2CON и возникает прерывание если это разрешено.

- Т2 как счетчик:

В режиме счетчика (Т2СОN.1 = 1)регистр инкрементируется в ответ на перепад из 1 в 0 в P1.0. При переполнении Т/С2 устанавливается бит TF2 в T2CON и возникает прерывание если это разрешено.

- Т2 как делитель генератор сигналов:

- Т2 как устройство синхронизации UART:

Т/С2 используется для приемника только если T2CON.5 = 1. Т/С2 используется для передатчика только если T2CON.4 = 1. Режим генератора приемопередатчика активируется так: RCLK:TCLK = 0 и 1 или 1 и 0 или 1 и 1; TR2 = 1.

T2MOD = 0x00;

PCON = 0x80; //бит SMOD. Удвоение скорости обмена UART

SCON = 0xd8; //настройка UART. Режим 3 - 9-бит, разрешение приема, 9-й бит=1

TH2 = RCAP2H = 0xff; //загрузка Т2 исходя из выбранной скорости обмена-115200

TL2 = RCAP2L = 0xfa; //

T2CON = 0x30; //настройка Т2. Т2-задающий генератор UART

TI=RI = 0; //cброс флагов прерывания UART

TR2 = 1;

//настройка прерываний

IE = 0x90; //Общее, UART

Обмен до 230Кбит/сек. Когда T2 работает в качестве синхронизатора UART, то fвч/2. По переполнению счетчика T2 значения его записываются в RCAP2. fUART=fВЧ/(32(65536 - <RCAP2>)). Вывод P1 при этом можно использовать для прерывания (T2EX).

- Т2 как вход запроса на прерывание:

При переполнении регистра таймера/счетчика устанавливается флаг T2CON.TF2, который затем может использоваться для вызова прерывания. Кроме того, если установлен флаг T2CON.EXF2, то прерывание может возникнуть при защелкивании информации в таймерных регистрах или при перезагрузке, происходящих под воздействием перепада из 1 в 0 на выводе Р1.1.

- Т2 как измеритель длительности импульса:

Использование таймера в качестве измерителя ширины импульсов. Известно, что измерение длительности импульса можно произвести, подсчитав импульсы эталонной частоты. Принцип измерения длительности импульсов иллюстрируется рисунком 8. Для измерения длительности импульса измеряемый сигнал подается на вывод микроконтроллера INTx и в бит управления GATE записывается разрешающий сигнал логической единицы. Таймер/счетчик настраивается в режим таймера записью в бит C/Tx логического нуля. Содержимое таймера обнуляется. Пример программы измерения длительности импульса приведен на рисунке 9.

Рисунок 8. Принцип измерения длительности импульсов

mov TMOD,#00001001b

;

|| ;





Дата публикования: 2015-01-24; Прочитано: 800 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.044 с)...