close

Вход

Забыли?

вход по аккаунту

?

лаба2отчёт

код для вставкиСкачать
НИУ МЭИ
кафедра Информационно-измерительной техники
Лабораторная работа №2
Таймер
Выполнил: Боровский А.
Козюков С.
Левитский И.
Группа: А-04-08
Преподаватель: Евланов Ю.Н.
Москва 2012
Введение
Практически любое микроконтроллерное устройство имеет те или иные
устройства индикации. Одно из таких устройств - часы, таймер, секундомер. В
данном отчете представлены результаты разработки таймера с разрешающей
способностью 1мс.
Задание
1. Создать программный модуль timer.asm. Написать и включить в него подпрограмму Timer, обеспечивающую выработку с заданной погрешностью δt сигналов – меток времени, а также отображение на ЦОУ с помощью
подпрограммы DispNum времени t, отсчитанного от момента пуска программы.
Диапазон значений t –
t
% (по указанию преподавателя).
2. С помощью ассемблера получить объектный код модуля timer и,
объединив его посредством редактора связей с объектным кодом модуля
display,
создать загружаемый файл timer.tsk.
Проверить работу программы Timer. При необходимости выполнить
отладку.
3. Экспериментально определить значение погрешности δt. Сравнить
результаты расчета и опыта. В случае невыполнения требования задания к
погрешности скорректировать программу Timer и повторить эксперимент.
4. Составить отчет о работе, включающий задание, расчет погрешности
δt, схемы алгоритмов и листинги отлаженных программ.
Подключение ЖКИ-модуля
На рисунке 1 представлено описание выводов 7 сегментного индикатора.
Рис.1. Выводы 7-сегментного индикатора
На рисунке 2 представлены временные диаграммы работы 7 сегментного
индикатора.
Рис.2.Временные диаграммы работы 7-сегментного индикатора.
Схемы алгоритмов
1. На рисунке 3 представлена схема алгоритма работы основного программного
блока.
Рис.3. Схема алгоритма основного программного модуля
2. На рисунке 4 представлена схема алгоритма подпрограммы. Подпрограмма
реализует запись текущего времени в ОЗУ.
Рис.4.Схема алгоритма работы подпрограммы SEND_BYTE_TO_7SEG
3. На рисунке 5 представлена схема алгоритма работы подпрограммы.
Подпрограмма реализует получение текущего времени и запись в ОЗУ для
передачи на 7-сегментный индикатор.
Рис.5.Схема алгоритма работы подпрограммы DO_CLOCK
Эксперименты
В ходе выполнения лабораторной работы был произведен ряд
экспериментов для оценки точности разработанных часов. Эксперимент
заключается в синхронном включении разработанных часов и часов высокой
точности(для эксперимента использовался секундомер мобильного телефона).
Диапазон измерения - 5 минут. По окончанию эксперимента производится
сравнивание значений времени обоих часов.
В таблице 1 представлены результаты эксперимента.
Телефон,(мин.сек.мсек)
05.00.0
05.00.0
05.00.0
05.00.0
05.00.0
Часы, (мин.сек.мсек)
05.01.8
05.01.6
05.01.4
05.01.9
05.01.2
Табл.1.Результаты эксперимента
Определим источники погрешностей разработанных часов:
1)Неодновременное включение часов
2)Отклонение от номинального значения кварца разработанных часов
3)Погрешности временных меток
3.1)Вход/выход из прерываний(2 машинных цикла)
3.2)Перезагрузка Т/С0(2машинных цикла)
3.3)Установка флага метки(1машинный цикл)
4)Несоответствие текущего времени часов и отображенного на ЦОУ.
Листинги программ
;-----------------------------------------------;Файл:
main.a51
;Проект:
project1
;Микроконтроллер: 80552
;Ассемблер:
A51.exe v.7.10
;-----------------------------------------------;Назначение модуля: Cодержит подпрограммы копирования, преобразования, тестирование и
;передачи данных на 7 сегментный индикатор
;------------------------------------------------
$NOLIST
$NOMOD51
$include(REG52.INC)
$LIST
DATA_B segment data
RSEG DATA_B
BUF: ds 1
CSEG AT 0
LJMP START
//_________________________________________________
PR_main segment CODE
RSEG PR_main
SEGM_DATA:
db
00100010b ;34d - 22h ;0
db
01101111b ;111d - 6Fh ;1
db
00111000b ;56d - 38h ;2
db
00101100b ;44d - 2Ch ;3
db
01100101b ;101d - 65h ;4
db
10110000b ;176d - B0h ;5
db
10100000b ;160d - A0h ;6
db
00101111b ;45d - 2Dh ;7
db
00100000b ;32d - 20h ;8
db
00100100b ;36d - 24h ;9
db
01000000b ;253d - FDh ;db
01111001b ;255d - FF ;' '
db 11011111b
;34d - 22
;.
//_________________________________________________
START:
USING 0
CLR A
CLR C
LJMP START1
;-----------------------------------------------;Подпрограмма WAIT_SEND_BYTE
;Подпрограмма задержки
;------------------------------------------------
WAIT_SEND_BYTE:
MOV R7,#100
WAIT_C:
DJNZ R7, WAIT_C
RET
;-----------------------------------------------;Подпрограмма INIT_SERIAL_INT_TO7SEG
;Подпрограмма инициализации 7 сегментного индикатора
;Входные параметры:
;DIN – P1.0 – последовательная передача
;SCL – P1.1 – сигнал синхронизации
;LOAD – P1.2 – загрузка данных
;------------------------------------------------
INIT_SERIAL_INT_TO7SEG:
CLR DIN
CLR SCL
CLR LOAD
RET
;-----------------------------------------------;Подпрограмма DO_CLOCK
;Подпрограмма подачи синхроимпульсов
;------------------------------------------------
DO_CLOCK:
NOP
SETB SCL //CLK=1
CALL WAIT_SEND_BYTE
CLR SCL //CLC=0
CALL WAIT_SEND_BYTE
RET
;-----------------------------------------------;Подпрограмма SEND_BYTE_TO_7SEG
;Подпрограмма передачи байта в 7 сегментный индикатор
;Входные параметры:
;R3 – передаваемый байт данных
;------------------------------------------------
SEND_BYTE_TO_7SEG:
mov A,R3
CLR C
mov R2,#8
SEND_BIT_TO_7SEG:
RLC A
mov DIN,C
CALL DO_CLOCK
DJNZ R2,SEND_BIT_TO_7SEG
RET
;-----------------------------------------------;Подпрограмма LOAD_5BYTE_TO_7SEG
;Подпрограмма передачи 5 байт в 7 сегментный индикатор
;Входные параметры:
;R0 – начальный адрес буфера передаваемых данных
;------------------------------------------------
LOAD_5BYTE_TO_7SEG:
MOV R4,#5
i_BYTE_LOAD:
MOV A,@R0
INC R0
MOV R3,A
CALL SEND_BYTE_TO_7SEG
DJNZ R4,i_BYTE_LOAD
SETB LOAD
CLR DIN
CLR SCL
CALL LOAD_BUFFER_ADRES
CLR LOAD
RET
;-----------------------------------------------;Подпрограмма LOAD_5BYTE_TO_7SEG_WTH_POINT
;Подпрограмма передачи 5 разрядного десятичного числа
;с точкой (кодируется старшим битом)
;Входные параметры:
;R0 – начальный адрес буфера передаваемых данных
;------------------------------------------------
LOAD_5BYTE_TO_7SEG_WTH_POINT:
MOV R4,#5
MOV DPTR,#SEGM_DATA
i_BYTE_LOAD_WP:
MOV A,@R0
INC R0
JNB ACC.7, LOAD_WOUT_POINT_IB
CLR ACC.7
MOVC A,@A+DPTR
ANL A,#11011111b
JMP L1
LOAD_WOUT_POINT_IB:
MOVC A,@A+DPTR
L1:
MOV R3,A
CALL SEND_BYTE_TO_7SEG
DJNZ R4,i_BYTE_LOAD_WP
SETB LOAD
CLR DIN
CLR SCL
CALL LOAD_BUFFER_ADRES
CLR LOAD
RET
;-----------------------------------------------;Подпрограмма LOAD_TO_7SEG_BUF
;Подпрограмма преобразования 5 разрядного десятичного числа (начальный адрес R1) с ;точкой в
7 сегментный формат и копирование преобразованных данных по адресу R0
;Входные параметры:
;R0 – начальный адрес буфера передаваемых данных
;R1 – начальный адрес 5 разрядного 10 числа
;------------------------------------------------
LOAD_TO_7SEG_BUF:
MOV R0,#0x34
CALL LOAD_IN_DATA_ADRES
MOV R4,#5
MOV DPTR,#SEGM_DATA
LOAD_i_BYTE:
MOV A,@R1
JNB ACC.7, LOAD_WOUT_POINT
CLR ACC.7
MOVC A,@A+DPTR
ANL A,#11011111b
JMP L2
LOAD_WOUT_POINT:
MOVC A,@A+DPTR
L2:
MOV @R0,A
INC R1
DEC R0
DJNZ R4,LOAD_i_BYTE
CALL LOAD_BUFFER_ADRES
CALL LOAD_IN_DATA_ADRES
RET
;-----------------------------------------------;Подпрограмма LOAD_BUFFER_ADRES
;Подпрограмма загрузки начального адреса передаваемых данных в 7 сегментный индикатор
;Выходные параметры:
;R0 – начальный адрес буфера передаваемых данных
;------------------------------------------------
LOAD_BUFFER_ADRES:
MOV R0,#0x30
RET
;-----------------------------------------------;Подпрограмма LOAD_IN_DATA_ADRES
;Подпрограмма загрузки начального адреса 5 разрядного 10 числа
;Выходные параметры:
;R0 – начальный адрес буфера передаваемых данных
;------------------------------------------------
LOAD_IN_DATA_ADRES:
MOV R1,#0x35
RET
//*************************************************
;-----------------------------------------------;Основная программа
;Осуществляет два теста
;Тест 1 – Преобразование 5 разрядного 10 числа (начальный адрес R1) в 7 сегментный ;формат.
Копирование преобразованных данных в буфер по адресу R0 и передача данных в 7 ;сегментный
индикатор.
;Тест 2 – преобразование 5 разрядного 10 числа с точкой (кодируется старшим битом) в 7
;сегментный формат и передача в индикатор
;------------------------------------------------
START1:
//TEST1
CALL TEST_PROGRAM_3_LOAD_TO_MEMORY_NUMBERS_WITH_POINT
CALL LOAD_TO_7SEG_BUF
CALL LOAD_5BYTE_TO_7SEG
//TEST2
CALL TEST_PROGRAM_4_LOAD_DATA_R0
CALL LOAD_5BYTE_TO_7SEG_WTH_POINT
JMP $
;-----------------------------------------------;Тестовая подпрограмма TEST_PROGRAM_1_COPY_40BYTE_BUF_IN_MEM
;Производит копирование 5 констант из ПЗУ в ОЗУ по адресу R0
;Входные параметры:
;R4 – число байт для копирования
;R5 – индекс ПЗУ, начиная с которого будет производиться копирвоание
;R0 – адрес ОЗУ по которому будет произведена запись констант ПЗУ
;------------------------------------------------
TEST_PROGRAM_1_COPY_40BYTE_BUF_IN_MEM:
CLR A
MOV R4,#5
MOV DPTR,#SEGM_DATA
i_BYTE_COPY:
MOV A,R5
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC R5
DJNZ R4, i_BYTE_COPY
CALL LOAD_BUFFER_ADRES
RET
;-----------------------------------------------;Тестовая подпрограмма TEST_PROGRAM_2_ZMEYKA
;Осуществляет вывод Змеки, начиная с правых граней младшего сегмента индикатора
;------------------------------------------------
TEST_PROGRAM_2_ZMEYKA:
MOV R5,#0
CALL LOAD_BUFFER_ADRES
MOV R6,#12
MODULE_CYK:
CALL INIT_SERIAL_INT_TO7SEG
CALL TEST_PROGRAM_1_COPY_40BYTE_BUF_IN_MEM
CALL WAIT_SEND_BYTE
CALL LOAD_5BYTE_TO_7SEG
CALL WAIT_SEND_BYTE
DJNZ R6, MODULE_CYK
MOV R5,#0
MOV DPTR,#SEGM_DATA
MOV R6,#12
JMP MODULE_CYK
RET
;-----------------------------------------------;Тестовая подпрограмма TEST_PROGRAM_3_LOAD_TO_MEMORY_NUMBERS_WITH_POINT
;Осуществляет копирование 5 разрядного 10 числа с точкой (кодируется старшим битом) в ;ОЗУ
по адресу R1
;Входные параметры:
;R1 – адрес буфера ОЗУ
;------------------------------------------------
TEST_PROGRAM_3_LOAD_TO_MEMORY_NUMBERS_WITH_POINT:
CALL LOAD_IN_DATA_ADRES
MOV R2,#5
LOOP:
MOV @R1,#0x83
INC R1
DJNZ R2,LOOP
RET
;-----------------------------------------------;Тестовая подпрограмма TEST_PROGRAM_3_LOAD_TO_MEMORY_NUMBERS_WITH_POINT
;Осуществляет копирование 5 разрядного 10 числа с точкой (кодируется старшим битом) в ;ОЗУ
по адресу R0
;Входные параметры:
;R0 – адрес буфера ОЗУ
;------------------------------------------------
TEST_PROGRAM_4_LOAD_DATA_R0:
CALL LOAD_BUFFER_ADRES
MOV R2,#5
LOOP1:
MOV @R0,#0x83
INC R0
DJNZ R2,LOOP1
CALL LOAD_BUFFER_ADRES
RET
//_________________________________________________
SEGM_DATA_TEST:
//5
db 01101111b
db 0xFF
db 0xFF
db 0xFF
db 0xFF
//5
db 11111110b
db 0xFF
db 0xFF
db 0xFF
db 0xFF
//4
db 0xFF
db 11111110b
db 0xFF
db 0xFF
db 0xFF
//3
db 0xFF
db 0xFF
db 11111110b
db 0xFF
db 0xFF
//2
db 0xFF
db 0xFF
db 0xFF
db 11111110b
db 0xFF
//1
db 0xFF
db 0xFF
db 0xFF
db 0xFF
db 11111110b
//1
db 0xFF
db 0xFF
db 0xFF
db 0xFF
db 11110011b
//1
db 0xFF
db 0xFF
db 0xFF
db 0xFF
db 10111111b
//2
db 0xFF
db 0xFF
db 0xFF
db 10111111b
db 0xFF
//3
db 0xFF
db 0xFF
db 10111111b
db 0xFF
db 0xFF
//4
db 0xFF
db 10111111b
db 0xFF
db 0xFF
db 0xFF
//5
db 10111111b
db 0xFF
db 0xFF
db 0xFF
db 0xFF
END
Подключаемый файл с регистрами
;-----------------------------------------------------------------------------; Copyright 1995-1996 KEIL Software, Inc.
; 8052 Processor Declarations
;-----------------------------------------------------------------------------;$SAVE
$NOLIST
;
; BYTE Registers
P0
DATA
80H
P1
DATA
90H
P2
DATA
0A0H
P3
DATA
0B0H
PSW
DATA
0D0H
ACC
DATA
0E0H
B
DATA
0F0H
SP
DATA
81H
DPL
DATA
82H
DPH
DATA
83H
PCON
DATA
87H
TCON
DATA
88H
TMOD
DATA
89H
TL0
DATA
8AH
TL1
DATA
8BH
TH0
DATA
8CH
TH1
DATA
8DH
IE
DATA
0A8H
IP
DATA
0B8H
SCON
DATA
98H
SBUF
DATA
99H
; 8052 Extensions
T2CON
DATA
0C8H
RCAP2L DATA
0CAH
RCAP2H DATA
0CBH
TL2
DATA
0CCH
TH2
DATA
0CDH
; BIT Registers
; PSW
CY
BIT
AC
BIT
F0
BIT
RS1
BIT
RS0
BIT
OV
BIT
P
BIT
; TCON
TF1
BIT
TR1
BIT
TF0
BIT
TR0
BIT
IE1
BIT
IT1
BIT
0D7H
0D6H
0D5H
0D4H
0D3H
0D2H
0D0H
8FH
8EH
8DH
8CH
8BH
8AH
IE0
IT0
; IE
EA
ES
ET1
EX1
ET0
EX0
; IP
PS
PT1
PX1
PT0
PX0
; P3
RD
WR
T1
T0
INT1
INT0
TXD
RXD
; SCON
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
BIT
BIT
89H
88H
BIT
BIT
BIT
BIT
BIT
BIT
0AFH
0ACH
0ABH
0AAH
0A9H
0A8H
BIT
BIT
BIT
BIT
BIT
0BCH
0BBH
0BAH
0B9H
0B8H
BIT
BIT
BIT
BIT
BIT
BIT
BIT
BIT
0B7H
0B6H
0B5H
0B4H
0B3H
0B2H
0B1H
0B0H
BIT
BIT
BIT
BIT
BIT
BIT
BIT
BIT
9FH
9EH
9DH
9CH
9BH
9AH
99H
98H
; 8052 Extensions
; IE
ET2
BIT
0ADH
; IP
PT2
BIT
0BDH
; P1
LOAD
BIT
92H
SCL
BIT
91H
DIN
BIT
90H
OUT_SHIM BIT
93H
; T2CON
TF2
BIT
EXF2
BIT
RCLK
BIT
TCLK
BIT
EXEN2
BIT
TR2
BIT
C_T2
BIT
CP_RL2 BIT
;$RESTORE
0CFH
0CEH
0CDH
0CCH
0CBH
0CAH
0C9H
0C8H
Документ
Категория
Программирование, Базы данных
Просмотров
21
Размер файла
560 Кб
Теги
лаба2отчёт
1/--страниц
Пожаловаться на содержимое документа