9zip.ru - технологии для людей
9zip.ru Инструкции Программа связи с цифровыми термодатчиками DS1820

Интерфейс с цифровыми датчиками имеющими интерфейс связи 1-wire (однопроводная линия) фирмы Dallas Semiconductor Corp., в частности, с датчиками DS1820. Интерфейс включает в себя приём/передачу байтов по каналу 1-wire, алгоритм подсчета циклической контрольной суммы CRC8, алгоритм поиска ID подключенных к линии датчиков.
Передача измерений в синхронный порт ADSP.

;Ver 0.85 - 10/02/97 (C) Alexander Trush
;

; Изменённый алгоритма работы с датчиками (введена диагностика и TIMEOUT'ы)
; Также пересмотрены диаграммы работы с датчиками и введена возможность работы
; c кварцами на 4000/6144/8000 кГц
; Введена поддержка WDT и сбрасывание ADSP, если последний не принимает
; данные в течении 3 сек

;
; Список выдаваемых ошибок:
;
; `Et` - TIMEOUT приёма бита при поиске следующего датчика
; `Ez` - ID=0 (возможно большая ёмкость линии и считываются в нули)
; `Ei` - ошибка CRC найденного ID датчика
; `En` - нет присоединённых датчиков или сбой алгоритма поиска следующего
; датчика (возможно обрыв линии)
;
; `ET` - TIMEOUT приёма бита при чтении данных с датчика
; `ER` - TIMEOUT при чтении готовности с датчиков (возможно линия замкнута на
; землю)
; `EC` - ошибка CRC на данных прочитаных с датчика

; Только вот осталось не ясным, почему если не обрабатывать ситуацию `Ez`,
; то после паузы в ~7 сек выдаются на хост все нули и происходит подвисание

LIST P=16c84

INCLUDE "16C84.H"
INCLUDE "SUPPLE.MA"

; FREQ - константа определяющая частоту кварца у PIC1684 в кГц (макс.8000 кГц)
FREQ equ 4000

if FREQ=8000
KKK equ 4
endif
if FREQ=6144
KKK equ 3
endif
if FREQ=4000
KKK equ 2
endif


TEMPL equ 0ch ; Резервных два байта
TEMPH equ 0dh

deviceNum equ 0eh

i equ 0fh
j equ 10h
k equ 11h
new_k equ 12h

temp equ 13h
CRC_ACCUM equ 14h
fFIRST equ 15h
;
sensor_data equ 16h
temperature equ sensor_data+0
temper_sign equ sensor_data+1
CountPerC equ sensor_data+7
CountRemain equ sensor_data+6
;
ID_ACC equ sensor_data+9
delay_var equ ID_ACC+8; Переменная для задержек
TIMEOUT equ delay_var+1; Флажок показывающий, что DS1820 неснял 0
; в течении TSLOT
COUNT_LOW equ TIMEOUT+1
COUNT_MID equ COUNT_LOW+1
COUNT_HIGH equ COUNT_MID+1
W_TEMP equ COUNT_HIGH+1

VAR_L equ W_TEMP+1
VAR_M equ VAR_L+1
VAR_H equ VAR_M+1

ORG 0
B Start_Prog
DATA "OTD"

ORG 4
; Общий обработчик прерываний
; (здесь считается что прерывания только от таймера)
; написан так, чтобы не изменялся регистр статуса

BCF INTCON,T0IF; Снять флаг переполнения таймера

INCFSZ COUNT_HIGH ; Используем, чтобы флажки не изменялись
DECFSZ COUNT_HIGH ; COUNT_HIGH не может быть равным -1, поэтому
GOTO INT_L1 ; если ==0, переход не выполняется
INT_L0 RETFIE

INT_L1
CLRWDT ; Сбрасываем сторожевой таймер

DECFSZ COUNT_LOW
GOTO INT_L0
DECFSZ COUNT_MID
GOTO INT_L0

MOVWF W_TEMP ; Сохранить W
MOVLW 0x4B+1
MOVWF COUNT_LOW
MOVLW 0x4C+1
MOVWF COUNT_MID
DECFSZ COUNT_HIGH ; Используем, чтобы флажки не изменялись
NOP ; Для случая, когда COUNT_HIGH равен 1

SWAPF W_TEMP,F ; Восстановить W
SWAPF W_TEMP,W

RETFIE

DATA "Al.Trush (C)1997"
;-----------------------------------------------------------------------------
INI_WDT
BCF STATUS,RP0 ; Банк 0
CLRF TMR0 ; Сброс таймера
BSF STATUS,RP0 ; Банк 1
CLRWDT ; Сброс сторожевого таймера и прескалера
MOVLW B'10001111'; Прескалер подключить к WDT, установить в 1:128
MOVWF OPTION_REG
BCF STATUS,RP0 ; Банк 0
MOVLW B'10100000';
MOVWF INTCON ; Разрешение прерывания от таймера

RELOAD_TMR0
MOVLW 0x4B+1 ; Задание суммарного коэф. деления 4*256*0x4C4B*KKK
MOVWF COUNT_LOW
MOVLW 0x4C+1
MOVWF COUNT_MID
MOVLW KKK
MOVWF COUNT_HIGH

RETURN
;-----------------------------------------------------------------------------
CRC_CALC ; Подпрограмма вычисления циклической контрольной суммы
; Вход: FSR - адрес блока W - размер
; Выход: W - результат, флаг Z==1 если CRC==0
MOVWF j ; Используются временные переменные:i,j,temp,CRC_ACCUM
CLRF CRC_ACCUM
CRCC_L1
LOAD i,8
MOVF INDF, W
MOVWF temp
; Циклический контрольный код вычисляется следующим образом:
; - производиться операция "исключающее или" между младшим битом накопителя
; и очередным битом;
; - полученный результат вталкивается в накопитель справа;
; - если втолкнули 1 то дополнительно инвертируем биты 3-ий и 2-ой
CRCC_L2
RRF temp ; Берём очередной бит, начиная с младшего
RRF CRC_ACCUM ; Сохраняем новый бит CRC

MOVLW b'10000000' ; Если выходящий бит из накопителя =1, то
SKPNC ; инвертируем новый бит в накопителе
XORWF CRC_ACCUM

MOVLW b'00001100' ; Маска для битов 3 и 2
BTFSC CRC_ACCUM,7
XORWF CRC_ACCUM

DECFSZ i ; Байт закончился?
GOTO CRCC_L2
INCF FSR
DECFSZ j ; Блок закончился?
GOTO CRCC_L1

MOVF CRC_ACCUM, W; Возвращаем CRC в W и устанавливаем флаг Z
RETURN

;-----------------------------------------------------------------------------
DELAY MACRO N_CYCL ; Макрос выполняет задержку в N_CYCL циклов
; процессора.
; Используемые переменные W,delay_var
; Флаг переноса не изменяется!
if N_CYCL>750
ERROR!!! Макрос может использоваться для задержек максимум в 750 циклов
EXITM
endif
if N_CYCL>6
MOVLW (((N_CYCL)-1)/3);
MOVWF delay_var
DECFSZ delay_var
GOTO $-1
if (((N_CYCL)-1)%3)==2
GOTO $+1
endif
if (((N_CYCL)-1)%3)==1
NOP
endif
else
if (N_CYCL)==6
GOTO $+1
endif
if (N_CYCL)>=4
GOTO $+1
endif
if (N_CYCL)>=2
GOTO $+1
endif
if (N_CYCL)%2==1
NOP
endif
endif
ENDM
;---------------------------------------------------------------------
DATA_PORT equ PORTB; Используемый порт для передачи данных
CNTR_PORT equ PORTA; Порт в котором расположены сигналы управления
FL0 EQU 0 ; Сигнал начало кадра
IRQE EQU 2 ; Сигнал прерывания ADSP
RES81 EQU 3 ; Сигнал сброса на ADSP
;---------------------------------------------------------------------
INI_TOADSP
BSF CNTR_PORT,IRQE ; IRQE=1
BSF STATUS,RP0
CLRF DATA_PORT ; Все линии порта данных на вывод
BSF CNTR_PORT,FL0 ; Настройка FL0 на ввод
BCF CNTR_PORT,IRQE ; Настройка IRQE на вывод
BCF STATUS, RP0

RETURN

;---------------------------------------------------
TO_ADSP_TEMPL
LOAD FSR,TEMPL
TO_ADSP
; Подпрограмма передачи слова к ADSP
; Вход: FSR - адрес слова для передачи
; Выход: нет
; Используемые переменные: W
;--
BTFSC CNTR_PORT,FL0 ; ??? FL0==0
GOTO TOAD_W1
TOAD_R1
MOVF INDF, W ; Выдаём младший байт
MOVWF DATA_PORT

BCF CNTR_PORT,IRQE ; IRQE: ---\_/---
INCF FSR ; Готовимся выдать старший байт
BSF CNTR_PORT,IRQE ;

BTFSS CNTR_PORT,FL0 ; ??? FL0==1
GOTO TOAD_W2
TOAD_R2
MOVF INDF, W ; Выдаём старший байт
MOVWF DATA_PORT

BCF CNTR_PORT,IRQE ; IRQE: ---\_/---
DECF FSR ; Должен восстановить FSR
BSF CNTR_PORT,IRQE ;
RETURN


TOAD_W1 LOAD VAR_H,KKK ; Ожидание FL0==0 в течении 3 сек
TOAD_D3 LOAD VAR_M,130+1
LOAD VAR_L,79; Задержка (3 + (5*L-1) + 1279*M)*H командных циклов
TOAD_D1
BTFSS CNTR_PORT,FL0
GOTO TOAD_R1

DECFSZ VAR_L
GOTO TOAD_D1
DECFSZ VAR_M
GOTO TOAD_D1

DECFSZ VAR_H
GOTO TOAD_D3
GOTO $ ; Зависаем, WDT нас разбудит и ADSP...

TOAD_W2 LOAD VAR_H,KKK ; Ожидание FL0==1 в течении 3 сек
TOAD_D4 LOAD VAR_M,130+1
LOAD VAR_L,79; Задержка (3 + (5*L-1) + 1279*M)*H командных циклов
TOAD_D2
BTFSC CNTR_PORT,FL0
GOTO TOAD_R2

DECFSZ VAR_L
GOTO TOAD_D2
DECFSZ VAR_M
GOTO TOAD_D2

DECFSZ VAR_H
GOTO TOAD_D4
GOTO $ ; Зависаем, WDT нас разбудит и ADSP...
;---------------------------------------------------
RESET_ADSP
BCF CNTR_PORT,RES81 ; RES81=0
BSF STATUS, RP0
BCF CNTR_PORT,RES81 ; Настройка IRQE на вывод
BCF STATUS, RP0

LOAD delay_var,250 ; Задержка 10*250=2500 циклов процессора

RES_A1 BCF CNTR_PORT,RES81 ; RES81=0NOP
GOTO $+1
GOTO $+1
GOTO $+1
DECFSZ delay_var
GOTO RES_A1

BSF CNTR_PORT,RES81 ; RES81=1
DELAY 651
RETURN

; -------- Работа с цифровыми термометрами DS1820 ---------
; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

; Команды адресации датчиков DS1820
cREAD_ROM equ 0x33 ; Чтение ID номера датчика и его выбор
cMATCH_ROM equ 0x55 ; Выбор датчика по его ID номеру
cSEARCH_ROM equ 0xf0 ; Поиск ID номеров датчиков
cALARM_SEARCH equ 0xec ; Поиск ID номеров датчиков у которых температура
; вышла за установленные границы
cSKIP_ROM equ 0xcc ; Выбор всех датчиков DS1820 в сети

; Команды работы с памятью и управления для датчиков DS1820
cWRITE_PAD equ 0x4e ; Запись в ОЗУ датчика с адреса 2
cREAD_PAD equ 0xbe ; Чтения ОЗУ датчика с адреса 0
cCOPY_PAD equ 0x48 ; Программирование EEPROM датчика из 2 и 3 ячейки
cCONVERT_T equ 0x44 ; Запуск преобразования температуры
cRECALL_E2 equ 0xb8 ; Чтения EEPROM датчика в 2 и 3 ячейку ОЗУ
cREAD_POWERTYP equ 0xb4 ; Проверка типа питания у датчика

WIRE1REG equ PORTA
WIRE1BIT equ 4

INIT_DSNET
BSF WIRE1REG,WIRE1BIT ; Master Tx 1 -> Wire
BSF STATUS, RP0
BCF WIRE1REG,WIRE1BIT ; Настройка WIRE на вывод
BCF STATUS, RP0
RETURN

DS_RESET
BCF WIRE1REG,WIRE1BIT
MOVLW (400*KKK)/9; Master Tx "reset pulse" 800 мкс
MOVWF delay_var
DSR_L1 GOTO $+1
GOTO $+1
GOTO $+1
DECFSZ delay_var
GOTO DSR_L1

BSF WIRE1REG,WIRE1BIT
MOVLW (240*KKK)/9; Master Rx 480 мкс
MOVWF delay_var
DSR_L2 GOTO $+1
GOTO $+1
GOTO $+1
DECFSZ delay_var
GOTO DSR_L2
RETURN

WR_WIRE
; Подпрограмма передачи байта по 1-Wire интерфейсу
; Вход: W - байт для передачи
; Выход: нет
; Используемые переменные: W,i,temp

MOVWF temp ; Байт для вывода сохраняем в temp
MOVLW 8 ; Будем передавать 8 бит данных
MOVWF i ; начиная с младшего
WRW_L1
DIS_INT ; Запрет прерывания
BCF WIRE1REG,WIRE1BIT ; Сбросить линию
NOP ; Чтобы на частоте PIC 8.0MHz интервал был 2 мкс
RRF temp
SKPNC
BSF WIRE1REG,WIRE1BIT ; Отпустить линию раньше, если передаём 1

ENA_INT ; Разрешение прерывания
DELAY KKK*40-6 ; TSLOT=80 мкс
BSF WIRE1REG,WIRE1BIT ; Отпустить линию

DECFSZ i ; Это последний бит?
GOTO WRW_L1

RETURN
;----------------------------------
RD_1BIT MACRO ; Макрос выполняет чтение одного бита из 1-wire шины в перенос

DIS_INT ; Запрет прерывания

BCF WIRE1REG,WIRE1BIT ; Сформировать импульс запроса передачи бита
DELAY KKK-1 ; Длительность 2 мкс
BSF WIRE1REG,WIRE1BIT

DELAY 6*KKK-2 ; через 14 мкс после начала импульса запроса...
CLRC
BTFSC WIRE1REG,WIRE1BIT ; ...считать бит через 14мкс
SETC

ENA_INT ; Разрешение прерывания
DELAY 29*KKK-5 ; через 70 мкс, ожидать в течении 50 мкс "1"

MOVLW 5*KKK ; (5*KKK)*5*Tкоманды=50 мкс
MOVWF delay_var

BTFSC WIRE1REG,WIRE1BIT ; Если "1" - выходим из макроса
GOTO $+5
DECFSZ delay_var
GOTO $-3
MOVLW 1 ; "0" больше 50 мкс - линия замкнута на землю
MOVWF TIMEOUT
ENDM

RDN1BIT MACRO ; Макрос выполняет чтение одного бита из 1-wire шины с инверсией
; в бит переноса

DIS_INT ; Запрет прерывания

BCF WIRE1REG,WIRE1BIT ; Сформировать импульс запроса передачи бита
DELAY KKK-1 ; Длительность 2 мкс
BSF WIRE1REG,WIRE1BIT

DELAY 6*KKK-2 ; через 14 мкс после начала импульса запроса...
CLRC
BTFSS WIRE1REG,WIRE1BIT ; ...считать бит с инверсией через 14мкс
SETC

ENA_INT ; Разрешение прерывания
DELAY 29*KKK-5 ; через 70 мкс, ожидать в течении 50 мкс "1"

MOVLW 5*KKK ; (5*KKK)*5*Tкоманды=50 мкс
MOVWF delay_var

BTFSC WIRE1REG,WIRE1BIT ; Если "1" - выходим из макроса
GOTO $+5
DECFSZ delay_var
GOTO $-3
MOVLW 1 ; "0" больше 50 мкс - линия замкнута на землю
MOVWF TIMEOUT
ENDM
;-----------------------------
RD_WIRE
; Подпрограмма приёма байта по 1-wire интерфейсу
; Вход: нет
; Выход: W - принятый байт
; Используемые переменные: i,temp

CLRF TIMEOUT
MOVLW 8 ; Будем принимать 8 бит
MOVWF i
RDW_L2
RD_1BIT ; Чтение одного бита из 1-wire шины в перенос
RRF temp

DECFSZ i ; Это последний бит?
GOTO RDW_L2

MOVF temp, W ; Принятый байт в W
RETURN

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;
; Функция производит поиск очередного устройства на шине 1-wire.
;
; Предполагается, что в ID_ACC записан ID-номер устройства определенного
; на предыдущем этапе (при первом запуске опроса 0L) и переменная new_k
; указывает на номер последнее бита где обнаружена коллизия (сперва также 0)
;
pos EQU temp

SearchROMnext

LOAD pos,64
MOVF new_k, W
MOVWF k
CLRF new_k ; pos=N; k=new_k; new_k=0;

CLRF TIMEOUT
SCH_L0
RD_1BIT
SKPNC
GOTO SCH_L1
RDN1BIT
SKPC
GOTO SCH_L4

MOVF k,W
SUBWF pos,W
SKPZ
GOTO SCH_L2
SETC
GOTO SCH_L4
SCH_L1
RDN1BIT
SKPNC
GOTO SCH_L4
; Readed "11" - wrong (with Carry=0)
; Возникла ситуация когда нет устройств, которые бы ответили, об этом
; необходимо оповещать... (но и возможно алгоритм опроса дал сбой)
LOAD TEMPH,'E'; `En` - NotConnect
LOAD TEMPL,'n'
GOTO SCH_ER
SCH_L2
SKPC
GOTO SCH_L3
RRF ID_ACC+0,W
SKPNC
GOTO SCH_L4
SCH_L3
MOVF pos,W
MOVWF new_k
SCH_L4
RRF ID_ACC+7
RRF ID_ACC+6
RRF ID_ACC+5
RRF ID_ACC+4
RRF ID_ACC+3
RRF ID_ACC+2
RRF ID_ACC+1
RRF ID_ACC+0

MOVF TIMEOUT,W
SKPNZ
GOTO SCH_OK

LOAD TEMPH,'E'; `Et` - timeout in detect adress
LOAD TEMPL,'t'
GOTO SCH_ER
SCH_OK
BCF WIRE1REG,WIRE1BIT ; Сбросить линию
NOP ; Выдержать 2 мкс минимум (на 8 МГц)
RLF ID_ACC+7,W ; Выдать бит адреса который был принят
SKPNC
BSF WIRE1REG,WIRE1BIT ; Отпустить линию раньше, если передаём 1
DELAY 40*KKK-5 ; 80 мкс цикл TSLOT
BSF WIRE1REG,WIRE1BIT ; Отпустить линию

DECFSZ pos
GOTO SCH_L0

LOAD k,8
LOAD FSR,ID_ACC
SCH_ZT
MOVF INDF,W
SKPZ
GOTO SCH_NZ
INCF FSR
DECFSZ k
GOTO SCH_ZT

LOAD TEMPH,'E'; `Ez` - ID=0
LOAD TEMPL,'z'
GOTO SCH_ER

SCH_NZ
LOAD FSR,ID_ACC; Проверка корректности ID
MOVLW 8
CALL CRC_CALC

SETC ; Если ошибка CRC, то выход без установки Carry.
LOAD TEMPH,'E'; `Ei` - crc ID error
LOAD TEMPL,'i' ; Здесь устанавливаем тип ошибки, но он
; принимается только если при выходе Carry=0
SKPZ
SCH_ER CLRC ; Carry=0 - Error

; Carry=1 - Ok Carry=0 - Error
RETURN

;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Start_Prog
CALL INI_WDT
CALL INI_TOADSP
CALL RESET_ADSP
CALL INIT_DSNET


Main_LOOP
CALL RELOAD_TMR0; Погладим собачку... ;-)
CLRF TIMEOUT ; Вначале считаем, что нет никаких TIMEOUT'ов

