- •Оглавление
- •Введение.
- •1 Выбор и обоснование основных технических решений.
- •1.1 Техническое задание
- •1.1 Источники информации
- •1.2 Приемники информации
- •1.2 Возможные варианты решения поставленной задачи, обоснования выбора
- •1.2.1 Выбор способа измерения температуры
- •1.2.2 Выбор устройства отображения информации
- •1.2.3 Выбор микроконтроллера
- •2 Структурная схема
- •2.1 Описание принципа действия и общий алгоритм работы
- •2.2 Блок-схема работы микроконтроллера
- •Алгоритм получения одного байта от датчика
- •Структура программы
- •Код программы
- •Технология отладки программы
- •Моделирование
- •7 Список литературы
Технология отладки программы
В качестве основной среды для написания кода программы и его отладки я использовал приложение MPLABIDE, являющимся стандартным средством разработки кода для микроконтроллеровPIC. Так как приложение имеет только встроенный компилятор ассемблерного кода, мне пришлось использовать внешний компилятор кода на языке Си.
Я использовал компилятор кода на языке Си HI-TECHCCompiler.
Для синхронизации приложения написания кода и компилятора при создании проекта в мастере проектов указал в качестве приложения компиляции HI-TECHCCompiler.
Так же в мастере была возможность выбора используемого микроконтроллера и настройки его начальной конфигурации. Например, указание частоты тактового генератора.
Ниже приведен фрагмент листинга программы, полученного на этапе компиляции
--------------------------------------------------------------------------------------------------------------
1128 ;; *************** function _ReadByte *****************
1129 ;; Defined at:
1130 ;; line 166 in file "E:\Thermometer Coorse\MPLAB IDE Project\thermometer.c"
1131 ;; Parameters: Size Location Type
1132 ;; None
1133 ;; Auto vars: Size Location Type
1134 ;; inputByte 1 3[COMMON] unsigned char
1135 ;; i 1 2[COMMON] unsigned char
1136 ;; value 1 1[COMMON] unsigned char
1137 ;; Return value: Size Location Type
1138 ;; 1 wreg unsigned char
1139 ;; Registers used:
1140 ;; wreg, status,2, status,0, pclath, cstack
1141 ;; Tracked objects:
1142 ;; On entry : 40/20
1143 ;; On exit : 60/0
1144 ;; Unchanged: FFF9F/0
1145 ;; Data sizes: COMMON BANK0 BANK1 BANK2
1146 ;; Params: 0 0 0 0
1147 ;; Locals: 3 0 0 0
1148 ;; Temps: 0 0 0 0
1149 ;; Totals: 3 0 0 0
1150 ;;Total ram usage: 3 bytes
1151 ;; Hardware stack levels used: 1
1152 ;; Hardware stack levels required when called: 1
1153 ;; This function calls:
1154 ;; _Delay10Microsecond
1155 ;; This function is called by:
1156 ;; _main
1157 ;; This function uses a non-reentrant model
1158 ;;
1159 06A4 _ReadByte:
1160
1161 ;thermometer.c: 167: unsigned char i;
1162 ;thermometer.c: 168: unsigned char inputByte;
1163 ;thermometer.c: 169: unsigned char value;
1164 ;thermometer.c: 170: for (i = 0; i < 8; i++)
1165
1166 ; Regs used in _ReadByte: [wreg+status,2+status,0+pclath+cstack]
1167 06A4 01F2 clrf ReadByte@i
1168 06A5 l1250:
1169
1170 ;thermometer.c: 171: {
1171 ;thermometer.c: 173: PORTA=0x00;
1172 06A5 1283 bcf 3,5 ;RP0=0, select bank0
1173 06A6 0185 clrf 5 ;volatile
1174
1175 ;thermometer.c: 174: TRISA=0xFD;
1176 06A7 30FD movlw 253
1177 06A8 1683 bsf 3,5 ;RP0=1, select bank1
1178 06A9 0085 movwf 5 ;volatile
1179
1180 ;thermometer.c: 175: TRISA=0xFF;
1181 06AA 30FF movlw 255
1182 06AB 0085 movwf 5 ;volatile
1183 06AC 0064 clrwdt ;#
1184 06AD 0000 nop ;#
1185 06AE 0000 nop ;#
1186
1187 ;thermometer.c: 184: value=PORTA;
1188 06AF 1283 bcf 3,5 ;RP0=0, select bank0
1189 06B0 0805 movf 5,w ;volatile
1190 06B1 00F1 movwf ReadByte@value
1191
1192 ;thermometer.c: 185: if (value & 0x03)
1193 06B2 3903 andlw 3
1194 06B3 1903 btfsc 3,2
1195 06B4 2EB7 goto l372
1196
1197 ;thermometer.c: 186: {
1198 ;thermometer.c: 188: inputByte = (inputByte >> 1) | 0x80;
1199 06B5 1403 setc
1200 06B6 2EB8 goto L17
1201 06B7 l372:
1202 ;thermometer.c: 189: }
1203
1204
1205 ;thermometer.c: 190: else
1206 ;thermometer.c: 191: {
1207 ;thermometer.c: 192: inputByte = inputByte >> 1;
1208 06B7 1003 clrc
1209 06B8 L17:
1210 06B8 0CF3 rrf ReadByte@inputByte,f
1211
1212 ;thermometer.c: 193: }
1213 ;thermometer.c: 194: Delay10Microsecond(6);
1214 06B9 3006 movlw 6
1215 06BA 2654 fcall _Delay10Microsecond
1216 06BB 0AF2 incf ReadByte@i,f
1217 06BC 3008 movlw 8
1218 06BD 0272 subwf ReadByte@i,w
1219 06BE 1C03 skipc
1220 06BF 2EA5 goto l1250
1221
1222 ;thermometer.c: 195: }
1223 ;thermometer.c: 196: return(inputByte);
1224 06C0 0873 movf ReadByte@inputByte,w
1225 06C1 0008 return
1226 06C2 __end_of_ReadByte:
1227
1228 psect text172
1229 06C2 __ptext172:
1230 ;; =============== function _ReadByte ends ============