10) внутренняя память данных емкостью 128 байт, в которой размещается от одного до четырех банков рабочих регистров R0-R7, область стека и побитово адресуемая область памяти;
11) внешняя память данных емкостью до 64 кбайт;
12) два программируемых 16-разрядных таймера-счетчика;
13) программируемый двухнаправленный последовательный порт ввода-вывода и соответствующие устройства управления;
14) четыре 8-разрядных двухнаправленных параллельных порта ввода-вывода;
15) двухуровневая приоритетная система прерываний.
Предлагвется использовать микроконтроллер MCS-8051 следующим образом:
Порт Р0 и Р2 будут работать с данными, поступающими с АЦП.
Порт Р1 будет настраивать мультиплексор и АЦП.
Калибровка системы будет производиться по сигналу с компьютера.
Калибровка, также, будет осуществляться по прерыванию INT0.
С помощью RxD и TxD будет осуществляться связь с компьютером.
Рис. 2.6.1. Внутренняя структура микроконтроллера INTEL MCS-8051.
Рис. 2.6. Микроконтроллер INTEL MCS-8051
2.7 Передача информации через последовательный порт.
Рис. 2.7.
На рисунке 2.7. изображена электрическая принципиальная схема передачи информации от микроконтроллера в последовательный порт компьютера посредством комплексного преобразования напряжений с помощью драйвера последовательного интерфйса RS232A.
Главная функция устройства RS232A - согласование напряжения между устройствами. Дело в том, что напряжения логической единицы и нуля для микроконтроллера и компьютерного COM - порта различаются по уровням и полярности напряжений.
Табл.2.5.
Логический Уровень | Уровень напряжения для МК | Уровень напряжения для COM |
0 | 0 ... 0.4 | +12V |
1 | 4.75 ... 5.25 | - 12V |
Напряжение питания для RS232A - 5V.
Напряжение питания преобразовывается до уровня ±12V. Затем в зависимости от того, какой логический уровень пришел на вход драйвера, ключи подключают к выходу напряжение необходимой полярности в соответствии с таблицей 2.7. Также, драйвер RS232A выполняет некоторые дополнительные функции - защищта от статического электричества, гальваническая развязка и т.д.
Следуя руководству по эксплуатации данного драйвера необходимо, чтобы номиналы всех конденсаторов С1 - С4 были равны. Причем для RS232A С1 - С4 равно 0.1 mF.
Конденсатор Сst выбираем 10 mF. Он служит для сглаживания случайных скачков напряжения питания RS232A.
2.8 Настройка контроллера на работу с последовательным портом
В данном микроконтроллере INTEL MCS-8051 есть специальные выводы RxD и TxD - линии, соответственно ввода и вывода информации, представленной в последовательном коде. Прием или передача информации программой осуществляется с помощью регистра SBUF.
Архитектура контроллера следующая. При передаче информации через последовательный порт в регистре SCON устанавливается флаг Т1,а при приеме информации - флаг R1. В регистре РCON находится бит SMOD, установка которого означает работу с удвоением частоты.
Для установки скорости передачи по последовательному порту необходимо записать в регистр счетчика TH1 и TL1 число N, определяемое по следующей формуле:
В этой формуле Fosc - частота резонатора (кварца)
SMOD - бит удвоения частоты
BR - Baud Rate, скорость передачи данных.
В нашем случае мы работаем без удвоения частоты, т.е. SMOD=0.
Частота резонатора Fosc = 8 MHz.
Скорость передачи данных BR = 300 Бод.
Формат посылки изображен на рисунке 2.8.
Рис. 2.8.
3. Программирование микроконтроллера
Программа для микроконтроллера состоит из трех основных блоков:
1. Предварительная установка. Запускается по RESET или при включении питания микроконтроллера.
2. Измерение веса (считывания кодов с АЦП, обрабатывающего последовательно 8 аналоговых каналов). Запускается по сигналу INT0, соответствующему сигналу готовности данных на выходе микросхемы аналого-цифрового преобразователя.
3. Вывод информации на компьютер. Запускается по вызову из подпрограмм измерения веса или обработки последовательного порта (по получению управляющего сигнала с компьютера).
4. Калибровка. Считывание кодов с АЦП, обрабатывающего последовательно 8 аналоговых каналов. Причем полученный код считается соответствующим нулевому весу. Данные значения будут вычитаться в последствии из кода, полученного при измерении веса вагона. Запускается по сигналу INT1, соответствующему сигналу готовности данных на выходе микросхемы аналого-цифрового преобразователя.
3.1 Блок-схема предустановок (настроек)
3.2 Блок-схема измерения веса
3.3 Блок-схема вывода информации о весе в компьютер
Примечание: здесь DWORD - начальный адрес двух ячеек памяти, в которых содержится младший и старший байты кода, соответствующего измеренному весу для канала(в данном случае - для первого).
3.4 Блок-схема автоматической калибровки
Необходимо отметить, что подпрограмма калибровки запускается только по управляющему сигналу от компьютера. Дело в том, что если организовать запуск по включению, может оказаться, что на весах уже стоит вагон. При этом, на выходе устройства будет выдаваться код, соответствующий нулевому весу. Т.к. мы имеем дело с тяжелыми вагонами, может оказаться накладным откатывать вагон только для калибровки.
Калибровка должна производиться при отсутствии грузов (вагона и т.п.) на измерительной площадке.
3.5 Управление микроконтроллером с компьютера
При передаче на микроконтроллер управляющего слова, следующим же тактом происходит обработка прерывания, связанного с последовательным портом (у последовательного порта - наивысший приоритет). Далее происходит распознавание управляющего слова и действие согласно нему (см. табл.3.5).
Таблица 3.5.
Управляющее слово | Действия, производимые устройством по УС |
00111100 | Обнуление ячеек памяти, содержащих смещение и результат преобразования. |
11110000 | Преобразование и передача в компьютер кода, соответствующего весу. |
00001111 | Передача в компьютер кода, соответствующего весу измеряемого вагона. |
11111111 | Калибровка устройства. |
При необходимости, этот список можно дополнить. Всего возможно запрограммировать 256 действий.
3.5 Программа на ассемблере для микроконтроллера
;R0-@ адрес получаемого кода 32-47
;R1-@ адрес смещения 52-67
;R4-счетчик задержки для АЦП
;R5-MUX 1-8
;R6-# младший байт кода 32,34-46
;R7-# старший байт кода 33,35-47
;PSW.1 - программируемый бит: 0 - взвешивание, 1 - калибровка.
;скорость передачи 300 бод, - задаётся ТС1
ORG 00H;начальный адрес трансляции
SJMP BEGIN
ORG 03H;прерывание по INT0
JMP MAIN
ORG 23H;прерывание по последоват. порту
JMP UAPP
ORG 30H;программа инициализации
BEGIN:
MOV IE, #10010001B;разрешение прерываний по последоват.
;порту и по INT0
MOV IP, #00010000B;установка высшего приоритета у прерыв. по ПП
MOV TMOD, #00100000B;режим с перезагр TH1 в TL1
MOV TCON, #00000000B;обнуление битов управления ТС1
MOV PCON, #00000000B;работа МК без удвоения частоты
MOV SCON, #0101000B;настройка UAPP
MOV P0, #0FFH;настройка портов P0 и P2 на ввод
MOV P2, #0FFH
MOV TH1, #187;загрузка и запуск таймера
MOV TL1, #187
SETB TCON.6
MOV R5, #15;очистка смещений
MOV R1, #52
CALL CLEAR
CLR PSW.1;активация подпрограммы взвешивания
STOP:JMPSTOP ;зацикливание
;____________________________________________________________
;____________________________________________________________
;Nucleus of the Program
MAIN:
MOV R5, #0
MOV R0, #32;начальный адрес ячейки памяти
;для получаемого кода
MOV R1, #52;начальный адрес смещений
MOV P1, #11111000B;0 - настройка на вывод
MOV P1, R5;выбор канала 1 (MUX).
RETM:MOV P0, #0FFH;прием текущего значения
MOV R6, P0;кода с АЦП. "1"-линия настроена
MOV P2, #0FFH;на ввод
MOV R7, P2;в R6-младший байт кода,R7-старший
JNB PSW.1, MAIN0
MOV A, R6;запись полученных кодов в область смещений
MOV @R1, A;младший байт
INC R1
MOV A, R7
MOV @R1, A;старший байт
JMP COMMON
MAIN0:
CLR PSW.7
MOV A, R6
SUBB A, @R1 ;коррекция OffSet для младшего байта
MOV @R0, A;запись младшего байта
INC R0;вычисление адреса старшего байта
INC R1
MOV A, R7
SUBB A, @R1 ;коррекция OffSet для старшего байта
MOV @R0, A ;запись старшего байта
COMMON:
;подготовка к следующему циклу
INC R0;вычисление нового адреса младшего байта
INC R1
INC R5;вычисление адреса канала MUX
CLR PSW.7
MOV A, R5;проверка -> адрес канала > Last(8).
SUBB A, #8
JNZ GoOn
JB PSW.1, KALIB
ACALL OUT;вызов подпрограммы вывода инф. на ЭВМ
;и реинициализации управл. регистров.
KALIB:
CLR PSW.1
RETI
GoOn:
MOV P1, #11111000B;0 - настройка на вывод
MOV P1, R5;0 - 2 линии порта P1 - управляют MUX
MOV R4,#20 ;небольшая задержка для АЦП
DAC1:DJNZ R4, DAC1
JMP RETM
;End Nucleus of the Program
;_____________________________________________________________
;_____________________________________________________________
;Вывод полученного веса в компьютер через последовательный порт
OUT:
MOV R6, #0;временно - R6-мл. результат
MOV R7, #0 ;R7-ст. результат
;R5-счетчик
MOV R5, #8
MOV R0, #32
SUMM:
MOV A, @R0;суммирование младшего байта