CALL DS_RESET
MOVLW cSKIP_ROM ; обращение к всем датчикам
CALL WR_WIRE
MOVLW cCONVERT_T ; Запуск преобразования
CALL WR_WIRE

; Перед считыванием готовности, задержка в 1.0 сек

LOAD i,KKK
DELAY_L3 LOAD j,200
DELAY_L2 LOAD k,227
DELAY_L1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
DECFSZ k ; Задержка T=i*(j*(k*11+2)+2)+2 = ~1 000 000 мкс
GOTO DELAY_L1
DECFSZ j
GOTO DELAY_L2
DECFSZ i
GOTO DELAY_L3

wait_begin
LOAD i,240 ; Ждет готовности датчиков в течении 4..7 сек
wait_0 LOAD j,240 ; 240*240*(TSLOT = 70..120мкс)=4..7 сек
wait_ready
RD_1BIT ; Ожидание готовности с датчиков, "1" - готовы
SKPNC
GOTO ready_ok

MOVF TIMEOUT,W ; Прочитали то прочитали, а всё ли нормально?
SKPNZ
GOTO wait_next
LOAD TEMPH,'E'; `ER`-TIMEOUT при чтении готовности датчиков
LOAD TEMPL,'R'
CALL TO_ADSP_TEMPL ; выдаём ошибку на ADSP и начинаем
GOTO Main_LOOP ; всё заново...
wait_next
DECFSZ j
GOTO wait_ready
DECFSZ i
GOTO wait_0
ready_ok

