Автор: Пользователь скрыл имя, 02 Марта 2013 в 19:22, курсовая работа
В последние годы в микроэлектронике бурное развитие получило направление, связанное с выпуском однокристальных микроконтроллеров, которые предназначены для "интеллектуализации" оборудования различного назначения. ОЭВМ представляют собой приборы, конструктивно выполненные в виде БИС и включающие в себя все составные части микроЭВМ: микропроцессор, память программ и память данных, а также программируемые интерфейсные схемы для связи с внешней средой. Использование микроконтроллеров в системах различного назначения обеспечивает достижение исключительно высоких показателей эффективности при низкой стоимости. К настоящему времени более двух третей мирового рынка микропроцессорных средств составляют именно однокристальные ЭВМ.
введение
обзор методов решения поставленной задачи
разработка функциональной схемы прибора
разработка принципиальной схемы устройства
разработка ПО
заключение
литература
При сопряжении МК со стандартным последовательным интерфейсом необходимо решать следующие проблемы [1]:
На рис. 3.14 приведена схема сопряжения МК51 с интерфейсом RS-232c. Согласование уровней выполняется с помощью микросхемы DD1 КР559ИП20 (прием) и микросхемы DD2 КР559ИП19 (передача), специально разработанных для этой цели. При этом потребуются дополнительные источники электропитания напряжением +12 и -12 В. В схеме используется стандартный разъем DB9S (розетка). Сигналы RxD - принимаемые данные (от компьютера), TxD - передаваемые данные (в компьютер).
Рисунок 3.15- Схема сопряжения МК с интерфейсом RS-232c
Основная программа | ||
ORG 000H |
; начальный адрес | |
JMP BEGIN |
||
ORG 100H |
||
BEGIN: |
CLR P1.0 |
; запуск АЦП |
WAIT: |
JNB P1.1, WAIT |
; переход, если данные не готовы |
MOVX A, #00010000B |
;ввод данных с АЦП | |
MOV 30H, A |
; данные из АЦП в ячейке 30Н ОЗУ | |
SETB P1.0 |
; гашение АЦП | |
ACALL SPEED |
; вызов п/п вычисления скорости | |
ACALL VOLUME |
; вызов п/п вычисления расхода | |
ACALL AMOUNT |
; вызов п/п вычисления времени | |
ACALL VOLUME ALL SETB P3.0 |
; вызов п/п вычисления накопленного расхода ; установить сигнал DTR | |
NOP |
||
NOP |
||
CLR P3.0 |
; снять сигнал DTR | |
SETB EA |
; разрешение прерывания | |
SETB ЕХ1 |
||
SETB ЕХ0 |
||
ACALL DELAY1 |
; п/п задержки на 1 минуту | |
JMP BEGIN |
; цикл | |
; Подпрограмма перекодировки
из двоично-десятичного в | ||
ORG 40H |
||
TABLECOD: |
DB 3FH |
; "0" |
DB 06H |
; "1" | |
DB 5BH |
; "2" | |
DB 4FH |
; "3" | |
DB 66H |
; "4" | |
DB 6DH |
; "5" | |
DB 7DH |
; "6" | |
DB 87H |
; "7" | |
DB 7FH |
; "8" | |
DB 6FH |
; "9" | |
; Подпрограмма преобразования данных с АЦП в значение уровня жидкости. ; Входной параметр: ячейка 30Н – последние данные с АЦП ; Выходные параметры: ячейки 50Н, 51Н, 52Н, 53Н – соответственно сотни, ; десятки, единицы, десятые значения уровня | ||
SPEED: |
MOV A, 30H |
; в (А) данные АЦП в двоичном коде |
MOV B, #156 |
; (В)←156 множитель | |
MUL AB |
; (В)(А) ←(А)•(В) | |
MOV R7, A |
; (R7) ← (А) Мл.Б. произведения | |
XCH A, B |
; (А)↔(В) | |
MOV R6, A |
; (R6) ← (А) Ст.Б. произведения | |
ACALL PREOBR2-210 |
; вызов п/п преобразования | |
MOV 50H, R3 |
; по адресу 50Н количество сотен | |
MOV A, R4 |
; (А)← (R4) | |
SWAP A |
; обмен тетрад в аккумуляторе | |
ANL A, 00001111B |
; (А)← (А)&0FH | |
MOV 51H, A |
; по адресу 51Н количество десятков | |
MOV A, R4 |
; (А)← (R4) | |
ANL A, 00001111B |
; (А)← (А)&0FH | |
MOV 52H, A |
; по адресу 52Н количество единиц | |
MOV A, R5 |
; (А)← (R5) | |
SWAP A |
; обмен тетрад в аккумуляторе | |
ANL A, 00001111B |
; (А)← (А)&0FH | |
MOV 53H, A |
; по адресу 53Н количество десятых | |
RET |
||
; Подпрограмма преобразования данных с АЦП в значение объёма. ; Входной параметр: ячейка 30Н – последние данные с АЦП. | ||
; Выходные параметры: ячейки 55Н, 56Н, 57Н, 58Н–соответственно десятки, | ||
; единицы, десятые, сотые | ||
VOLUME: |
MOV A, 30H |
; в (А) данные АЦП в двоичном коде |
MOV B, #59 |
; (В)←59 множитель | |
MUL AB |
; (В)(А) ←(А)•(В) | |
MOV R7, A |
; (R7) ← (А) Мл.Б. произведения | |
XCH A, B |
; (А)↔(В) | |
MOV R6, A |
; (R6) ← (А) Ст.Б. произведения | |
ACALL PREOBR2-210 |
; вызов п/п преобразования | |
MOV 55H, R3 |
; по адресу 55Н количество десятков | |
MOV A, R4 |
; (А)← (R4) | |
SWAP A |
; обмен тетрад в аккумуляторе | |
ANL A, 00001111B |
; (А)← (А)&0FH | |
MOV 56H, A |
; по адресу 56Н количество единиц | |
MOV A, R4 |
; (А)← (R4) | |
ANL A, 00001111B |
; (А)← (А)&0FH | |
MOV 57H, A |
; по адресу 57Н количество десятых | |
MOV A, R5 |
; (А)← (R5) | |
SWAP A |
; обмен тетрад в аккумуляторе | |
ANL A, 00001111B |
; (А)← (А)&0FH | |
MOV 58H, A |
; по адресу 58Н количество сотых | |
RET |
||
; Подпрограмма вычисления значения количества ; Выходные параметры: ячейка 5АН – десятки часов, ячейка 5ВН – единицы часов | ||
QUANTITY: |
MOV A, 30H |
; в (А) данные АЦП в двоичном коде |
MOV B, #16 |
; (В)←156 множитель | |
MUL AB |
; (В)(А) ←(А)•(В) | |
MOV R7, A |
; (R7) ← (А) Мл.Б. произведения | |
XCH A, B |
; (А)↔(В) | |
MOV R6, A |
; (R6) ← (А) Ст.Б. произведения | |
ACALL PREOBR2-210 |
; вызов п/п преобразования | |
MOV 50H, R3 |
; по адресу 50Н количество сотен | |
MOV A, R4 |
; (А)← (R4) | |
SWAP A |
; обмен тетрад в аккумуляторе | |
ANL A, 00001111B |
; (А)← (А)&0FH | |
MOV 51H, A |
; по адресу 51Н количество десятков | |
MOV A, R4 |
; (А)← (R4) | |
ANL A, 00001111B |
; (А)← (А)&0FH | |
MOV 52H, A |
; по адресу 52Н количество единиц | |
MOV A, R5 |
; (А)← (R5) | |
SWAP A |
; обмен тетрад в аккумуляторе | |
ANL A, 00001111B |
; (А)← (А)&0FH | |
MOV 53H, A |
; по адресу 53Н количество десятых | |
RET |
||
; Подпрограмма преобразования двоичного целого беззнакового числа формата 16 | ||
; в двоично-десятичное число формата 4х4 | ||
; Входные параметры: R6 – Ст.Б., R7 – Мл.Б. | ||
; Выходные параметры: R3 – Ст.Б., R4 – Ср.Б., R5 – Мл.Б. | ||
; обнуление текущей суммы | ||
PREOBR2-210: |
CLR A |
|
MOV R4, A |
||
MOV R5, A |
||
MOV A, R6 |
||
MOV R1, A |
||
MOV A, R7 |
||
MOV R2, A |
||
MOV R0, #16H |
; счетчик циклов | |
CLR A |
||
; сдвиг двоичного числа влево | ||
CYCLE: |
XCH A, R4 |
|
XCH R1, A |
||
XCH R4, A |
||
XCH A, R5 |
||
XCH R2, A |
||
XCH R5, A |
||
MOV A, R5 |
||
ADD A, R5 |
||
MOV R5, A |
||
MOV A, R4 |
||
ADDC A, R4 |
||
XCH A, R4 |
||
XCH R1, A |
||
XCH R4, A |
||
XCH A, R5 |
||
XCH R2, A |
||
XCH R5, A |
||
; двоично-десятичное удвоение суммы с учетом переноса | ||
MOV A, R5 |
||
ADDC A, R5 |
||
DA A |
||
MOV R5, A |
||
MOV A, R4 |
||
ADDC A, R4 |
||
DA A |
||
MOV R4, A |
||
MOV A, R7 |
||
ADDC A, R7 |
||
DA A |
||
MOV R7, A |
||
; проверка конца цикла | ||
DJNZ R0, CYCLE |
||
MOV A, R7 |
||
MOV R3, A |
||
RET |
||
; Подпрограмма задержки на 1 минуту | ||
DELAY1: |
MOV R7, #00H |
; обнулить счетчик переполнения |
MOV R6, #00H |
; обнулить счетчик переполнения | |
SETB EA |
; общее разрешение прерывания | |
SETB ET0 |
; разрешение прерывания от Т/С0 | |
MOV TMOD, #01H |
; режим 1 Т/С0 | |
MOV TL0, #0B0H |
||
MOV TH0, #3CH |
; загрузка числа | |
SETB TR0 |
; запуск Т/С0 | |
LOOP: |
CJNE R6, #60, LOOP |
; переход при (R6)≠60 |
RETI |
||
ORG 000BH |
; вектор прерывания | |
CLR TR0 |
; остановить Т/С0 | |
CLR TF0 |
; сбросить TF0 | |
INC R7 |
; инкремент | |
JMP MET |
||
ORG 0030Н |
||
MET: |
CJNE R7, #20, AGAIN |
; переход при (R7)≠20 |
MOV R7, #00H |
; обнуление | |
INC R6 |
; инкремент | |
RETI |
||
AGAIN: |
MOV TL0, #0B0H |
|
MOV TH0, #3CH |
; загрузка числа | |
MOV TR0 |
; запуск Т/С0 | |
RETI |
||
; Подпрограмма обработки прерывания по входу INT0 | ||
ORG 0003H |
; вектор прерывания | |
INT: |
CLR ES |
; запрет прерываний от УАПП |
MOV SCON, #42H |
; режим УАПП | |
CLR TR1 |
; останов Т/С1 | |
MOV R0, #50H |
; адрес пересылаемых данных | |
ACALL USTAN |
; вызов п/п | |
RET |
||
USTAN: |
MOV TMOD, #20H |
; режим 2 Т/С1 |
MOV TH1, #0FAH |
; загрузка числа | |
SETB TR1 |
; запуск Т/С1 | |
PROV: |
MOV A, @R0 |
|
SPOUT: |
JNB TI, SPOUT |
; ожидание готовности передатчика |
CLR TI |
; сброс TI | |
INC R0 |
; инкремент | |
MOV SBUF, A |
; пересылка символа | |
CJNE R0, #5CH, PROV |
; все переслали? | |
RET |
||
; Подпрограмма обработки прерывания по входу INT1 | ||
ORG 0013H |
; вектор прерывания | |
MOV A, 40H |
; команда чтения FIFO | |
MOV P0, A |
||
MOV A, P1 |
; в (А) код нажатой клавиши | |
RLC A |
; сдвиг | |
RLC A |
; сдвиг | |
RLC A |
; сдвиг | |
JB C, SP |
; переход, если перенос | |
RRC |
; сдвиг | |
JB C, VL |
; переход, если перенос | |
RRC |
; сдвиг | |
JB C, QNT |
; переход, если перенос | |
SP: |
ACALL SP_OUT |
; вызов п/п |
RET |
||
VL: |
ACALL VL_OUT |
; вызов п/п |
RET |
||
QNT: |
ACALL QNT_OUT |
; вызов п/п |
RET |
||
; Подпрограмма вывода на дисплей значения скорости | ||
SP_OUT: |
SETB P1.5 |
;зажигание светодиода |
MOV R2, #00H |
;адрес 1-ого индикатора | |
MOV R0, #50H |
; (R0)←50Н | |
SETB P3.7 |
||
AGN: |
MOV A, @R0 |
|
MOV A, R1 |
||
MOVX @R2,A |
||
MOV A,R2 |
||
RL A |
||
MOV R2,A |
||
INC R0 |
; инкремент | |
CJNE R0, #54H, AGN |
; все выведено? | |
RET |
||
CLR P3.7 |
||
; Подпрограмма вывода на дисплей значения объёма | ||
VL_OUT: |
SETB P1.6 |
;зажигание светодиода |
MOV R2, #00H |
;адрес 1-ого индикатора | |
MOV R0, #55H |
; (R0)←56Н | |
SETB P3.7 |
||
AGN1: |
MOV A, @R0 |
|
MOV A, R1 |
||
MOVX @R2,A |
||
MOV A,R2 |
||
RL A |
||
MOV R2,A |
||
INC R0 |
; инкремент | |
CJNE R0, #59H, AGN1 |
; все выведено? | |
RET |
||
CLR P3.7 |
||
; Подпрограмма вывода на дисплей значения времени | ||
QNT_OUT: |
SETB P1.7 |
;зажигание светодиода |
MOV R2, #00H |
;адрес 1-ого индикатора | |
MOV R0, #5AH |
; (R0)←5АН | |
SETB P3.7 |
||
AGN2: |
MOV A, @R0 |
|
MOV A, R1 |
||
MOVX @R2,A |
||
MOV A,R2 |
||
RL A |
||
MOV R2,A |
||
INC R0 |
; инкремент | |
CJNE R0, #5CH,AGN2 |
; все выведено? | |
RET |
||
CLR P3.7 |
В результате курсового
проекта был разработан измерительный
преобразователь для
Список использованной литературы
КиИТ.ИИТ.609332 |
Лист | |||||
Изм. |
Лист |
№ докум. |
Подп. |
Дата |
Информация о работе Расходомер на основе электромагнитного датчика расхода