Сообщение от shy_plumbum
|
|
Для реализации протокола по типу i2c нужны функции задержки для атмеги16. вроде должны быть стандартные (в каком-то проекте было delay.h и вызовы delay_ms, delay_us). пишу в image craft, не вижу там такого... где-нибудь можно достать или самостоятельно придется писать?
|
Может так попробовать
не очень точно,но задержки можно с запасом брать
//частота тактирования мк
#define F_CPU 11059000
//макросы программных задержек
#define _delay_ns(time) __delay_cycles(time*(F_CPU/1000000000))
#define _delay_us(time) __delay_cycles(time*(F_CPU/1000000))
#define _delay_ms(time) __delay_cycles(time*(F_CPU/1000))
когда-то писал прогу для такого датчика (давно и на ASM-51)
;ПРОГРАММА РАБОТЫ С ДАТЧИКАМИ ВЛАЖНОСТИ-ТЕМПЕРАТУРЫ SHT1-7X
;ИСП. РЕГИСТРЫ (ACC,B,R5,R6,R7)
;ВАРИАНТ ДЛЯ KEIL 19.03.2005
HDA BIT P1.1 ; ШИНА ДАТЧИКА
HCL BIT P1.2
SHT1X_CODE SEGMENT CODE
PUBLIC SHTTMP,SHTHUM
RSEG SHT1X_CODE
;*************************
;ПРОГРАММА ДЕЛЕНИЯ ЧИСЛА R7R6 НА R5 РЕЗУЛЬТАТ=B
DELENIE:
MOV B,#0
MOV A,R6
DL3: CLR C
DL1: SUBB A,R5
JC DL0
INC B
SJMP DL1
DL0: MOV R6,A
MOV A,R7
JZ DL2
INC B
DEC R7
MOV A,R6
SJMP DL3
DL2: RET
;*****************************
;ДАННЫЕ О ТЕМПЕРАТУРЕ
SHTTMP:
CALL SHSTART
MOV A,#00000011B;ТЕМПЕРАТУРА
CALL SHTRS
JC SHERROR
;---------------------
JB HDA,$
CALL SHRAC
MOV R7,A
CALL SHRES ;ПОЛУЧАЕМ ДАННЫЕ
MOV R6,A
MOV R5,#100
CALL DELENIE
MOV A,B ;ВЫЧИСЛЯЕМ ПО ФОРМУЛЕ T=(SHT1DAT/100)-40
CLR C
SUBB A,#40
RET
;*****************************
;ДАННЫЕ О ВЛАЖНОСТИ
SHTHUM:
CALL SHSTART
MOV A,#00000101B ;ЗАПРОС ВЛАЖНОСТИ
CALL SHTRS
JC SHERROR ;ОШИБКА
;--------------------------
JB HDA,$ ;ОЖИДАЕМ ЗАВЕРШЕНИЯ ИЗМЕРЕНИЯ
CALL SHRAC ;ПРИЕМ СТАРШЕГО БАЙТА
MOV R7,A
CALL SHRES ;МЛАДШЕГО
MOV R6,A
MOV R5,#31 ;ВЫЧИСЛЯЕМ ВЛАЖНОСТЬ ПО УПРОЩЕННОЙ
CALL DELENIE ;ФОЛМУЛЕ RH=SHT1DAT/31
MOV A,B
RET
;---------------------------
SHERROR:
MOV A,#0FFH ;ВЫХОД ПО ОШИБКЕ
RET
;******************************
;START-ПОСЛЕДОВАТЕЛЬНОСТЬ
SHSTART:
SETB HDA
CLR HCL
CALL SHDEL
SETB HCL
CLR HDA
CLR HCL
SETB HCL
SETB HDA
CLR HCL
RET
;*************************
;ПРОГРАММА ПОСЫЛКИ БАЙТА (A) C ПРОВЕРКОЙ
;КВИТИРУЮЩЕГО БИТА (ЕСЛИ ERR. ТО ФЛАГ 'С' УСТ.)
SHTRS: MOV B,#08H ;КОЛ-ВО БИТ
SHT2: RLC A
MOV HDA,C
SHT1: NOP ;ПЕРЕДАЧА БАЙТА
SETB HCL
CLR HCL
DJNZ B,SHT2 ;ВСЕ БИТЫ?
;-----------------------
SETB HDA
SETB HCL
MOV B,#08
SHT4: JNB HDA,SHT3 ;ЕСТЬ ACK?
DJNZ B,SHT4
CLR HCL
SETB C ;ВЫХОД С ОШИБКОЙ
RET
;-----------------------
SHT3: CLR HCL ;БЕЗ ОШИБКИ
CLR C
RET
;***********************
;ПРОГРАММА ПРИЕМА БИТА В (А) С ВЫДАЧЕЙ КВИТИРУЮЩЕГО БИТА
SHRAC:
MOV B,#08
SHT5: SETB HCL
NOP ;ПРИНИМАЕМ БАЙТ
MOV C,HDA
CLR HCL
RLC A
DJNZ B,SHT5
;--------------------
CLR HDA
NOP ;ВЫДАЕМ ACK
SETB HCL
CLR HCL
SETB HDA
RET
;************************
;ПРИЕМ БЕЗ КВИТИРОВАНИЯ
SHRES:
MOV B,#08
SHT6: SETB HCL
NOP
MOV C,HDA
CLR HCL
RLC A
DJNZ B,SHT6
;---------------------
SETB HDA
SETB HCL
CLR HCL
RET
;*********************
;ПРОГРАММА ЗАДЕРЖКИ
SHDEL:
RET