; Инициализация переменных для корректной работы функции поиска установленных
; устройств на шине 1-wire
CLRF ID_ACC+0
CLRF ID_ACC+1
CLRF ID_ACC+2
CLRF ID_ACC+3
CLRF ID_ACC+4
CLRF ID_ACC+5
CLRF ID_ACC+6
CLRF ID_ACC+7
CLRF new_k
MOVLW 255; -1
MOVWF fFIRST; Сейчас пробуем найти первый датчик

CLRF deviceNum
;________
Main_LOOP2
CALL DS_RESET

MOVLW cSEARCH_ROM ; поиск датчиков
CALL WR_WIRE

CALL SearchROMnext
SKPNC
GOTO Main_l0
; Если возникла ошибка при поиске датчика, то
CALL TO_ADSP_TEMPL ; выдаём ошибку на ADSP и начинаем всё заново...
GOTO Main_LOOP
Main_l0

MOVLW cREAD_PAD ; Чтение ОЗУ датчика
CALL WR_WIRE

LOAD k,9
LOAD FSR,sensor_data
main_l1 ; Чтение 9 байт с датчика
CALL RD_WIRE
MOVWF INDF
INCF FSR
DECFSZ k
GOTO main_l1

MOVF TIMEOUT,W ; Прочитали, то прочитали, а всё ли нормально?
SKPNZ
GOTO main_l2
LOAD TEMPH,'E'; `ET` - TIMEOUT при чтении данных с датчика
LOAD TEMPL,'T'
CALL TO_ADSP_TEMPL ; выдаём ошибку на ADSP и начинаем всё заново...
GOTO Main_LOOP
main_l2

