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
|