[도움말] 8051 sensirion SHT7X 디지털 센서 인터페이스

안녕,
이후 CPU가 명령을 곱하면
8 비트주는 당신은 근사치를 따라, 당신은 16 비트 정수 arthmetic 할 수 있으며, 좀 더 정확하게 함께 단축키를 사용하여 용어를 계산할 수 없어.
어떤 방법을 염두에 내가 가진 것을 설명할 것입니다 :
용어 계산 2.8 * 10 ^ -6 (Rdh) ^ 2, 어디 Rdh는 12 비트 숫자입니다.
우리 모두가 제로로하고있는 F, 16 값을 0의 주소 범위는 MS만이 한입 n1, 아래의 값을 가질 8bits을 가정해 봅시다.당신은이 테이블이 16 일 미시시피 한입의 가치에 상응하는 최대 보이는 만듭니다.예를 들어, 당신은 계산기를 사용하여 계산, 2.8의 값을 (0x F00) ^ 2 * 10
^ -6 = 41.28D하고이 값을 저장할 0xf 주소에 해당하는 테이블에.당신은 같은 계산 0xe .... 0x0이라는로
0xf 변화와 테이블을 준비 표정.
지금 우리가 피해를 어느 정도로 낮은 8bits 방치에 의해 수행에 대한 정확한 보자.
만약 우리가 MS의 한입 n1의 합계와 8bit 이용해 LS 지하 1 바이트로 Rdh을위한 12 비트 숫자 고려, 당신의 가치를 Rdh :
값 Rdh = (n1 * 1024 / 4 B1 층)
그래서, (Rdh) ^ 2 = (n1 * 1024 / 4 B1 층) ^ 2
= [(n1 * 1024 / 4) ^ 2 2 (n1 * 1024 / 4) 지하 1 층 지하 1 층 ^ 2]
그리고 습도를 계산에 용어
8월 2일 * 10 ^ -6 [(n1 * 1024 / 4) ^ 2 2 (n1 * 1024 / 4) 지하 1 층 지하 1 ^ 2
될 것입니다]

당신은 이미
(n1 * 1024 / 4) ^ 2 * 10 ^ -6
8월 2일 계산하고 테이블에 부쳐집니다.
그래서 나머지 오류 tearm
8월 2일 * 10 ^ -6 [2 (n1 * 1024 / 4) 지하 1 층 지하 1 층 ^ 2]
오류 용어,
지하 1 층되고 256D의 최대 가치, 용어의 최대
8월 2일 * 10 ^ -6 * 지하 1 층 ^ 2로 작동
8월 2일 * 10 ^ -6 (256) ^ 2 = 0.18과 0.18의 오류 이후 침착 습기에 소홀히하는 것이 중요하지 않습니다.
이제 우리와 함께 남아있는 유일한 오류 용어 보틀 =
8월 2일 * 2 * 256 n1b1 * 10 ^ -6
만약 우리가 추가로 n2 * 16 N3, 어디 N3 각각 n2과 중간과 Rdh 이용해 LS nibbles하는 지하의 분할
우리가받을 보틀 =
8월 2일 * 2 * 256 n1 (n2 * 16 N3) * 10 ^ -6
이제 우리가 N3로 0x 0F의 최대 가치와 n1으로 0xf의 최대 가치를 고려, 기여 N3로 인한 것입니다
8월 2일 * 2 * 256 * 0Fh * 0Fh * 10 ^ -6 = 0.32는 무시됩니다.
그래서 당신 =
8월 2일 * 2 보틀 * 256 * 16 * 10
얻을 n1n2 ^ -6
=
2월 29일 * n1n2 * 10 ^ -2, 당신이 명령을 사용하여 CPU의 MPY는 정확하게 계산할 수있습니다.
보틀의이 값은 바이트로
16 바이트 조회 테이블에서, n1의 가치에 대해, 각각의 독서 촬영을 위해 기반을 선택한 마침내 첫 번째 임기에서 이미 계산을 뺀,이 % 습도 값에 도달하는이 추가됩니다.
안부,
Laktronics

 
알았, 난 당신이 내게
준 이해 now.Thank!

또 다른 문제는,이 enginerring 유닛을 사용하여 전환 89c52.왜 이렇게해야하는가? 그것을 우리는 방정식을 어디에 마이크로 프로세서를 수행할 수 있도록 방정식의 변화를 필요 있나요?

당신은 내가 근사치를 따를 필요 없다고?이 무슨 뜻이야?