LOAD FSR,sensor_data
MOVLW 9
CALL CRC_CALC
SKPNZ
GOTO main_l3

LOAD TEMPH,'E'; `EC` - CRC error на причитаных данных с датчика
LOAD TEMPL,'C'
CALL TO_ADSP_TEMPL ; выдаём ошибку на ADSP и начинаем всё заново...
GOTO Main_LOOP

main_l3
INCF fFIRST
SKPZ
GOTO MMM_1

LOAD TEMPH,'T'; "TR"
LOAD TEMPL,'R'
GOTO MMM_2

MMM_1 DECF fFIRST ; Уменьшаем, чтобы "TR" выдавался только раз на блок
LOAD TEMPH,'t'; "tr"
LOAD TEMPL,'r'

MMM_2 CALL TO_ADSP_TEMPL

LOAD k,4 ; Печать ID датчика в обратном порядке
LOAD FSR,ID_ACC+6
main_l234
CALL TO_ADSP

DECF FSR
DECF FSR
DECFSZ k
GOTO main_l234

LOAD FSR,temperature ; Выдать температуру и остатки
CALL TO_ADSP
LOAD FSR,CountRemain
CALL TO_ADSP
LOAD TEMPH,'-'; "--"
LOAD TEMPL,'-'
CALL TO_ADSP_TEMPL

INCF new_k
DECFSZ new_k
GOTO Main_LOOP2


LOAD TEMPH,'O'; "Ok"
LOAD TEMPL,'k'
CALL TO_ADSP_TEMPL

B Main_LOOP
END


10 нравится? 7


01.02.2015 © 9zip.ru
Авторские права охраняет Роскомнадзор

Понравилась статья?
Леопольд говорит:
поделись с друзьями!

Хочешь почитать ещё про инструкции? Вот что наиболее популярно на этой неделе:
Советы по доработкам усилителя Амфитон
Резонансные усилители, управляемые напряжением и током
Триодный усилитель 6Н7С и 6Н8С



Есть вопросы, комментарии? Напиши:

Имя
Комментарий
Длина текста:
число с картинки
Правила прочитал(а)
Как вставить картинку в свой комментарий?

Пользовательские теги: калькулятор для ds1820 ds1820 перепрограмирование [ Что это? ]

Дальше в разделе Инструкции: Описание работы схемы центрифуги, Электродвигатель питается от сети переменного тока напряжением 220 В частотой 50 Гц. Под крышкой центрифуги установлен выключатель, блокирующий включение двигателя при открытой крышке. Установкой требуемой выдержки времени подготавливают цепи включения реле и нагревателя.

Главная 9zip.ru База знаний радиолюбителя Контакты
Девять кучек хлама:

Радиотехника, электроника и схемы своими руками Ремонт домашней электроники Виртуальный музей старых радиодеталей XX века Ламповый звук hi-end и ретро электроника Катушки Теслы Радиодетали и модули с Aliexpress Интернет и сети, компьютеры и программы Категория свободна Инструкции


Дайджест
радиосхем

Новые схемы интернета - в одном месте!

 17.6 IPS дисплей на ILI9488
 6.6 Игра «Змейка» на графическом дисплее
 6.6 Электрический обогреватель Ballu Plaza Ext ...

Задай вопрос радиолюбителям!


11.6 Древняя трухлявая опора угрожает упасть на крышу ...
1
4.3 Есть старая эпоксидка, двухкомпонентная, ...
4
2.6 китайский блок питания MAISHENG DC POWER SUPPLY ...
1