мікроконтролера які були здійснені до переповнення WDT, це й є період його скиданя.
Запустивши програму на виконання у пошаговому режимі ми бачимо цей період дорівнюе 8 тактам мікроконтролера.
2.5. Проаналізувати функціонування сторожового таймера в режимі SLEEP.
Для цього виконаемо ініціалізацію WDT заносячи у регістр OPTION необхідні значення бітів. Потім робимо скидання WDT та задопомогою команди SLEEP вводимо мікроконтролер у режим низького енерго живлення, та очікуємо спрацьовування WDT, яке забезпечить вихід мікроконтролеру з режиму низького енерго живлення до робочого режиму.
Текст програми можна написати у будь-якому текстовому редактрі, також це можна зробити редакторі Edit пакета MPLAB. Для того, щоб це зробити у редакторі Edit пакета MPLAB необхідно виконати слідуючи дії:
1) запустити програму MPLAB.
2) у головному меню вибрати пункт File/New;
3) набрати текст програми та зберегти його з розширпенням .asm (пкнкт меню File/Save) програма була збережена на дискеті з ім’ям Lab_2.asm.
Для подальшої роботи з програмою необхідно виконати її трнсляцію, а для цього необхідно створити у програмі MPLAB файл проекту:
1) вибрати пункт головного меню Project\New Project, задати ім’я проекту (Lab_2.pjt).
2) відкриється вікно Edit Project, у якому треба натиснути на кнопку Add Node та підключити файл nata.asm – у вікні з’явиться файл Lab_2.hex;
3) щоб виставити опції проекту, потрібно навести курсор на файл Lab_2.hex та натиснути на кнопку Node Propertion. Виставити систему числення – шеснадцатичну та усе підтвердити.
4) Зберегати ще раз файл Lab_2.pjt. Тепер проект створений.
Конфігурація схеми таймера за наступними вихідними даними: тактування таймера виробляється від зовнішнього джерела тактових імпульсів по задньому фронту із використанням попереднього дільника з коефіцієнтом ділення 1: 8.
Текст програми, що визначає біти регістру OPTION та робить ділення зовнішньої частоти F, що надходить на вивід RA4/T0CKI мікроконтролера PIC16F84 з коефіцієнтом ділення К1, і отриману частоту виводить на вивід RB0 мікроконтролера.
Тект файлу Lab_2.asm:
list p=16f84 ;определение типа мк
#include p16f84.inc ;подключение файла p16f84.inc
k1 equ .19
k2 equ .8
ORG 0 ;адрес начала программы
call init
org 4
start movlw .256-k1 ;загрузка числа 237
movwf TMR0 ;в TMR0 (в таймер)
bcf INTCON,T0IF ;сбросить бит T0IF в рег. INTCON
M1 btfss INTCON,T0IF ;ожидание переполнения
goto M1 ;таймера
bcf PORTB,0 ;сформировать 0 на выходе RB0
movlw .256-k1 ;загрузка числа 237
movwf TMR0 ;в TMR0 (в таймер)
bcf INTCON,T0IF ;сбросить бит T0IF в рег. INTCON
M2 btfss INTCON,T0IF ;ожидание переполнения
goto M2 ;таймера
bsf PORTB,0 ;сформировать 1 на выходе RB0
movlw .256-k2 ;загрузка числа 248
movwf TMR0 ;в TMR0 (в таймер)
bcf INTCON,T0IF ;сбросить бит T0IF в рег. INTCON
M3 clrwdt
btfss INTCON,T0IF ;ожидание переполнения
goto M3 ;таймера
bcf PORTB,0 ;сформировать 0 на выходе RB0
movlw .256-k2 ;загрузка числа 248
movwf TMR0 ;в TMR0 (в таймер)
bcf INTCON,T0IF ;установить бит T0IF в рег. INTCON
M4 clrwdt
btfss INTCON,T0IF ;ожидание переполнения
goto M4 ;таймера
bsf PORTB,0 ;сформировать 1 на выходе RB0
goto start ;зацикливание программы
init movlw b'00101000' ;входной сигнал - на ножке RTCC
OPTION ;делитель подключен к WDT
movlw b'11111110' ;в PORTB - 0-й разряд на вывод
TRIS PORTB ;остальные на ввод
movlw b'11111111' ;все разряды PORTA
TRIS PORTA ;на ввод
return ;возврат из подпрограммы
END ;конец программы
В результаті трансляціі одержали такі файли Lab_2.lst, Lab_2.err, Lab_2.hex, які знаходяться на дискеті.
Тект файлу лістинга (Lab_2.lst) має наступний вигляд:
MPASM 02.20 Released LAB2.ASM 4-1-2004 15:16:02 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 list p=16f84a ;определение типа мк
00002 #include p16f84.inc ;подключение файла p16f84.inc
00001 LIST
00002 ; P16F84.INC Standard Header File, Version 2.00 Microchip Technology, Inc.
00136 LIST
00000016 00003 k1 equ .18
000000F5 00004 k2 equ .32
0000 00005 ORG 0 ;адрес начала программы
0000 201C 00006 call init
00007 org 4
0001 30EA 00008 start movlw .256-.k1 ;загрузка числа 237
0002 0081 00009 movwf TMR0 ;в TMR0 (в таймер)
0003 110B 00010 bcf INTCON,T0IF ; сбросить бит T0IF в рег. INTCON
0004 1D0B 00011 M1 btfss INTCON,T0IF ;ожидание переполнения
0005 2804 00012 goto M1 ;таймера
0006 1006 00013 bcf PORTB,0 ; сформировать 0 на выходе RB0
0007 30E9 00014 movlw .256-.k1 ;загрузка числа 248
0008 0081 00015 movwf TMR0 ;в TMR0 (в таймер)
0009 110B 00016 bcf INTCON,T0IF ; сбросить бит T0IF в рег. INTCON
000A 1D0B 00017 M2 btfss INTCON,T0IF ;ожидание переполнения
000B 280A 00018 goto M2 ;таймера
000C 1406 00019 bsf PORTB,0 ; сформировать 1 на выходе RB0
00020
000D 300B 00021 movlw .256-k2 ;загрузка числа 248
000E 0081 00022 movwf TMR0 ;в TMR0 (в таймер)
000F 110B 00023 bcf INTCON,T0IF ; сбросить бит T0IF в рег. INTCON
0010 0064 00024 M3 clrwdt
0011 1D0B 00025 btfss INTCON,T0IF ;ожидание переполнения
0012 2810 00026 goto M3 ;таймера
0013 1006 00027 bcf PORTB,0 ;сформировать 0 на выходе RB0
0014 300B 00028 movlw .256-k2 ;загрузка числа 248
0015 0081 00029 movwf TMR0 ;в TMR0 (в таймер)
0016 110B 00030 bcf INTCON,T0IF ;установить бит T0IF в рег. INTCON
0017 0064 00031 M4 clrwdt
0018 1D0B 00032 btfss INTCON,T0IF ;ожидание переполнения
0019 2817 00033 goto M4 ;таймера
001A 1406 00034 bsf PORTB,0 ;сформировать 1 на выходе RB0
00035
001B 2801 00036 goto start ;зацикливание программы
00037
001C 3028 00038 init movlw b'00101000' ;входной сигнал - на ножке RTCC
001D 0062 00039 OPTION ;делитель подключен к WDT
001E 30FE 00040 movlw b'11111110' ;в PORTB - 0-й разряд на вывод
001F 0066 00041 TRIS PORTB ;остальные на ввод
0020 30FF 00042 movlw b'11111111' ;все разряды PORTA
0021 0065 00043 TRIS PORTA ;на ввод
0022 0008 00044 return ;возврат из подпрограммы
00045
00046 END ;конец программы
MPASM 02.20 Released LAB2.ASM 4-1-2004 15:16:02 PAGE 2
SYMBOL TABLE
LABEL VALUE
_HS_OSC 00003FFE
_LP_OSC 00003FFC
_PWRTE_OFF 00003FFF
_PWRTE_ON 00003FF7
_RC_OSC 00003FFF
_WDT_OFF 00003FFB
_WDT_ON 00003FFF
_XT_OSC 00003FFD
__16F84 00000001
init 0000001C
k1 00000016
k2 000000F5
start 00000001
MEMORY USAGE MAP ('X' = Used, '-' = Unused)
0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXX------------- ----------------
All other memory blocks unused.
Program Memory Words Used: 35
Program Memory Words Free: 989
Errors : 0
Warnings : 0 reported, 0 suppressed
Messages : 0 reported, 0 suppressed
Для того щоб програма могла працювати необхідно перед її виконанням підключити файл Lab_2.sti симулювання вхідного сигнала на вхід МК RA4/T0CKI. Він містить натипний текст:
RA4 20H 20L
Текст програми, що визначає період скидання сторожевого таймера при використанні попердноьго дільника з коефіцієнтом ділення К2=1:8.
list p=16f84 ;определение типа мк
#include p16f84.inc ;подключение файла p16f84a.inc
start movlw b'00001100' ;Инициализация WDT
OPTION ;коеф. 1:32
CLRWDT ;очистить WDT
m11 goto m11 ;переполнить WDT
goto start ;зациклить программу?
END ;конец программы
Тект файлу лістинга (Lab_2.1.lst) має наступний вигляд:
MPASM 02.20 Released LAB2_1.ASM 4-1-2004 15:18:24 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 list p=16f84a ;определение типа мк
00002 #include p16f84.inc ;подключение файла p16f84a.inc
00001 LIST
00002 ; P16F84.INC Standard Header File, Version 2.00 Microchip Technology, Inc.
00136 LIST
0000 00003 start
0000 300C 00004 movlw b'00001100' ;Инициализация WDT
0001 0062 00005 OPTION ;коеф. 1:8
0002 0064 00006 CLRWDT ;очистить WDT
0003 2803 00007 m11 goto m11 ;переполнить WDT
0004 2800 00008 goto start ;зациклить программу
00009
00010 END ;конец программы
MPASM 02.20 Released LAB2_1.ASM 4-1-2004 15:18:24 PAGE 2
SYMBOL TABLE
LABEL VALUE
_RC_OSC 00003FFF
_WDT_OFF 00003FFB
_WDT_ON 00003FFF
_XT_OSC 00003FFD
__16F84 00000001
m11 00000003
start 00000000
MEMORY USAGE MAP ('X' = Used, '-' = Unused)
0000 : XXXXX----------- ---------------- ---------------- ----------------
All other memory blocks unused.
Program Memory Words Used: 5
Program Memory Words Free: 1019
Errors : 0
Warnings : 0 reported, 0 suppressed
Messages : 0 reported, 0 suppressed
Текст програми, що показує функціонування сторожового таймера в режимі SLEEP:
list p=16f84 ;определение типа мк
#include p16f84.inc ;подключение файла p16f84.inc
start
movlw b'00001000' ;Инициализация WDT
OPTION
CLRWDT ;очистить WDT
SLEEP ;входимо у режим Sleep
m goto m ;переполнить WDT
goto start ;зациклить программу
END ;конец программы
Запустивши програму у пошаговому режимі бачимо, спочатку після віконання команди SLEEP мікроконтролер входить до режиму низького енергоживлення, про це свідчить встановлення бітів регістру STATUS: ТО у “1” та біту PD у “0”. Після спрацьовування сторожевого таймера мікроконтролер переходить у робочий режим, про це свідчить те що біт ТО встановлено у “0” та мікроконтролер продовжує
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.