Скачиваний:
16
Добавлен:
01.05.2014
Размер:
163.33 Кб
Скачать

Выполнение

Цель работы:

Изучение вопросов программирования и применения таймера/счетчика в основных режимах его работы.

Задание:

Разработать программу, обеспечивающую наблюдения эффекта “бегущего огня” на светоизлучающих диодах (СИД) отладочной платы. Вид “бегущего огня” определен вариантом задания.

Вариант

Тип “бегущего огня”

1

Слева - направо (горит один СИД)

2

Справа – налево (горит один СИД)

3

С изменением направления (горит один СИД)

4

Сходящиеся к центру огни (горят 2 СИД)

5

Расходящиеся от центра огни (горят 2 СИД)

6

7

8

9

Пример программы:

$NOMOD51

#include <reg932.h>

Blinking SEGMENT CODE ; segment declaration

; defines a segment with the name 'Blinking' and the memory class CODE

RSEG Blinking ; switch to this code segment

JMP init

ORG 0Bh ; 0BH is address for Timer 0 interrupt

PUSH PSW

PUSH ACC

MOV P2, R7

CJNE R7, #10000000b, shift

MOV R7, #00000001b

JMP next

shift:

MOV A, R7

RL A

MOV R7, A

next:

POP ACC

POP PSW

RETI

init:

MOV P2M1, #00h ; configure Port 2 as Quasi-bidirectional

MOV R7, #00000001b ;

CLR A

MOV DPTR, #0h

MOVX @DPTR, A

MOV TMOD, #01h ; configure Timer 0 in mode 1 (16-bit counter)

; programming interrupt logic

SETB EA ; enable all interrupts

SETB ET0 ; enable interrupt request from T/C0

SETB TR0 ; run timer 0

forever:

JMP forever

END

Правильность функционирования вышеприведенного примера можно проверить в режиме моделирования. Но при реальной работе время переключения СИД будет слишком малым. И из-за свойства инерционности наблюдать эффект “бегущего огня” будет невозможно (будут гореть все СИДы). Поэтому необходимо кроме таймера использовать дополнительную программную задержку. Один из вариантов такой задержки продемонстрирован ниже.

$NOMOD51

#include <reg932.h>

Blinking SEGMENT CODE ; segment declaration

; defines a segment with the name 'Blinking' and the memory class CODE

RSEG Blinking ; switch to this code segment

JMP init

ORG 0Bh ; 0BH is address for Timer 0 interrupt

PUSH PSW

PUSH ACC

MOV P2, R7

DJNZ R6, next

MOV R6, #01000000b

CJNE R7, #10000000b, shift

MOV R7, #00000001b

JMP next

shift:

MOV A, R7

RL A

MOV R7, A

next: POP ACC

POP PSW

RETI

init:

MOV P2M1, #00h ; configure Port 2 as Quasi-bidirectional

MOV R7, #00000001b

MOV R6, #01000000b

MOV TMOD, #01h ; configure Timer 0 in mode 1 (16-bit counter)

; programming interrupt logic

SETB EA ; enable all interrupts

SETB ET0 ; enable interrupt request from T/C0

SETB TR0 ; run timer 0

forever:

JMP forever

END

Соседние файлы в папке Материалы по микропроцессорам