|
发表于 2010-1-3 01:16:07
|
显示全部楼层
;下面是我程序的片断,测试可用
;这个函数,只做一次用,,不用的时候可隐.两个值是测试出来的
IAP_WRITE_ZCHECK:
MOV DPTR, #EEPROM_1 ;放入任一个地址, 擦除所在整个扇区
ACALL IAP_ERASE
MOV DPTR, #EEPROM_1 ;放入第一个数地址
MOV IAP_DATA, #8EH ;放入一个数
ACALL IAP_PROGRAM
MOV DPTR, #EEPROM_2
MOV IAP_DATA, #07H
ACALL IAP_PROGRAM
RET
IAP_READ_ZCHECK:
MOV DPTR, #EEPROM_1
ACALL IAP_READ
MOV ZCHECK_LSB, IAP_DATA
MOV DPTR, #EEPROM_2
ACALL IAP_READ
MOV ZCHECK_MSB, IAP_DATA
RET
INIT_7455:
MOV ACC_CNT, #00H
MOV ACC_ARR, #00H
MOV ACC_RES, #00H
MOV ZCHECK_LSB, #00H
MOV ZCHECK_MSB, #00H
ACALL IAP_READ_ZCHECK ;先读出Z校的值
MOV MMA_DATA1, #16H ;7455模式设置寄存器
MOV MMA_DATA2, #41H ;01000001 不中断,关自检,8g测量模式
ACALL I2C_SEND_7455
JB 00H, INIT_7455_ERROR
MOV MMA_DATA1, #18H
MOV MMA_DATA2, #98H ;10011000 只测试Z 125Hz使能
ACALL I2C_SEND_7455
JB 00H, INIT_7455_ERROR
MOV MMA_DATA1, #14H
MOV MMA_DATA2, ZCHECK_LSB ;经验值..Z校
ACALL I2C_SEND_7455
MOV MMA_DATA1, #15H
MOV MMA_DATA2, ZCHECK_MSB
ACALL I2C_SEND_7455
INIT_7455_ERROR:
RET
INIT_7455_STANDBY: ;掉电模式
MOV MMA_DATA1, #16H ;7455模式设置寄存器
MOV MMA_DATA2, #00H ;掉电
ACALL I2C_SEND_7455
JB 00H, INIT_7455_STANDBY_ERROR
INIT_7455_STANDBY_ERROR:
RET
;约4100 370u
;结果在30H(次数) 31H(进位),32H(高八位)
MMA_READ_Z:
PUSH PSW
PUSH ACC
MOV MMA_DATA1, #08H
ACALL I2C_RECV_7455
INC ACC_CNT ;次数加1
MOV A, MMA_DATA2 ;取出刚才的结果
JNB ACC.7, MMA_READ_Z_NEG
CPL A
INC A ;求补,参数7455数据手册
MMA_READ_Z_NEG: ;
ANL A, #0FCH
ADD A, ACC_RES ;加原来高八位
JNC MMA_READ_Z_CCC
INC ACC_ARR
MMA_READ_Z_CCC:
MOV ACC_RES, A
POP ACC
POP PSW
RET |
|