Проектирование устройства сбора информации на базе микроконтроллера МК51
Принцип действия устройства сбора информации на базе микроконтроллера МК51: индикация, "рабочий режим" и передача данных персонального компьютера. Алгоритм начального опроса датчиков. Электрическая принципиальная схема устройства, текст программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 21.10.2012 |
Размер файла | 102,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Оглавление
1. Принцип действия устройства
1.1 Индикация
1.2 Опрос датчиков
1.3 Начальный опрос датчиков
1.4 «Рабочий режим» и передача данных ПК
2. Схемотехника устройства
3. Текст программы
1. Принцип действия устройства
Алгоритм работы устройства.
Размещено на http://www.allbest.ru/
Рис. 1.1 - Алгоритм работы устройства
Функциональная схема устройства.
Размещено на http://www.allbest.ru/
Рис. 1.2 - Схема функциональная
МК - микроконтроллер МК51
УИ - устройство индикации
ПУ1(2) - преобразователи уровня
ПК - персональный компьютер
Д1…Д16 - датчики
Диаграмма состояний устройства.
Размещено на http://www.allbest.ru/
Рис. 1.3 - Диаграмма состояний устройства
Q1 - Начальный опрос датчиков,
Q2 - Рабочий режим,
Q3 - Сигнализация неисправности,
Q4 - Передача данных ПК,
x1 - опрос датчиков прошел успешно,
x2 - прерывание от ПК,
x3 - данные отправлены ПК,
x4 - наличие исправных датчиков.
1.1 Индикация
Устройство, разрабатываемое в рамках данного курсового проекта должно осуществлять опрос 16 датчиков и данные передавать в компьютер. Индикация является вспомогательной функцией и используется лишь для информирования оператора об ошибке. При этом устройство указывает номер ошибки на индикаторе, по которому легко можно будет определить причину неисправности. На рис. 1.3 приведена электрическая принципиальная схема индикации.
Учитывая то, что параллельные порты микроконтроллера не задействованы и количество разрядов мало (2 разряда), целесообразно использовать статический режим индикации. Для этого необходимо, во-первых, иметь данные для вывода (это делается программно) и, во-вторых, дешифрировать эти данные в вид семисегментного индикатора (это можно реализовать как программно, так и аппаратно). При динамической индикации в целях экономии ресурсов микроконтроллера имело бы смысл использовать дешифратор для вывода кода на индикатор, при статической же индикации его использование не оправдано. В качестве индикаторов использованы светодиодные индикаторы.
1.2 Опрос датчиков
Вследствие удаленности датчиков высокоскоростная передачи информации от датчиков невозможна, поэтому при выборе скорости передачи информации от датчиков следует исходить из следующих соображений:
1 - чем ниже скорость, тем выше помехозащищенность
2 - чем выше скорость тем меньше время опроса датчиков.
Выберем скорость передачи 4800 бот. При этом время передачи 1-го бита составляет 208 мкс. Опрос датчиков происходит следующим образом:
Порт настраивается на соответствующую скорость передачи и отключаются все прерывания.
В линию посылается адрес интересующего нас датчика (8 бит);
Принимается информация от датчика в виде 2х байтного числа со знаком в дополнительном коде (00100 соответствует 10.0, 31125 - 3112.5, 65534 - -0.1);
Информация сохраняется в памяти.
Ожидание запроса от ПК по последовательному каналу и в случае поступления прерывания передача данных ПК.
Повторение п.1 - п.5 для следующего датчика.
При выбранной скорости минимальное время опроса одного датчика составляет 5 мс. Датчики опрашиваются последовательно с временным интервалом между опросом каждого датчика 50 мс. Таким образом при количестве датчиков = 10 полный период опроса всех датчиков составляет 500 мс. По заданию количество датчиков равно 16 и, следовательно, период опроса составляет 800 мс. Устройство разрабатывается таким образом, чтобы количество датчиков могло было быть легко увеличено вплоть до 127. Однако при количестве больше 32 стоит увеличить скорость обмена данными до 9600 бот, а временной интервал между опросом каждого датчика уменьшить вдвое.
При включении питания устройство не имеет начальной информации с датчиков и должно получить ее как можно скорее, поэтому при первом опросе датчики опрашиваются без интервала между опросом каждого датчика и при этом устройство не реагирует ни на какие прерывания. Данное состояние устройство называется «Начальный опрос» и на диаграмме состояний устройства (рис. 1.3) обозначено как Q1. После начального опроса датчиков устройство переходит в следующее состояние, обозначенное на диаграмме состояний как Q2 и называемое «Рабочее».
1.3 Начальный опрос датчиков
На этапе начального опроса датчиков микроконтроллер производит опрос каждого датчика без интервала ожидания прерывания от ПК. На этом же этапе происходит выявление неподключенных к устройству датчиков. Проверка наличия датчика осуществляется следующим образом: посылается в линию номер датчика и в течение 6 мкс ожидается ответ; если по истечении этого времени датчик не ответит, запрос повторяется через каждые 6 мкс 5 раз. Если после 5 запроса датчик не откликается, устройство останавливает свою работу на 2 секунды, выводит на индикатор номер соответствующей неисправности и записывает в ячейки памяти соответствующие данному датчику FFFFh. После этого опрос датчиков продолжается. Если на этапе начального опроса не получен отклик ни от одного из датчиков, устройство все равно переходит в «рабочий режим», в котором попытки опроса этих датчиков будут продолжены.
Блок-схема алгоритма режима начального опроса датчиков представлена на рис. 1.4.
Размещено на http://www.allbest.ru/
Рис. 1.4 - Алгоритм начального опроса датчиков
1.4 «Рабочий режим» и передача данных ПК
Рабочий режим работу устройства отличается от начального опроса лишь тем, что после приема информации от каждого из датчиков микроконтроллер переходит в режим ожидания запроса ПК на передачу накопленных данных (см. рис. 1.5). Ожидание (пауза) длится 1 с. Если после запроса ответа от датчика не последовало, микроконтроллер пошлет повторный запрос. В случае если датчик не ответит и во второй раз, контроллер перейдет к следующему датчику, после ожидания запроса от ПК в течение 1 с. Если в течение паузы (1 с) ПК не подал запрос на пересылку информации, микроконтроллер начинает опрашивать очередной датчик, запрещая при этом прерывания от ПК. При этом просто запрещения прерывания недостаточно, т.к. может возникнуть ситуация, когда в момент обмена микроконтроллера с датчиком компьютер пришлет запрос на передачу информации. Это приведет к искажению данных. Для исключения такой ситуации в устройство введена микросхема 1533ЛИ1, обеспечивающая отключение ПК от микроконтроллера в момент опроса датчика. Управляется эта микросхема сигналами управления, посылаемыми контроллером с вывода параллельного порта P1, вывод 7 (см. рис. 2.1.).
В случае, когда ни один из датчиков в рабочем режиме не ответит, после опроса последнего, устройство перейдет в режим ожидания запроса ПК и будет находиться в нем в течение 2с. Если в это время ПК запросит данные, микроконтроллер передаст данные (FFFFh для всех датчиков), после чего снова начнет опрос датчиков.
После прихода прерывания по последовательному каналу микроконтроллер принимает отправленный ПК байт с номером. Если этот номер совпадает с тем номером, который значится в ПЗУ микроконтроллера, последний начинает передавать данные, полученные от датчиков. Закончив передавать данные, устройство вновь переходит в «рабочий режим» и остается в нем пока не получит очередное прерывание от ПК.
В силу простоты алгоритма подпрограммы передачи данных ПК, этот алгоритм в данной курсовой работе не приводится.
Рис. 1.5 - Алгоритм работы устройства в «рабочем режиме»
2. Схемотехника устройства
Принципиальная схема устройства представлена на рис. 2.1. Устройство состоит из 5-и основных частей:
Микроконтроллер,
Устройство индикации,
Устройство коммутации
Преобразователь сигнала ТТЛ-RS232,
Преобразователь сигнала ТТЛ-RS485
Рис. 2.1 - Схема принципиальная
В качестве микропроцессора выбираем микросхему AT89C4051, в корпусе имеющем 40 внешних выводов (DIP40). Для работы требуется один источник питания +5В. Через 2 порта ввода/вывода информации с уровнем ТТЛ микроконтроллер выводит код ошибки на светодиодные семисегментные индикаторы HCPL4506 с общим катодом. Микросхема имеет два вывода для подключения кварцевого резонатора, четыре вывода для сигналов, управляющих режимом работы МК и по восемь линий портов 2 и 3. Вывод Р3.0 является выводом RxD вывод P3.1 - TxD, остальные выводы портов не используются.
Максимально допустимые параметры:
- Максимально допустимый ток через вывод порта - 10 мА.
- Максимальный общий ток через все выводы - 71 мА.
Принимая падение напряжения на открытом переходе индикатора 1.5 В, а ток через каждый из выводов 7 мА, выберем резисторы.
Rи = (5-1.5)/7*10-3 = 500Ом.
Для обеспечения гальванической развязки ПК от микроконтроллера используется изолированный полный двунаправленный интерфейс RC - 232 - E со скоростью до 1 Mbit/s, входным током 16 мА, напряжением изоляции 2, 5 к V, в корпусе SO 8 (HCPL 0560). На рис.2.2 приведена рекомендуемая схема применения такого прибора. Выводы 6 и 8 этой микросхемы подключены соответственно ко входам R1Out и T1In микросхемы DS232A. Для обеспечения гальванической развязки датчиков (протокол RS485) от микроконтроллера используется точно такая же микросхема. Выводы 6 и 8 в этом случае подключены ко входам RO и DI соответственно микросхемы ISO485P.
Рис. 2.2 - Схема электрическая принципиальная
В качестве гальванически развязанного питания микросхем применяется DC/DC преобразователь 5В - 5В DCP020505P(в корпусе DIP14).
Преобразователь сигнала ТТЛ-RS232 собран на микросхеме DS232A фирмы Dallas Semicondactors. Преобразователь сигнала ТТЛ-RS485 собран на микросхеме ISO485P фирмы Burr Brown.
3. Текст программы
микроконтроллер датчик опрос информация
Thu Nov 20 2011 15:24 Page 1
2500 A.D. 8051 Macro Assembler - Version 4.02a
------------------------------------------------
Input Filename : kurs.asm
Output Filename : kurs.obj
1;Мкарос инициализации таймера 1
2;Vrem_m - время передачи 1 бита
3;=----------------------------------------
4 SerTime:MACROVrem_M
5 movTH1,#Vrem_M
6 movTL1,#Vrem_M
7 clrTF1
8 setbTR1
9 ENDM
10;=----------------------------------------
11 Time:MACROVrem_M
12 movTH0,#>Vrem_M
13 movTL0,#<Vrem_M
14 clrTF0
15 setbTR0
16 ENDM
17;=----------------------------------------
18 0087 Bit_Ind:RegP0.7;Bit_Ind - P0.7 сигнал
19 0097 Vkl_PCRegP1.7;Вкл/Откл ПК от линии
20
21 0020 NumDat:Reg20h;№ опрашиваемого датчика
22 0021 N_Ind:Reg21h;№ ошибки индикации
23 0022 Addr:Reg22h;адрес ячейки для хранения
24;данных с датчиков
25 0023 ChPovt:Reg23h;кол-во повторений опроса
26 0024 ChPovtMax:Reg24h;макс. число повторений
27 0025 DataReg25h;данные с датчика
28 0026 FonVrReg26h;время фоновой задачи
29
30 0005 ChPovtMaxNachEQU5;макс. число повторений
31 0002 ChPovtMaxWorkEQU2;опроса датчиков
32 0010 NDMax:EQU16;число датчиков
33 0020 Kol_Byte:EQUNDMax*2;число ячеек памяти
34 00FF ErrorEQUFFh; ошибка датчика
35 E890 Time_DogEQU-6000;время сторожевого таймера
36 3CB0 Time_PauseEQU-50000;время паузы м/д опросами
37 0028 Kol_PauseEQU40;время выдачи сигнала ошибки
38 0014 Ch_PauseEQU20;время ожидания запроса ПК
39 0000 Num_PSEQU0;№ станции для прерывания от ПК
40;=----------------------------------------
41;Обработка прерываний.
42 0000 ORG 0
43 0000 02 01 00 jmp Start
44
45;=----------------------------------------
46 000B ORG 0Bh;прерывание
47 000B C2 8C clrTR0;таймера T1
Thu Nov 20 2011 15:24 Page 2
48 000D A8 26 movR0,FonVr
49 000F 20 97 08 jbVkl_PC,$del
50 0012 C2 8D clrTF0
51 0014 12 01 72 callTimePr;если от сторожевого
52 0017 02 00 1D jmp$Ex
53 001A $del:
54 001A 12 01 62 callTimePC
55 $Ex:;продолжаем ждать
56 001D 32 reti
57;=----------------------------------------
58 0023 ORG 23h;прерывание от ПК
59 0023 C2 8C clrTR0
60 0025 12 02 80 callPoslPC
61 0028 D2 8C setbTR0
62 002A 32 reti
63
64;=----------------------------------------
65 0100 ORG 100h
66;Начало основной программы.
67 0100 Start:
68 0100 75 89 21 movTMOD,#21h;0-й Т во 1-м, 1-й Т во 2-м режиме
69 0103 53 87 7F anlPCON,#01111111b;делитель скорости на 2
70 0106 75 98 50 movSCON,#50h;8 бит, скорость от таймера
71 0109 75 A8 82 movIE,#10000010b;прерывание от таймера Т0
72 010C C2 97 clrVkl_PC; отключение ПК от линии
73 010E 75 26 14 movFonVr,#Ch_Pause; время фоновой задачи
74 0111 12 01 97 callNach_Opros
75 0114 75 20 00 movNumDat,#0;опрашиваем 0-й датчик
76 0117 75 24 02 movChPovtMax,#ChPovtMaxWork;макс. число повторений
77 011A 75 21 10 movN_Ind,#NDMax; начальное смещение кода ошибки
78 011D MetWork:
79 011D 75 21 FF movN_Ind,#FFh; если ошибок нет, на индикаторе FF
80 0120 12 02 3B callIndikac; вывод на индикатор FF
81 0123 12 01 F6 callWork
82 0126 75 A8 92 movIE,#10010010b;разрешаем прерывание от ПК и от Т0
83 0129 D2 BC setbPS; приоритет у ПК
84 012B D2 97 setbVkl_PC; подключение к линии
85;настройка посл. канала
86 012D 43 87 80 orlPCON,#10000000b;делитель скорости на 2 откл.
87 0130 SerTime0FFh;57600 бот
88 0130 75 8D FF movTH1,#0FFh
89 0133 75 8B FF movTL1,#0FFh
90 0136 C2 8F clrTF1
91 0138 D2 8E setbTR1
92 013A ENDM
93 013A 75 26 14 movFonVr,#Ch_Pause;время фоновой задачи
94 013D TimeTime_Pause; ожидание запроса ПК
95 013D 75 8C 3C movTH0,#>Time_Pause
96 0140 75 8A B0 movTL0,#<Time_Pause
97 0143 C2 8D clrTF0
98 0145 D2 8C setbTR0
99 0147 ENDM
100
101 0147 20 97 FD jbVkl_PC,$;фоновая задача
102
103 014A C2 8D clrTF0
104 014C C2 8C clrTR0
Thu Nov 20 2011 15:24 Page 3
105 014E 75 A8 82 movIE,#10000010b;запрещаем прерывание от ПК
106 0151 53 87 3F anlPCON,#0111111b;делитель скорости на 2 вкл.
107 0154 SerTime0FAh;4800 бот
108 0154 75 8D FA movTH1,#0FAh
109 0157 75 8B FA movTL1,#0FAh
110 015A C2 8F clrTF1
111 015C D2 8E setbTR1
112 015E
ENDM
113 015E A8 20 movR0,NumDat
114 0160 21 1D jmpMetWork;опрос следующего датчика
115
116;=----------------------------------------------
117;Список подпрограм.
118;=----------------------------------------------
119 TimePC:; Прерывание от таймера.
120 0162 TimeTime_Pause;ожидание запроса ПК
121 0162 75 8C 3C movTH0,#>Time_Pause
122 0165 75 8A B0 movTL0,#<Time_Pause
123 0168 C2 8D clrTF0
124 016A D2 8C setbTR0
125 016C ENDM
126 016C D5 26 02 djnzFonVr,$Ex
127 016F C2 97 clrVkl_PC;отключение ПК от линии
128 0171 $Ex:
129 0171 22 ret
130;=----------------------------------------------
131 TimePr:; Прерывание от таймера.
132 0172 C0 E0 pushA
133 0174 C0 D0 pushPSW
134 0176 75 25 FF movData,#Error;с-л ошибки
135 0179 E5 23 movA,ChPovt; проверка кол-ва
136 017B B5 24 03 cjneA,ChPovtMax,$Ex; лимит попыток исчерпан
137 017E 02 01 89 jmp$Ind; переход на индикацию ошибки
138 0181 $Ex
139 0181 43 98 01 orlSCON,#00000001;иммитация принятия байта
140 0184 D0 D0 popPSW
141 0186 D0 E0 popA
142 0188 22 ret
143 0189 $Ind:
144 0189 E5 20 movA,NumDat;вычисление
145 018B 25 21 addA,N_Ind;№ ошибки
146 018D F5 21 movN_Ind,A;для индикации
147 018F 12 02 3B callIndikac
148 0192 12 02 60 callSignal
149 0195 21 81 jmp$Ex
150;=----------------------------------------------
151 Nach_Opros:;подпрограмма начального опроса датчиков
152
153 0197 75 24 05 movChPovtMax,#ChPovtMaxNach; макс. число повторений
154 019A 75 20 00 movNumDat,#0;опрашиваем 0-й датчик
155 019D 75 21 FF movN_Ind,#FFh; если ошибок нет, на индикаторе FF
156 01A0 SerTime0FAh;4800 бот
157 01A0 75 8D FA movTH1,#0FAh
158 01A3 75 8B FA movTL1,#0FAh
159 01A6 C2 8F clrTF1
160 01A8 D2 8E setbTR1
161 01AA ENDM
Thu Nov 20 2011 15:24 Page 4
162 01AA MetNach:
163;попытка опроса
164 01AA 85 20 25 movData,NumDat;посылка в линию № датчика
165 01AD 12 02 76 callPosl;посылаем запрос на датчик
166;с номером NumDat
167 01B0 75 F0 02 movB,#2;вычисление адреса
168 01B3 A4 mulAB;для хранения данных
169 01B4 24 30 addA,#30h;и ожидание 5мс
170 01B6 F5 22 movAddr,A
171 01B8 TimeTime_Dog;запуск сторожевого таймера
172 01B8 75 8C E8 movTH0,#>Time_Dog
173 01BB 75 8A 90 movTL0,#<Time_Dog
174 01BE C2 8D clrTF0
175 01C0 D2 8C setbTR0
176 01C2 ENDM
177 01C2 12 02 AA callPriem; прием ст-го байта данных с датчика
178 01C5 E5 23 movA, ChPovt;проверка
179 01C7 B4 00 05 cjneA,#0,$Er;ответа датчика
180 01CA 05 20 incNumDat; следующий датчик
181 01CC 02 01 D7 jmp$D; датчик ответил
182 $Er:;не ответил
183 01CF B5 24 05 cjneA,ChPovtMax,$D; сколько раз
184 01D2 75 23 00 movChPovt,#0;если > максимума, обнуляем
185 01D5 05 20 incNumDat; следующий датчик
186 01D7 $D:
187 01D7 A8 22 movR0,Addr;вычисление адреса для
188 01D9 E5 25 movA,Data; записи полученного байта
189 01DB F6 mov@R0,A;сохранение ст-го байта
190 01DC B4 FF 03 cjneA,#Error,$M; был ли ответ датчика
191 01DF 02 01 E7 jmpPrNach
192 $M:;-был
193 01E2 12 02 AA callPriem; прием мл-го байта данных с датчика
194 01E5 C2 8C clrTR0;если байт принят,
;останавливаем таймер T0
195 PrNach:;-небыло
196 01E7 05 22 incAddr;вычисление
197 01E9 A8 22 movR0,Addr;адреса
198 01EB E5 25 movA,Data
199 01ED F6 mov@R0,A;сохранение мл-го байта данных с датчика
200 01EE A8 20 movR0,NumDat
201 01F0 B8 10 01 cjneR0,#NDMax,$Dal;пока не опросим все
202 01F3 22 ret
203 01F4 $Dal:
204 01F4 21 AA jmpMetNach;опрос следующего датчика
205
206;=----------------------------------------------
207 Work:;подпрограмма "Рабочего режима".
208
209;попытка опроса
210 01F6 85 20 25 movData,NumDat;посылка в линию № датчика
211 01F9 12 02 76 callPosl;посылаем запрос на датчик
212;с номером NumDat
213 01FC 75 F0 02 movB,#2;вычисление адреса
214 01FF A4 mulAB;для хранения данных
215 0200 24 30 addA,#30h;и ожидание 5мс
216 0202 F5 22 movAddr,A
217 0204 TimeTime_Dog;запуск сторожевого таймера
218 0204 75 8C E8 movTH0,#>Time_Dog
Thu Nov 20 2011 15:24 Page 5
219 0207 75 8A 90 movTL0,#<Time_Dog
220 020A C2 8D clrTF0
221 020C D2 8C setbTR0
222 020E ENDM
223 020E 12 02 AA callPriem; прием ст-го байта данных с датчика
224 0211 E5 23 movA,ChPovt; проверка
225 0213 B4 00 05 cjneA,#0,$Er;ответа датчика
226 0216 05 20 incNumDat; следующий датчик
227 0218 02 02 23 jmp$D; датчик ответил
228 $Er:;не ответил
229 021B B5 24 05 cjneA,ChPovtMax,$D; сколько раз
230 021E 75 23 00 movChPovt,#0;если > максимума, обнуляем
231 0221 05 20 incNumDat; следующий датчик
232 0223 $D:
233 0223 A8 22 movR0,Addr;вычисление адреса для
234 0225 E5 25 movA,Data; записи полученного байта
235 0227 F6 mov@R0,A;сохранение ст-го байта
236 0228 B4 FF 03 cjneA,#Error,$M; был ли ответ датчика
237 022B 02 02 33 jmpPrWork
238 $M:;-был
239 022E 12 02 AA callPriem; прием мл-го байта данных с датчика
240 0231 C2 8C clrTR0;если байт принят, останавливаем таймер
241 PrWork:; -небыло
242 0233 05 22 incAddr; вычисление
243 0235 A8 22 movR0,Addr;адреса
244 0237 E5 25 movA, Data
245 0239 F6 mov@R0,A; сохранение мл-го байта данных с датчика
246 023A 22 ret
247;=----------------------------------------------
248 Indikac:; Подпрограмма вывода на индикатор
249 023B C0 E0 pushA
250 023D C0 82 pushDPTR
251 023F C0 A8 pushIE
252 0241 75 A8 00 movIE,#0;запрет всех прерываний
253 0244 74 00 movA,#0
254 0246 90 02 C7 movDPTR,#Tabl_Ind;загрузка таблицы
255 0249 E5 21 movA,N_Ind; дешефрирование
256 024B 75 F0 10 movB,#10h;№ индикации
257 024E 84 divAB;в код семисегментного
258 024F 93 movcA,@A+DPTR;индикатора
259 0250 F5 80 movP0,A;P0 - старший байт
260 0252 E5 F0 movA,B
261 0254 93 movcA,@A+DPTR
262 0255 F5 90 movP1,A;P1 - младший байт
263 0257 D2 87 setbBit_Ind
264 0259 D0 A8 popIE
265 025B D0 82 popDPTR
266 025D D0 E0 popA
267 025F 22 ret
268;=----------------------------------------------
269 Signal:; Подпрограмма сигнализации ошибки
270 0260 78 28 movR0,#Kol_Pause;высвечиваем сигнал ошибки
271 $Wait:;заданное время
272 0262 TimeTime_Pause
273 0262 75 8C 3C movTH0,#>Time_Pause
274 0265 75 8A B0 movTL0,#<Time_Pause
275 0268 C2 8D clrTF0
Thu Nov 20 2011 15:24 Page 6
276 026A D2 8C setbTR0
277 026C ENDM
278 026C 30 8D FD jnbTF0,$
279 026F D8 F1 djnzR0,$Wait
280 0271 C2 8C clrTR0
281 0273 C2 8D clrTF0
282 0275 22 ret
283;=----------------------------------------------
284 Posl:; процедура отправки байта датчикам
285 0276 E5 25 movA,Data
286 0278 F5 99 movSBUF,A
287 027A 30 99 FD jnbTI,$
288 027D C2 99 clrTI
289 027F 22 ret
290;=----------------------------------------------
291 PoslPC:; процедура отправки байта ПК
292 0280 C0 E0 pushA
293 0282 53 98 FE anlSCON,#11111110b;иммитация непринятия байта
294 0285 E5 99 movA,SBUF; прием байта адреса
295 0287 B4 00 03 cjneA,#Num_PS,$Ex0;проверка на соответствие
296 028A 02 02 90 jmp $0
297 028D $Ex0:
298 028D 02 02 A7 jmp Ex
299 0290 $0:
300 0290 C0 20 pushNumDat
301 0292 75 20 00 movNumDat,#0
302 0295 $M:
303 0295 E5 20 movA,NumDat;вычисление адреса
304 0297 24 30 addA,#30h;где хранятся данные
305 0299 F8 movR0,A
306 029A 86 25 movData,@R0
307 029C 51 76 callPosl; отправка байт данных с датчиков
308 029E 05 20 incNumDat
309 02A0 E5 20 movA,NumDat
310 02A2 B4 20 F0 cjneA,#Kol_Byte,$M; пока не отправим все
311 02A5 D0 20 popNumDat
312 02A7 Ex:
313 02A7 D0 E0 popA
314 02A9 22 ret
315;=----------------------------------------------
316 Priem:; процедура приема байта
317 02AA 75 25 00 movData,#0;останавливаем таймер
318 02AD $M:
319 02AD 30 98 FD jnbRI,$M
320 02B0 C2 98 clrRI;если датчик ответил
321 02B2 C2 8C clrTR0;с 1-го раза, заносим
322 02B4 C2 8D clrTF0;принятые данные
323 02B6 05 23 inc ChPovt;в Data
324 02B8 A8 25 movR0,Data;если датчик не ответил,
325 02BA B8 FF 03 cjneR0,#Error,$0;в Data заносим FFh
326 02BD 02 02 C6 jmp $Ex0;если ответил не с первого
327 $0:;раза, заносим в Data принятые
328 02C0 85 99 25 movData,SBUF;данные и обнуляем ChPovt
329 02C3 75 23 00 movChPovt,#0
330 02C6 $Ex0:
331 02C6 22 ret
332;=----------------------------------------------
Thu Nov 20 2011 15:24 Page 7
333;таблица дешефрирования символов индикации.
334 02C7 3F 06 5B 4F 66 Tabl_Ind: db3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h
02CC 6D 7D 07
335 02CF 7F 6F 77 7C 39 db7Fh,6Fh,77h,7Ch,39h,5Eh,79h,71h
02D4 5E 79 71
Thu Nov 20 2011 15:24 Page 8
Defined Symbol Name Value References
23 Addr = 0022 170 187 196 197 216 233 242 243
18 Bit_Ind = 0087 263
Pre BSECT 0000
25 ChPovt = 0023 135 178 184 224 230 323 329
26 ChPovtMax = 0024 76 136 153 183 229
30 ChPovtMaxNach = 0005 153
31 ChPovtMaxWork = 0002 76
38 Ch_Pause = 0014 73 93
Pre CODE 0000
Pre DATA 0000
27 Data = 0025 134 164 188 198 210 234 244 285 306 317 324
328
34 Error = 00FF 134 190 236 325
312 Ex 02A7 298
28 FonVr = 0026 48 73 93 126
248 Indikac 023B 80 147
33 Kol_Byte = 0020 310
37 Kol_Pause = 0028 270
162 MetNach 01AA 204
78 MetWork 011D 114
151 Nach_Opros 0197 74
32 NDMax = 0010 33 77 201
21 NumDat = 0020 75 113 144 154 164 180 185 200 210 226 231
300 301 303 308 309 311
39 Num_PS = 0000 295
22 N_Ind = 0021 77 79 145 146 155 255
284 Posl 0276 165 211 307
291 PoslPC 0280 60
316 Priem 02AA 177 193 223 239
195 PrNach 01E7 191
241 PrWork 0233 237
Pre RSECT 0000
269 Signal 0260 148
67 Start 0100 43
334 Tabl_Ind 02C7 254
119 TimePC 0162 54
131 TimePr 0172 51
35 Time_Dog = E890 172 173 218 219
36 Time_Pause = 3CB0 95 96 121 122 273 274
19 Vkl_PC = 0097 49 72 84 101 127
207 Work 01F6 81
Lines Assembled : 335 Assembly Errors : 0
Размещено на Allbest.ru
Подобные документы
Особенности проектирования часов со звуковым сигналом с использованием однокристального микроконтроллера семейства МК51. Разработка функциональной схемы устройства. Функции, выполняемые клавиатурой. Разработка алгоритма работы и управляющей программы.
курсовая работа [460,5 K], добавлен 16.05.2013Проектирование схемы сбора информации со ста двадцати восьми датчиков на основе микроконтроллера. Разработка листинга программы для контроллера, обрабатывающей поступающие данные с накоплением их во Flash-памяти с учетом точного времени и текущей даты.
курсовая работа [891,8 K], добавлен 24.12.2012Описание области применения устройства релаксационного воздействия на человека "Лампа хорошего настроения". Выбор микроконтроллера устройства. Алгоритм функционирования программы, её тестирование. Правила и нормы охраны труда при работе с компьютером.
дипломная работа [5,8 M], добавлен 28.09.2015Анализ возможности разработки системы автоматизированного контроля на базе микроконтроллера МК51. Анализ структурной схемы МК51, портов ввода/вывода данных, возможности организации доступа к внешней памяти. Обзор системы команд МК51. Резидентная память.
курсовая работа [108,7 K], добавлен 15.01.2012Основные параметры устройства отображения информации. Обоснование выбора используемых ресурсов микроконтроллера и схемы включения. Разработка схемы алгоритма. Описание и отладка программы. Схема электрическая принципиальная и листинг трансляции программы.
курсовая работа [121,3 K], добавлен 12.12.2014Проектирование схемы, выполненной на основе однокристального микроконтроллера 51 серии для получения с 8 аналоговых входов информации о изменении их состояния с течением времени. Параметры устройства, описание элементов схемы, листинг программы.
курсовая работа [627,2 K], добавлен 24.12.2012Создание приемника команд RC5 для персонального компьютера на основе микроконтроллера ATmega8. Особенности написания файла прошивки и симулирование устройства. Порядок выполнения сборки собственной схемы и характеристика полученного микроконтроллера.
курсовая работа [2,0 M], добавлен 24.11.2013Клавиатура как основное устройство ввода данных. Устройства манипуляторного типа, их виды и характеристики. Принципы действия сканеров. Предназначение графических планшетов. Устройства вывода информации, виды мониторов. Внешние хранители информации.
реферат [1,2 M], добавлен 27.05.2012Анализ способов кодирования информации. Разработка устройства кодирования (кодера) информации методом Хемминга. Реализация кодера–декодера на базе ИМС К555ВЖ1. Разработка стенда контроля передаваемой информации, принципиальная схема устройства.
дипломная работа [602,9 K], добавлен 30.08.2010Разработка алгоритма работы устройства, описание выбора элементной базы и работы принципиальной схемы. Текст программы, инициализация указателя стека, структура системы и ресурсов микроконтроллера. Запись кодов при программировании данного устройства.
контрольная работа [18,4 K], добавлен 24.12.2010