미안 해요 ...어쩌면 내가 느린 abit이야!!

 
안녕,
이 방법은 부동 소수점 연산에 대한 필요성을 극복하는 것이 좋습니다.방법을 계산하는 동안 시간을 절약할 수, 그것을 몇 가지 조건을 무시하고 그 정도로 부정확하다는 것이다.직접 16 비트 정수를 산술 일을함으로써, 비록, 당신이 얻을 수있는 더 정확한 결과는 중요하지 않습니다이 경우에는 약간의 여분의 시간이 걸립니다.어떤 경우에는 부동 소수점 계산을 할 필요가없습니다.

안부,
Laktronics

 
늦은 업데이 트에 대한 죄송합니다.

온도가 분유를
들어T는 = 0.01 [의 BCD (Rdt -1의 13 비트) 100 D 조]

두 8bit 등록을,
B 및 A 들고 중요도가 가장 적은 바이트가 가장 중요한 바이트 지주 등록 말할 수있는 14 비트 결과를 별도의.

그래서 대한 100 D 조 = 0110 0100B

추가하여, # 0110 0100B레지스터에 Rdt
= 5 비트의 Rdt -1 13 비트 (13 비트)

SUBB B 조, # 0001 0000B따라서 A는 중요도가 가장 적은 바이트와 B를 보유하고있는 가장 중요한 바이트 만요.

여기에 근래 두 가지 질문을했다.
1)이 수술 전 후 오븐 플래그를 설정해야합니까?가 CPU를 표시하려면 B 및 A 모두 함께
16 비트 수를 나타내는?
2) A와 B에 등록하는 방법에있는 14 비트 그 결과를 저장하는 데?같은 방법으로 사용 설명서가 :
P2.7 '비트 엑스 2 ^ 7
p2.6 '비트 엑스 2 ^ 6
p2.5 '비트 엑스 2 ^ 5
p2.4 '비트 엑스 2 ^ 4
p2.3 '비트 엑스 2 ^ 3
p2.2 '비트 엑스 2 ^ 2
p2.1 '비트 엑스 2 ^ 1
p2.0 '비트 엑스 2 ^ 0

P0.7 '비트 엑스 2 ^ 7
p0.6 '비트 엑스 2 ^ 6
p0.5 '비트 엑스 2 ^ 5
p0.4 '비트 엑스 2 ^ 4
p0.3 '비트 엑스 2 ^ 3
p0.2 '비트 엑스 2 ^ 2
p0.1 '비트 엑스 2 ^ 1
p0.0 '비트 엑스 2 ^ 0

그리고 추가 작업을 사용하여 등록에 의해 결과가 하나 추가 하나?
난이 바로 작업을해야한다고 생각?

감사합니다.

 
안녕,
하나의 센서에 의해 언제부터 비트 하나,
최대 수확하는 MSB는 처음부터 얻을, 수행의 각 비트를 저장 후, 당신은 RLC (위해 Accu 회전합니까. 수행과 함께 왼쪽) 어큐뮤레이터를에 지시하고, 각 비트는 매점, 는 LSB가 왼쪽으로 회전을 시작으로.
각 바이트를 수집 후, 메모리 위치에 저장 말을 30H에서 첫 번째 바이트, 다음 바이트와 31h.계산 할 때, 다시 어큐뮤레이터를와 B reg로 이러한 바이트 읽기 및 처리하길 바래.
위와 같이하면, 먼저 분명히 수행 및 수행과 ADDC (추가합니까)와 명령어를 추가로 수행 이후이 MSByte 추가할 수있습니다.마찬가지로, 언제든지 (16) 기대하고 있지만이 사건에 빌려 위의 수행을 찾아야한다 빼는 방법으로 13 비트 MS의 한입 항상 0001b보다 커야합니다.
안부,
Laktronics

 
알았, R0에있는 바이트의
MSB는 ()에 대한 등록의 R1 LSB가 ()에 대한 저장소에 RLC 추가

이것은 올바른 방법이 있나요?내가 코드를 업로드

그리고 그 이후에도 온도가 방정식을 계산하려고합니다.

내가 뺄셈 부분에 대한 이해가 안 돼요.

인용구 :

동안 언제든지 (16)이 사건을 비록 기대에 빌려 위의 수행을 찾아야한다 빼는 방법으로 13 비트 MS의 한입 항상 0001b보다 커야합니다.

 
난, subtration에 대한 질문이있습니다
사용할 수있는 16 비트 숫자 1010년 1010년 0110 0000 B와 난 100D에서 마이너스로 같다는 말이하고 싶어

1010년 1010년 0110 0000 B 조 - 0110 0100B

8051 년 나는이 작업을 할 경우, MSB는 LSB가로 1010년 1010년과 별도로 0110 0000 B 조 subtration 할 필요가있다?

라고하자
mov 인 R0, # 1010년 1010B
mov 인 한, # 0110 0000B

SUBB 한, # 100D (0110 0000B 동등 - 0110 0100B)

