sda BIT p1.0 ;SDA數據信號
scl BIT p1.1 ;SCL時鐘信號
address equ 31h ;地址數
CTRL_REG1 EQU 27H ;壓力傳感器控制寄存器(測高測壓和復位)
DIZHI_X EQU 5AH ;列地址
DIZHI_Y EQU 5BH ;頁地址(B0-B7)
SSDDADA EQU 5CH ;一字節暫存地址
ORG 00H
ORG 60H
MAIN:
CLR A
MOV P0M1,A ;00--->準雙向口, 01--->推挽輸出
MOV P0M0,A ;10--->高阻輸入, 11--->開漏輸出
MOV P1M1,A ;
MOV P1M0,A
MOV P2M1,A ;設置準雙向口
MOV P2M0,A
MOV P3M1,A ;設置準雙向口
MOV P3M0,A ;
MOV P5M1,A ;設置準雙向口
MOV P5M0,A
MOV SP, #70H;修改堆棧指針
MOV A,#0
MOV 20H,A
MOV 21H,A
MOV 22H,A
MOV R7,#0
MOV IE,#10000000B ;不允許總中斷,不允許定時器0
MOV TMOD,#00000001B ;定時器0=模式1,定時模式
MOV AUXR,#00000010B ;定時器0/2都工作12分頻模式
MOV SP,#60H
LCALL RESET ;初始化OLED0.91
LCALL QPCX ;清屏程序
;===================主程序===============================================
ST:
LCALL reset_M3PR ;復位M3PR程序
mov 20h,#10111001b ;海拔檢測
LCALL shezhi_M3PR
LCALL DELAY1S
lcall read_M3PR ;讀溫度和海拔程序
LCALL ZHUAN ;數據轉換
lcall DISP_A ;第一排顯示程序
LCALL reset_M3PR ;復位M3PR程序
mov 20h,#00111001b ;氣壓檢測
LCALL shezhi_M3PR
LCALL DELAY1S
lcall read_M3PR ;讀溫度和氣壓程序
LCALL ZHUAN_0 ;數據轉換
lcall DISP_B ;第二排顯示程序
JMP ST
;=====================復位M3PR程序===================================
reset_M3PR:
lcall start
mov a,#11000000B ;M3PR識別ID
lcall send
lcall ack
jc write
mov a,#26h ;復位地址
lcall send
lcall ack
mov a,#04H ;04H寫入26H就完成復位
lcall send
lcall ack
lcall stop
ret
;=================設置BMPM3PR功能=================================
shezhi_M3PR:
mov r6, #11000000b ;id =C0H
mov r0,#20h ;r0作為間接尋址
mov address,#26h ;開始地址
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轉移,存儲6位
ret
;=================身份識別BMPM3PR================================
shibie:
mov r0,#1Ah ;r0作為間接尋址
mov address,#0Ch ;指向身份寄存器
mov 1Ah,#0 ;清零
mov r5, #1 ;讀出1字節數據
mov r2, #11000000b;寫BMPM3PR識別地址C0H,最后一位是讀寫位
mov r4, #11000001b;讀BMPM3PR識別地址C1H
Lcall read ;調用讀I2C程序
ret
;=================BMPM3PR讀程序==============================
read_M3PR:
mov r0,#21h ;欲讀數據存放地址指針
mov address,#01H ;指向數據地址
mov r5, #5
ss: mov r2, #11000000b;寫BMPM3PR識別地址
mov r4, #11000001b;讀BMPM3PR
Lcall read ;調用讀程序
inc address
inc r0
djnz r5,ss
ret
;----------------------------------
read:
lcall start ;啟動總線
mov a, r2 ;發送芯片識別碼
lcall send
lcall ack ; 芯片應答
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 ;讀到數據存儲到@R0指定地址
lcall ack
lcall stop
ret
|