Проектирование устройства сбора информации на базе микроконтроллера МК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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.