一二三区视频 I 性生交大片免费中文 I 6080yy精品一区二区三区 I 国产xxxx变性人免费 I 国产精品酒店视频 I 国产专区在线视频 I 香港三级做爰在线播放 I 午夜神马久久 I 色呦呦中文 I 国产援交 I 亚洲精品mv免费网站 I 人妻少妇无码精品专区 I 国产真实老熟女无套内射 I 欧美一区二区三区成人久久片 I 成人免费看黄 I 人人澡视频 I 绝对真实国产乱 I 日韩理论影院 I av成人在线网站 I 激情视频在线免费观看 I 在线看亚洲 I 综合无码成人aⅴ视频免费 I 色444 I 青娱乐国产精品视频 I 四虎四虎院5151hhcom I 国产三级在线观看完整版 I 欧美黄色一级片视频 I 亚洲精品无码成人aaa片 I 亚洲综合国产成人丁香五月激情 I 在线看片免费人成视频播 I 夜色综合 I 日本 精品 高清不卡 I 女同一区

聯(lián)系方式
聯(lián)系人:黃小姐
聯(lián)系電話:0755-25848978, 83738778
傳真號碼:0755-83738639
公司地址:深圳市寶安區(qū)西鄉(xiāng)街道寶源路深圳市名優(yōu)工業(yè)產(chǎn)品展示采購中心B座1區(qū)五樓508號
Email:sales@sandat.com
郵編:518102
公司網(wǎng)址:http://www.sandat.com
文章詳情

SMT16030溫度傳感器與 68HC11 型單片機(jī)的連接

日期:2025-10-11 11:59
瀏覽次數(shù):8269
摘要:

SMT16030溫度傳感器 68HC11 型單片機(jī)的連接

H. Liefting

這個操作說明書描述了Smartec溫度傳感器如何與68HC11單片機(jī)連接。

支持兩種輸入形式: 捕獲輸入和規(guī)則輸入。 

A. 使用捕獲輸入

SMARTEC溫度傳感器有一個占空因數(shù)輸出: 

                       全周期

為了計算占空因數(shù),必須獲得兩個測量結(jié)果。一個是一個全周期所用的時間,另一個是信號為高電平('1')的時間。兩種時間都可以使用輸入捕獲計時器來測量。

當(dāng)輸入由邏輯'1'跳變?yōu)?/font>'0'時計時器啟動。信號由'0''1',存儲計時器中的內(nèi)容。周期末端當(dāng)信號由再次'1' '0'時,再次存儲計時器中的內(nèi)容。現(xiàn)在我們可以計算占空因數(shù)了。

