- •Федеральное агентство по образованию
- •Филиал государственного образовательного учреждения высшего профессионального образования «московский энергетический институт (технический университет)» в г. Смоленске
- •Кафедра вычислительной техники
- •Пояснительная записка
- •Список сокращений
- •Техническое задание
- •Введение
- •1 Обзор литературы, методов, схемных решений
- •2 Выбор и обоснование структурной схемы
- •3 Описание принципа действия устройства по структурной схеме
- •4 Временные диаграммы работы
- •5 Выбор, обоснование и расчет отдельных узлов
- •6 Описание полной принципиальной схемы
- •7 Оценка нормируемых параметров
- •8 Программная часть устройства
- •Список использованной литературы
- •Приложение 1
- •Приложение 2
- •Приложение 3
8 Программная часть устройства
Блок-схема основного цикла представлена на рисунке 1.5:
Рисунок 1.5 – блок-схема основного цикла
Блок-схема процедуры обработки значения от АЦП представлена на рисунке 1.6:
Рисунок 1.6 – блок-схема процедуры обработки значения от АЦП
Блок-схема процедуры перевода двоичного кода в BCD код представлена на рисунке 1.7:
Рисунок 1.7 – блок-схема процедуры перевода двоичного кода в BCD код
Блок-схема для процедуры индикации представлена на рисунке 1.8:
Рисунок 1.8 – блок- схема для процедуры индикации
Выводы и заключение
Список использованной литературы
Аккумулятор
http://www.akbplus.ru/AKB-info/auto-accumulator.html Дата обращения: 10.05.2010
Боборыкин А.А., Липовецкий Г.П., Литвинский Г.В. и др. Однокристальные микроЭВМ. М.: МИКАП, 1994.
Однокристальные микроконтроллеры
http://www.avalon.ru/pps/mc/courses/About/?CourseID=448
Дата обращения: 15.05.2010
Электрический счетчик / Материал из Викизнание — свободной
свободной энциклопедии. – URL:
http:// www.wikiznanie.ru/Электрический_счетчик
Дата обращения: 15.05.2010
Интегральные микросхемы: Справочник. -Мн: Москва, 1996
Семисегментный индикатор / Материал из Википедии — свободной энциклопедии. – URL:
http://ru.wikipedia.org/wiki/Семисегментный_индикатор
Дата обращения: 5.05.2010
7. Мискросхема АТ89С2051
http://chipinfo.ru/literature/radio/199903/p32_34.html
Дата обращения: 7.05.2010
Мискросхема АТ89С2051
http://easyelectronics.ru/osnovy-na-palcax-chast-2.html
Дата обращения: 7.05.2010
Аверченков О.Е. Основы схемотехники однокристальной ВМ х51: учебно методическое пособие по курсу «Схемотехника ЭВМ» / О.Е. Аверченков. – Смоленск: РИО филиала ГОУВПО «МЭИ (ТУ)» в г. Смоленске, 2009.
10. Аверченков О.Е. Основы схемотехники аналого-цифровых устройств: учебно-методическое пособие по курсу «Схемотехника ЭВМ» / О.Е. Аверченков. – Смоленск: РИО филиала ГОУВПО «МЭИ (ТУ)» в г. Смоленске, 2010.
11. Динамическая индикация
http://chernykh.net/content/view/660/.
Дата обращения: 15.05.2010
12. ЦИФРОВЫЕ интегральные микросхемы: Справочник. -Мн: Беларусь, 1991.
Приложение 1
Полная принципиальная схема
Приложение 2
Приложение 3
Текст программы
; курсовая работу на тему - Счетчик ампер-часов для автомобильного аккумулятора
.list on ; эта директива включает листинг (протокол) процесса ассемблирования
;******** именуем константы и внешние выводы
mTik equ 10000 ; длительность импульса в мкс
mVyvod reg P3 ; имена внешних выводов
mBitRD reg P3.5
mBitBusy reg P3.7
;***************** ; распределяем ячейки ОЗУ
.ABSOLUTE
.DATA
.ORG 20h
mCount10ms ds 1 ; Счетчик для счета времени по 10 мс.
mSumh ds 1 ; 1 байт под битовые переменные
mSuml ds 1
mKod ds 1
mCountZn ds 1 ; счетчик знакомест
mBufInd ds 2 ; массив из 2х байт - 2 цифры числа
mEndVar_BeginStack ds 1 ; Первая ячейка стека.
;*****************
;************** векторы прерываний
.RELATIVE
.CODE
.ORG 0
Jmp mStart
.ORG 3 ; внешнее прерывание 0
RetI
.ORG 0bh ; прерывание по таймеру 0
Jmp mIntT0
.ORG 13h ; внешнее прерывание 1
RetI
.ORG 1bh ; прерывание по таймеру 1
RetI
.ORG 23h ; прерывание по посл. порту
RetI
;**************
;************** начало программы
.ORG 30h
mStart:
Mov SP, #(mEndVar_BeginStack-1) ; начальный указатель стека
Mov mCount10ms, #0 ; обнулить счетчик
Mov TMod, #00100001b ; таймер0 - на 16 бит.
Mov TH0, #>(-mTik)
Mov TL0, #<(-mTik)
SetB TR0;
SetB ET0 ; разрешить прерывание от таймера0
SetB EA ; разрешить работу контроллера прерываний
;************** основной цикл программы
mMainLoop:
Mov mSumh,#0 ; обнуляем переменные
Mov mSuml,#0
Mov TH0, #>(-mTik)
Mov TL0, #<(-mTik)
SetB TR0 ; запуск таймера
mLabel3
Mov A, mCount10ms ; заносим в аккумулятор переменную mCount10ms
CJNE A, #100, mLabel3 ; Переменная mCount10ms равна 100?(т.е. прошла 1 секунда?)
Clr TF0
Clr TR0 ; останов таймера
Mov mCount10ms, #0 ; обнуляем mCount10ms
Mov A, mSuml ; записываем в аккумулятор младшую часть суммы
RR A ; сдвигаем на 4 бита, то есть делим на 16
RR A
RR A
RR A
Mov mSuml,A ; полученное значение переписываем из аккумулятора
Mov A,mSumh ; в аккумулятор записываем старшую часть суммы
Swap A ; меняем местами тетрады
ANL A,#11110000b ; в аккумуляторе нужная сумма
Add A,mSuml
Call mBufInc ; A - на индикацию
Jmp mMainLoop
;************** процедура прерывания по переполнению таймера 0
mIntT0:
Push PSW ; Сохраняем регистры.
Push Acc
Clr TF0
Clr TR0
my10:
JNB mBitBusy, my10 ; ждем готовности АЦП
Clr mBitRD ; формируем сигнал чтения
Mov mKod, P1 ; читаем данные
SetB mBitRD ; запускаем АЦП
JB mKod.7, mLabel ; старший бит равен нулю?
Mov A,mKod ; записываем в аккумулятор данные
ORL A,#01111111b ; инвертируем код
Add A,#1 ; прибавляем единицу
Jmp mLabel2 ; переходим на метку
mLabel: ; старший бит не равен нулю
Mov A,mKod ; записываем в аккумулятор данные
ORL A,#1000000b ; инвертируем старший бит
mLabel2:
Add A,mSuml ; процедура сложения
Mov mSuml,A
jnc mLabel4
Mov A,mSumh
Inc A
Mov mSumh,A
mLabel4:
Mov TH0, #>(-mTik)
Mov TL0, #<(-mTik)
SetB TR0
Inc mCount10ms ; Счет времени.
Call mIndZn ; процедура обновления индикаторов
Pop Acc ; Восстанавливаем регистры
Pop PSW ; в обратном порядке.
RetI
;**************
;индикация
mBufInc:
Mov B,#10 ; в B заносим 10
DIV AB ; деление
Mov mBufInd+1,A ; в mBufInd+1 число десятков
Mov mBufInd,B ; в mBufInd число единиц
Ret
;*****************
;*****************подпрограмма для индикации
mIndZn:
Mov mCountZn, #0 ;обнуляем счетчик знакомест
mIndLoop:
Mov A, mCountZn ;заносим адрес
Add A, #mBufInd ;очередного знака
Mov R0, A ;в R0 для косвенной индикации
Mov A, @R0 ;извлекаем информацию в А
Swap A ;меняем местами тетрады
Orl A, mCountZn ;объединяем знакоместа и информацию
Swap A ;обратный обмен
Mov mVyvod,A ;выводим число в нужный индикатор
Inc mCountZn ;увеличиваем счетчик знакомест
Mov A, mCountZn ;заносим счетчик знакомест в А
CJNE A, #2, mIndLoop ;проверяем условие выхода из цикла
Ret
;****************конец подпрограммы
END