📄 fm_i2cdrv2.msa
字号:
//==================================================//A入口为准备响应,返回为接受到的数值I2Crecebyte: PUSH BC LD B,A PUSH BC IN A,(SCL_outport) RES SCL_outport_num,A OUT (SCL_outport),A IN A,(SCL_inport) SET SCL_inport_num,A OUT (SCL_inport),Awaitsclrelease: IN A,(SCL_dinport) BIT SCL_dinport_num,A JR Z,waitsclrelease IN A,(SCL_inport) RES SCL_inport_num,A OUT (SCL_inport),A IN A,(SCL_doport) SET SCL_doport_num,A OUT (SCL_doport),A IN A,(SCL_outport) SET SCL_outport_num,A OUT (SCL_outport),A LD B,08HSDAInextbit: IN A,(SCL_doport) SET SCL_doport_num,A OUT (SCL_doport),A CALL LWRD I2C_wait3us IN A,(SDA_dinport) BIT SDA_dinport_num,A JR Z,SDAI0SDAI1: SCF RL C JR SDAI_OKSDAI0: SLA CSDAI_OK: LD A,B CP 01H JR Z,I2CRlastbit PUSH BC POP BC IN A,(SCL_doport) RES SCL_doport_num,A OUT (SCL_doport),A CALL LWRD I2C_wait5us DJNZ SDAInextbitI2CRlastbit: IN A,(SDA_inport) RES SDA_inport_num,A OUT (SDA_inport),A BIT 0,C JR NZ,I2CRlastbit1 IN A,(SDA_doport) RES SDA_doport_num,A OUT (SDA_doport),A JR I2CRlastbitOKI2CRlastbit1: IN A,(SDA_doport) SET SDA_doport_num,A OUT (SDA_doport),AI2CRlastbitOK: IN A,(SDA_outport) SET SDA_outport_num,A OUT (SDA_outport),A IN A,(SCL_doport) RES SCL_doport_num,A OUT (SCL_doport),A LD A,C POP BC LD C,A LD A,B CP 00H JR NZ,GenNACK IN A,(SDA_doport) RES SDA_doport_num,A OUT (SDA_doport),A CALL LWRD I2C_wait5us IN A,(SCL_doport) SET SCL_doport_num,A OUT (SCL_doport),A CALL LWRD I2C_wait5us IN A,(SCL_doport) RES SCL_doport_num,A OUT (SCL_doport),A IN A,(SDA_outport) RES SDA_outport_num,A OUT (SDA_outport),A IN A,(SDA_inport) SET SDA_inport_num,A OUT (SDA_inport),A JR ACKgenokGenNACK: IN A,(SDA_doport) SET SDA_doport_num,A OUT (SDA_doport),A CALL LWRD I2C_wait5us IN A,(SCL_doport) SET SCL_doport_num,A OUT (SCL_doport),A CALL LWRD I2C_wait5us IN A,(SCL_doport) RES SCL_doport_num,A OUT (SCL_doport),A IN A,(SDA_doport) RES SDA_doport_num,A OUT (SDA_doport),AACKgenok: LD A,C POP BC RET//=============================================//=============================================I2CSendbyte: PUSH BC LD B,8SDAOnextbit: SLA C JR C,SDAO1SDAO0: IN A,(SDA_doport) RES SDA_doport_num,A OUT (SDA_doport),A JR SDAO_OKSDAO1: IN A,(SDA_doport) SET SDA_doport_num,A OUT (SDA_doport),ASDAO_OK: CALL LWRD I2C_wait5us IN A,(SCL_doport) SET SCL_doport_num,A OUT (SCL_doport),A CALL LWRD I2C_wait5us IN A,(SCL_doport) RES SCL_doport_num,A OUT (SCL_doport),A DJNZ SDAOnextbit POP BC RET//===========================================//=================================================//=================================================I2C_wait5us: PUSH AF PUSH BC NOP NOP POP BC POP AF RET//---------------------I2C_wait3us: PUSH AF PUSH BC NOP NOP POP BC POP AF RET//====================================================//========================================================FMwait50ms: PUSH AF PUSH BC LD B,70 //25ms: 50 , 50ms: 100,FMwait50msloop1: PUSH BC//500US LD B,230FMwait50msloop2: PUSH DE POP DE PUSH DE POP DE DJNZ FMwait50msloop2 POP BC DJNZ FMwait50msloop1 POP BC POP AF RET//========================================================//===========================================================READ_STATUS: PUSH BC PUSH HL LD B,05H CALL LWRD FMwait50msFMwaitreadyloop1: DEC B JR Z,READ_STATUS_err CALL LWRD READ_ONEFRAME CP 00H JR Z,FMwaitreadyloop1 LD HL,LWRD READ_BUFFER+2 //判断RF=1? BIT 0,(HL) JR Z,FMwaitreadyloop1READ_STATUS_err: LD A,(LWRD FM_result) POP HL POP BC RET//=============================================================//========================================================// FM wait 50ms//========================================================FMwait50ms_LOSC: PUSH AF PUSH BC IN A,(4eh) OR 08h OUT (4eh),A LD B,1FMwait50msloop1_LOSC: PUSH BC//500us LD B,25FMwait50msloop2_LOSC: PUSH DE POP DE PUSH DE POP DE DJNZ FMwait50msloop2_LOSC POP BC DJNZ FMwait50msloop1_LOSC POP BC POP AF RETWait1024Cycles: push bc ld b,0x80Wait1024Cycles1: djnz Wait1024Cycles1 pop bc retEND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -