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


9 нравится? 6


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

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

Хочешь почитать ещё про инструкции? Вот что наиболее популярно на этой неделе:
Простой генератор звуковой частоты
Согласование усилителя с аккустической системой
Преобразователи напряжения на микросхеме NE555



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

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

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

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

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

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


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

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

 7.10 Усилитель стрелочного индикатора
 7.10 Генератор DDS на ATtiny25
 29.9 Сканер шины I2C на Discovery

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


20.1 С помощью выходов К561ИЕ8 можно зажечь поочередно, ...
375
2.9 В чём прелесть ретрогейминга и каковы вообще его ...
4
6.10 В чём разница между микроконтроллерами ATMEGA8 и ...
2