Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мой курсач.doc
Скачиваний:
14
Добавлен:
31.03.2015
Размер:
1.27 Mб
Скачать

8 Программная часть устройства

Блок-схема основного цикла представлена на рисунке 1.5:

Рисунок 1.5 – блок-схема основного цикла

Блок-схема процедуры обработки значения от АЦП представлена на рисунке 1.6:

Рисунок 1.6 – блок-схема процедуры обработки значения от АЦП

Блок-схема процедуры перевода двоичного кода в BCD код представлена на рисунке 1.7:

Рисунок 1.7 – блок-схема процедуры перевода двоичного кода в BCD код

Блок-схема для процедуры индикации представлена на рисунке 1.8:

Рисунок 1.8 – блок- схема для процедуры индикации

Выводы и заключение

Список использованной литературы

  1. Аккумулятор

http://www.akbplus.ru/AKB-info/auto-accumulator.html Дата обращения: 10.05.2010

  1. Боборыкин А.А., Липовецкий Г.П., Литвинский Г.В. и др. Однокристальные микроЭВМ. М.: МИКАП, 1994.

  2. Однокристальные микроконтроллеры

http://www.avalon.ru/pps/mc/courses/About/?CourseID=448

Дата обращения: 15.05.2010

  1. Электрический счетчик / Материал из Викизнание — свободной

свободной энциклопедии. – URL:

http:// www.wikiznanie.ru/Электрический_счетчик

Дата обращения: 15.05.2010

  1. Интегральные микросхемы: Справочник. -Мн: Москва, 1996

  2. Семисегментный индикатор / Материал из Википедии — свободной энциклопедии. – URL:

http://ru.wikipedia.org/wiki/Семисегментный_индикатор

Дата обращения: 5.05.2010

7. Мискросхема АТ89С2051

http://chipinfo.ru/literature/radio/199903/p32_34.html

Дата обращения: 7.05.2010

  1. Мискросхема АТ89С2051

http://easyelectronics.ru/osnovy-na-palcax-chast-2.html

Дата обращения: 7.05.2010

  1. Аверченков О.Е. Основы схемотехники однокристальной ВМ х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

32