0.5ms可以獲得一次全周期所用的時間 (t ) 和信號為高電平('1')時的時間 (t 

利用這些時間來計算傳感器的溫度傳感器的規(guī)格書中給出了下面的公式:

 

占空因數(shù) (d.c.)= 0.31924 + 0.00472 x 溫度 ()

所以溫度是:211.9 x ( d.c. - 0.31924)。為了簡便,在方程兩邊乘以(65536)來出去小數(shù)部分:

溫度 x 65536 = 211.9 x ( 2 x d.c. - 20922),

 

309 x 溫度 = 2 x d.c. – 20922

變量 d.c. x 2可以計算如下::信號是高電平的時間除以全周期時間。使用 'fdiv' 指令來進(jìn)行除法操作。'fdiv' 指令乘完除數(shù)2之后將劃分兩個16-bit數(shù)。這正是我們需要的。在從計算結(jié)果中減20922。之后我們獲得309*溫度。25度的溫度將產(chǎn)生一個數(shù)值25 x 309 = 7725。使用這些數(shù)可以簡化進(jìn)一步的計算。

傳感器輸出信號頻率在1 kHz4 kHz 之間。 這表明每毫秒都能獲得一個測量值。能夠充分滿足一般需求。我們測量不止一個值,而是測量100個周期然后取平均值。

 

*************************************************

溫度測量

*************************************************

在輸入信號的still_to_do階段測量結(jié)果累加

* -周期總數(shù)表示為periodsum

* -信號總數(shù)中信號為'1' 的時間表示為signalsum

 

* 在每個周期的結(jié)束時,still_to_do低于電平1

如果保持信號still_to_do降為零測量完成求和將不再增加

經(jīng)過一段時間調(diào)整,'meas_on' 標(biāo)志位將被重置

 

開始測量:

* - 'meas_on' 標(biāo)志位必須設(shè)置為 '1'

* -在測量過程中,必須用測量的平均周期數(shù)來初始化'still_to_do' *       

* - 周期總數(shù)和信號總數(shù)必須設(shè)為0

程序段

 

溫度測量的數(shù)據(jù)區(qū)

DATA    space

still_to_do       rmb 1          |number of periods to accumulate

meas_on         rmb 1          |flag to indicate the measurement is running

periodsum        rmb 3          |accumulates period times

signalsum        rmb 3          |accumulates '1' time of the signal

 

存儲以便內(nèi)部應(yīng)用

periodstart    rmb 2           |startingtime of a period

starttime1      rmb 2           |time at which the signal became '1'

 

溫度測量初始化

程序段

                clr meas_on

                clr still_to_do  |no measurement active

                ldab #$7E        |initialize the interrupt vector

                stab tic1int

                ldd #sensorint

                std tic1int+1

                ldx #regsbeg    |start measuring a falling edge

                bclr tctl2-regsbeg,x,edg1a

                bset tctl2-regsbeg,x,edg1b

                ldab #ic1f       clear possibly pending interrupt

                stab tflg1-regsbeg,x

                bset tmsk1-regsbeg,x,ic1i

jmp tempend     |end of the initialization

 

 

溫度測量子程序

程序段

*******輸入中斷程序 *******

sensorint       equ $

                ldx #regsbeg    |let IX point at the I/O registers

**次設(shè)置中斷標(biāo)志位

                ldab #ic1f

                stab tflg1-regsbeg,x

確定是上升沿還是下降沿

                brclr tctl2-regsbeg,x,edg1a,sensorint1

 

*如果是上升沿我們是在測量中間階段

記錄下上升沿時間

                ldd tic1-regsbeg,x

                std starttime1

等待下降沿

                bclr tctl2-regsbeg,x,edg1a

                bset tctl2-regsbeg,x,edg1b

                bra sensorint9

如果處于下降沿,我們處于周期的結(jié)束

一個周期的結(jié)束同時也是另一個周期的開始

sensorint1      equ $

                tst meas_on      |check if the measurement should be taken

                beq sensorint4

當(dāng)進(jìn)行測量的時候

累計信號為“1”的總時間

                ldd tic1-regsbeg,x

                subd starttime1

                addd signalsum+1

                std signalsum+1

                ldaa signalsum

                adca #0

                staa signalsum

存儲總的周期時間

                ldd tic1-regsbeg,x

                subd periodstart

                addd periodsum+1

                std periodsum+1

                ldaa periodsum

               adca #0

                staa periodsum

* one more period done, one less to do

                dec still_to_do

                bne sensorint4

*如果需要測量更多的周期,測量是準(zhǔn)備好的

                clr meas_on

記錄下新的周期開始的時間

sensorint4      ldd tic1-regsbeg,x

                std periodstart

等待一個上升沿

                bset tctl2-regsbeg,x,edg1a

                bclr tctl2-regsbeg,x,edg1b

sensorint9      rti

 

開始測量100個周期

startmeas       equ $

                tpa              |save the condition-code register on the stack

                psha             |(using A)

                sei              |temporarily block the interrupts

                ldaa #100

                staa still_to_do

                ldd #0

                std periodsum   |clear the results

                staa periodsum+2

                std signalsum

                staa signalsum+2

                ldab #1          |start the measurement

                stab meas_on

                pula             |retrieve the condition-code register

                tap              |from the stack (using A)

               rts

***** 主程序的應(yīng)用程序

程序段

測量溫度,并將結(jié)果放在D中。結(jié)果表示為攝氏溫度* 309的數(shù)值

grad            equ 309

meas_temp    equ $

                pshx             |save IX on the stack

                bsr startmeas    |start a measurement of 256 periods

meas_temp0    tst meas_on      |wait until the measurement is ready

                bne meas_temp0

mess_temp1     ldab periodsum  |scale both times back to values that

                orab signalsum  |will fit in 16 bits

                beq meas_temp2   |do this by dividing both values by 2

                lsr periodsum    |until both are within the 16-bit range

                ror periodsum+1

                ror periodsum+2

                lsr signalsum

                ror signalsum+1

                ror signalsum+2

                bra mess_temp1

 

meas_temp2    ldx periodsum+1

                ldd signalsum+1

                fdiv            |calculate the duty-cycle

                xgdx             |put the result into D

               subd #20922    |then correct (see explanation in handbook)

               pulx             |retrieve IX from the stack

               rts

B. 使用規(guī)則輸入信號

輸入捕獲計時器是SMARTEC溫度傳感器的優(yōu)選輸入。但.SMARTEC傳感器也能夠和規(guī)則輸入連接。程序要對輸入進(jìn)行掃描,然后確定掃描信號的信號/周期比率。這要通過積累抽樣次數(shù)、信號為“1“的次數(shù)、然后用后面的除以前面的。

使用這種方法時,要考慮以下幾點。

測量結(jié)果的分辨率由用來計算占空因數(shù)的抽樣數(shù)目來決定。由于掃描處理很緩慢,在一個合理的時間內(nèi)不可能積累大量的抽樣信號。小數(shù)量的抽樣將取得一個不太**的占空因數(shù)和溫度。多次的掃描可以得到大量的抽樣。但是在這樣的情況下,測量值對溫度的響應(yīng)不夠好。

記住非常重要的一點,傳感器信號與抽樣處理之間完全沒有聯(lián)系。如果傳感器信號頻率是(或是整數(shù)倍的)等于掃描信號頻率,你會得到一個錯誤的結(jié)果。注意:傳感器信號頻率隨溫度變化很大。確保掃描是在傳感器信號周期內(nèi)隨機(jī)進(jìn)行的。

下面的編碼可以由主程序調(diào)用來測量溫度。在這個例子中假定測量程序作為主掃描循環(huán)的一部分,以固定間隔被調(diào)用。為了確保測量程序是在smartecs周期內(nèi)的隨機(jī)時間被調(diào)用,測量程序中引入了一個隨機(jī)延遲。如果你能保證測量程序是隨機(jī)被訪問的,也可以不引入隨機(jī)延遲。測量值來自所有測量結(jié)果的累計,所以溫度的讀數(shù)將是相對大的數(shù)量取樣的平均,也不會對溫度的改變迅速響應(yīng)。如果需要快速檢測溫度變化,那么不要累計測量結(jié)果,但要在每次測量前清空累加器。

*************************************************

*大長度隨機(jī)發(fā)生器

*************************************************

隨機(jī)發(fā)生器由一個7位的移位寄存器實現(xiàn),此移位寄存器的bit5和bit6異或后反饋給bit0.

DATA            space

seed            rmb 1            |the shift register's seed

PROGRAM         space

** 初始化

                 ldaa #1

                 staa seed        |init. the register to anything but 0

                 jmp randomend

******* get a random number (1..127) from the generator into (B)

getrandom      equ $

                 ldab seed        |get current seed

                 aslb             |shift left to XOR bit6 with bit5

                 eorb seed

                 aslb

                 aslb             |resulting bit is now in the carry flag

                 rol seed         |rotate new bit into shift register

                 ldab seed      |get the new random number

                 andb #$7F

                 rts

randomend      equ $

 

       

*************************************************

溫度測量

*************************************************

多次累計

* - 在periodsum中有多少個取樣

* - 在signalsum中為1的信號數(shù)

任何時候兩個累加器中的值都超過 65535 (16 bits) ,兩個寄存器中的值都除以2.

程序段

tempstart       equ $            |the starting address of this module

溫度測量數(shù)據(jù)區(qū)

DATA            space

periodsum      rmb 3           |counts samples taken

signalsum       rmb 3          |counts samples valued '1'

溫度測量初始化

PROGRAM     space

                ldd #0

                std periodsum   |clear the counters

                staa periodsum+2

                std signalsum

                staa signalsum+2

                jmp tempend     |end of the initialization

*溫度測量的子程序

程序段

******* 從傳感器取一次樣

take_sample   equ $

                ldab porta       |get the signal into bit0 of accumulator (B)

asrb

asrb

andb #bit0      |mask out only the smartec signal

clra             |add sample to accumulator

addd signalsum+1

std signalsum+1

ldaa signalsum

adca #0

staa signalsum

ldd #1           |add one more sample to the sample coun

addd periodsum+1

std periodsum+1

ldaa periodsum

adca #0

staa periodsum

rts

*******從傳感器連續(xù)多次取樣

******* 取樣次數(shù)放入 (B)

take_samples  equ $

                pshb             |take the required number of samples

                bsr take_sample

                pulb

                decb

                bne take_samples

take_samples0 ldab periodsum  |scale both accumulators back to values that

                orab signalsum   |will fit in 16 bits

                beq take_samps9  |do this by dividing both values by 2

                lsr periodsum  |until both are within the 16-bit range

               ror periodsum+1

               ror periodsum+2

                lsr signalsum

                ror signalsum+1

                ror signalsum+2

                bra take_samples0

take_samps9    rts

 

溫度測量結(jié)果放在 D結(jié)果是

度數(shù) (攝氏的溫度) * 309

meas_temp    equ $

                pshx

                jsr getrandom   |get a random number into (B)

meas_temp0    decb             |and use that to generate a random delay

                bne meas_temp0

                ldab #50

                bsr take_samples

                ldx periodsum+1

                ldd signalsum+1

                fdiv             |calculate the duty-cycle

                xgdx             |put the result into D

                subd #20922    |then correct (see explanation in handbook)

                pulx             |retrieve IX from the stack

                rts

tempend         equ $            |end of this module

* the number of bytes this module requires in the PROGRAM area

tempsize        equ tempend-tempstart

粵公網(wǎng)安備 44030602001744號

主站蜘蛛池模板: 人妻激情偷乱一区二区三区 | 国产精品99久久久久久www | 国产精品毛片久久久久久久 | 国产熟妇精品高潮一区二区三区 | 亚洲男人的天堂在线aⅴ视频 | 秋霞午夜成人久久电影网 | 国产偷国产偷亚洲高清app | 国产成人精品aa毛片 | 自拍另类图片区亚洲 | 人妻 色综合网站 | 高潮抽搐潮喷毛片在线播放 | 日韩日韩日韩日韩日韩 | 午夜三级a三级三点窝 | 玩弄japan白嫩少妇hd小说 | 精品乱码一区二区三四区视频 | 亚洲日韩在线中文字幕线路2区 | 97精品人人a片免费看 | 国产精品人成视频免费vod | 在线精品无码字幕无码av | 日韩av影院在线观看 | 久操中文| 精品懂色最新国产在线 | 亚洲三级香港三级久久 | 99久久久国产精品免费牛牛 | 免费精品国产人妻国语三上悠亚 | 无码永久成人免费视频 | 邻居少妇张开双腿让我爽一夜 | 精品国产天堂综合一区在线 | 狠狠躁夜夜躁人人爽天天5 欧美牲交a欧美牲交aⅴ免费 | 国内熟妇人妻色无码视频在线 | 国产精品成人无码久久久久久 | 国产美女视频一区二区三区 | 人妻 色综合网站 | 天天爽天天狠久久久综合麻豆 | 色婷婷六月亚洲综合香蕉 | 日日碰狠狠添天天爽不卡 | 亚洲 丝袜 另类 校园 欧美 | 国产精品一卡二卡三卡四卡 | 亚洲愉拍自拍欧美精品app | 搡老熟女老女人一区二区 | 吃奶呻吟打开双腿做受视频 |