그래서 지금 1010년 1010B - 0110 0000B = 1111 1100년 B 조
여기서 C와 AC 플래그를 1로 설정합니다.

그래서 8051 unsign 숫자로
봐도 되나요?
그리고 만약 C 플래그를
1로 설정하면, 그럴 필요 - 1 MSB는 그거죠?

감사합니다!

 
안녕,
1.멀리 100D로서, 그것은 추가됩니다 뺀 아니, 13의 빼기 때문에 1 ° C 오류 비트 대신 4000D에 대한 보상을 우려하고있다.
2.부정적인 온도 들어, 수치는 12 비트 숫자 시간됩니다.이 때문에,
120 ℃ (160 ° 총)를 -40 ° C의 범위를 하나의 센서로 대표되는 14 비트 숫자입니다.이 방정식에서 그는 (* 0.01 독서), 독서의 십진수에서 최대의 가치를 짐작해야 40D 빼는 16000입니다.그래서 난 그 온도의 가치를 위해 어떤 봤어요., 비트 또는 13 비트를 설정해야한다 높은 기대입니다.그러나 만약 당신이
원하는 온도를 측정 - 봤어요., 13 비트 빼는 동안 서명 산술 할 필요가있다.
3.온도의 독서 적어도 밖의 가정에 오류가 찾을 수있는 계산기를 사용하여 교차 확인 했나?예를 들어, 그 수치와 -40 방정식에 진수, 바이너리하는 것으로 간주됩니다 어떤 경우에는 수치의 BCD에있는 건가요?그래서이어야 수동 계산기를 사용하여 하나의 독서에는 실수는 가정에서 할 수 있는지 확인하고 다음을 계산서만 소프트웨어 구현과 함께 진행합니다.
4.그들이 더 esily 조절할 수 RO/R1에서 독서 보관도 괜찮습니다.

만약 내가 답장을 알려주시기 바랍니다 어떤 지점에서 탈락했다.
안부,
Laktronics

 
그래, 난 가치를 지닌, 그래서 예고 RDT 짓을 몇 가지 가설 - 1 13bit에서 유효한지 또는 온도에서 항상 긍정적인> 1 ℃의

죄송합니다, 위의 가정 the 12 비트 습도 계산을 위해 만들어졌다.

내가 마지막으로 방정식을
단순화Rh = 0.01 [4 (Rdh - 100D) 2 n1n2] - 2.8x10 ^ -4 (n1.256) ^ 2]가자 Rdh = 1001 0011 0001 = 75 % RH [보상없이]

그리고 난 그것부터 마이너스 100D는 동일합니다 싶어요

1001년 0011 0001B - 0110 0100B

8051 년 나는이 작업을 할 경우, MSB는 LSB가로 1001년 0011 0001B와 별도로 할 필요가 subtration입니까?

라고하자
mov 인 R0, # 0000 1001B
mov 인 한, # 0011 0001B

SUBB 한, # 100D (0011 0001B 동등 - 0110 0100B)

그리고 내 질문은 :

1) 그래서 이제 마이크로 프로세서 0011 걸릴 0001B - 0110 0100B = 1100년 1101년?
여기서 C와 AC 플래그를 1로 설정?

2) 그리고 만약 C 플래그를 1로 설정하면, 난 마이너스 1 MSB는 오른쪽
필요 한가?

3) C 플래그를 실행할 경우 1 어떻게 확인 할 경우가 발생합니다 전
1 MSB는 바이에 대한 마이너스 싶어?

감사합니다!

 
안녕,
그래, 당신이 수행하고 추가를 계속 추적해야 / 멀티 바이트 산술 할 때 하위 집합 석사 바이트.당신은 분명 처음으로 모실 수와 Subb / ADDC 지시 알아서 자동으로 수행하는 데 사용합니다.
안부,
Laktronics

 
내 경우에는 어떻게해야 SUBB 명령을 사용하여 자동으로 처리합니다 들고 다니 겠냐?MSB는 2 개의 레지스터에 별도 및 LSB가?있다면, 아래와 같은있다으로서 무엇을

예 :
1001년 0011 0001B - 0110 0100B

라고하자
mov 인 R0, # 0000 1001B
mov 인 한, # 0011 0001B

SUBB 한, # 100D (0011 0001B 동등 - 0110 0100B)

여기 카리 플래그를 설정합니다.

MOV 한, R0
SUBB 한, # 00h (SUBB 명령 1과 A의 것입니다 마이너스 값을 설정 이후 수행입니까?)

그것은 방법이 있나요??

나는 그것을 밖으로 작동하도록하는 방법을 정말로 이해하는 저를 위해 몇 가지 예를 필요합니다.
내 참고 도서가 부족한 정보를 제공합니다.

진심으로 감사합니다

 

Welcome to EDABoard.com

Sponsor

Back
Top