熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2020-11-18 09:43
正文摘要:這是又買(mǎi)一個(gè)MPL3115A2傳感器模塊測(cè)量。結(jié)果都是這樣,海拔測(cè)出120米,我這實(shí)際海拔73米左右,后邊78 是16進(jìn)制顯示 溫度還是很準(zhǔn)確的,手摸反應(yīng)靈敏 氣壓測(cè)出高的離譜, 不是說(shuō)這模塊測(cè)出數(shù)據(jù)是補(bǔ)償過(guò)的嗎? |
Y_G_G 發(fā)表于 2020-11-20 14:26 我試試 |
新鄉(xiāng)家電維修 發(fā)表于 2020-11-19 19:31 沒(méi)有完整的代碼,看不明白,最主要的數(shù)據(jù)轉(zhuǎn)換部分沒(méi)有 以下是我改了你的代碼,你參照一下 ;=================BMPM3PR讀程序============================== read_M3PR: mov r0,#21h ; mov address,#01H ; mov r5,#5 ss: mov r2,#11000000b ; mov r4,#11000001b ; Lcall read ; inc address inc r0 djnz r5,ss ret /* 讀取數(shù)據(jù)這一塊,最好是直接用 OUT_P_MSB DATA 030H OUT_P_CSB DATA 031H OUT_P_LSB DATA 032H 專門(mén)用來(lái)存放海拔三個(gè)數(shù)據(jù),用R0指向容易混亂*/ ;========================================================== read: lcall start ; mov a,r2 ; lcall send lcall ack ; jc read ;沒(méi)有完整代碼,看不明白這什么意思? mov a,address lcall send lcall ack read_a: lcall start mov a,r4 lcall send lcall ack jc read_a rece: lcall receive mov @r0,a lcall ack ;讀取一個(gè)地址的數(shù)據(jù)之后,這里應(yīng)該是要發(fā)送一個(gè)不應(yīng)答信號(hào),而不是應(yīng)答,這條指令不要了 /* CLR SCL 延時(shí) SETB SDA 延時(shí) SETB SCL 延時(shí) CLR SCSL 延時(shí) CLR SDA 這要發(fā)送一個(gè)不應(yīng)答信號(hào)*/ lcall stop ret ;=========================================================== |
|
sda BIT p1.0 ;SDA數(shù)據(jù)信號(hào) scl BIT p1.1 ;SCL時(shí)鐘信號(hào) address equ 31h ;地址數(shù) CTRL_REG1 EQU 27H ;壓力傳感器控制寄存器(測(cè)高測(cè)壓和復(fù)位) DIZHI_X EQU 5AH ;列地址 DIZHI_Y EQU 5BH ;頁(yè)地址(B0-B7) SSDDADA EQU 5CH ;一字節(jié)暫存地址 ORG 00H ORG 60H MAIN: CLR A MOV P0M1,A ;00--->準(zhǔn)雙向口, 01--->推挽輸出 MOV P0M0,A ;10--->高阻輸入, 11--->開(kāi)漏輸出 MOV P1M1,A ; MOV P1M0,A MOV P2M1,A ;設(shè)置準(zhǔn)雙向口 MOV P2M0,A MOV P3M1,A ;設(shè)置準(zhǔn)雙向口 MOV P3M0,A ; MOV P5M1,A ;設(shè)置準(zhǔn)雙向口 MOV P5M0,A MOV SP, #70H;修改堆棧指針 MOV A,#0 MOV 20H,A MOV 21H,A MOV 22H,A MOV R7,#0 MOV IE,#10000000B ;不允許總中斷,不允許定時(shí)器0 MOV TMOD,#00000001B ;定時(shí)器0=模式1,定時(shí)模式 MOV AUXR,#00000010B ;定時(shí)器0/2都工作12分頻模式 MOV SP,#60H LCALL RESET ;初始化OLED0.91 LCALL QPCX ;清屏程序 ;===================主程序=============================================== ST: LCALL reset_M3PR ;復(fù)位M3PR程序 mov 20h,#10111001b ;海拔檢測(cè) LCALL shezhi_M3PR LCALL DELAY1S lcall read_M3PR ;讀溫度和海拔程序 LCALL ZHUAN ;數(shù)據(jù)轉(zhuǎn)換 lcall DISP_A ;第一排顯示程序 LCALL reset_M3PR ;復(fù)位M3PR程序 mov 20h,#00111001b ;氣壓檢測(cè) LCALL shezhi_M3PR LCALL DELAY1S lcall read_M3PR ;讀溫度和氣壓程序 LCALL ZHUAN_0 ;數(shù)據(jù)轉(zhuǎn)換 lcall DISP_B ;第二排顯示程序 JMP ST ;=====================復(fù)位M3PR程序=================================== reset_M3PR: lcall start mov a,#11000000B ;M3PR識(shí)別ID lcall send lcall ack jc write mov a,#26h ;復(fù)位地址 lcall send lcall ack mov a,#04H ;04H寫(xiě)入26H就完成復(fù)位 lcall send lcall ack lcall stop ret ;=================設(shè)置BMPM3PR功能================================= shezhi_M3PR: mov r6, #11000000b ;id =C0H mov r0,#20h ;r0作為間接尋址 mov address,#26h ;開(kāi)始地址 mov r5, #1 lcall write ret write: lcall start mov a, r6 lcall send lcall ack jc write mov a, address lcall send lcall ack mov a, @r0 ; lcall send lcall ack lcall stop inc r0 inc address djnz r5, write ;減1后不為0轉(zhuǎn)移,存儲(chǔ)6位 ret ;=================身份識(shí)別BMPM3PR================================ shibie: mov r0,#1Ah ;r0作為間接尋址 mov address,#0Ch ;指向身份寄存器 mov 1Ah,#0 ;清零 mov r5, #1 ;讀出1字節(jié)數(shù)據(jù) mov r2, #11000000b;寫(xiě)B(tài)MPM3PR識(shí)別地址C0H,最后一位是讀寫(xiě)位 mov r4, #11000001b;讀BMPM3PR識(shí)別地址C1H Lcall read ;調(diào)用讀I2C程序 ret ;=================BMPM3PR讀程序============================== read_M3PR: mov r0,#21h ;欲讀數(shù)據(jù)存放地址指針 mov address,#01H ;指向數(shù)據(jù)地址 mov r5, #5 ss: mov r2, #11000000b;寫(xiě)B(tài)MPM3PR識(shí)別地址 mov r4, #11000001b;讀BMPM3PR Lcall read ;調(diào)用讀程序 inc address inc r0 djnz r5,ss ret ;---------------------------------- read: lcall start ;啟動(dòng)總線 mov a, r2 ;發(fā)送芯片識(shí)別碼 lcall send lcall ack ; 芯片應(yīng)答 jc read ; mov a, address lcall send lcall ack read_a: lcall start mov a,r4 lcall send lcall ack jc read_a rece: lcall receive mov @r0,a ;讀到數(shù)據(jù)存儲(chǔ)到@R0指定地址 lcall ack lcall stop ret |
Y_G_G 發(fā)表于 2020-11-19 08:35 匯編程序,大家沒(méi)耐心看到最好的 |
|
這個(gè)是IIC通訊協(xié)議的,只要有一個(gè)數(shù)據(jù)能讀寫(xiě),那么IIC的讀寫(xiě)就是對(duì)的 現(xiàn)在的問(wèn)題就是你數(shù)據(jù)處理的問(wèn)題了,你整了好幾天,都是靠猜,難道不是應(yīng)該把代碼上傳上來(lái)看一下嗎? 不要去懷疑去元件本身的精度,就算是會(huì)有元件本身的問(wèn)題,但這確實(shí)少之又少,更何況你手頭上已經(jīng)有兩個(gè)了,換一下就知道結(jié)果了 其實(shí)就是數(shù)據(jù)處理的問(wèn)題而已 |
Powered by 單片機(jī)教程網(wǎng)