|
发表于 2012-9-19 12:44:47
|
显示全部楼层
本帖最后由 xiaoya1945 于 2012-9-19 12:48 编辑
响应一下Lz,我也贴段汇编 IIC EEPROM 的 程式,不过... 只能我自己使用了
- ;;====================================================;;
- ;; Random Read
- Random_Read_Init:
- Disable_All_Interrupt ;;在读写24C02操作中,关闭中断,以防出错
- LD A,#0FH
- LD (Time_Out),A
- LDPCH WRITE_WAIT
- CALL WRITE_WAIT
- LDPCH WRITE_WAIT
- CALL WRITE_WAIT
- Random_Read_Start:
-
- LD A,#05H
- LD (WATCH),A ;;Reset WDT
- DEC (Time_Out)
- LDPCH Random_Read_TimeOut
- JZ Random_Read_TimeOut
-
- LDPCH IIC_START
- CALL IIC_START
- Send_Add_R_Command:
- LD A,#Device_Add.N0 ;;发送器件地址和写命令
- AND A,#Write_Command
- LD (DATAL),A
- LD A,#Device_Add.N1
- LD (DATAH),A
- LDPCH WRITE_BYTE ;;写一个Byte到IIC BUS
- CALL WRITE_BYTE
- LDPCH Receive_ACK
- CALL Receive_ACK
- AND A,#0001B
- LDPCH Random_Read_Start
- JNZ Random_Read_Start
- LD A,#Read_Word_Add.N0 ;;指定从器件从word Add读起
- LD (DATAL),A
- LD A,#Read_Word_Add.N1
- LD (DATAH),A
-
- LDPCH WRITE_BYTE
- CALL WRITE_BYTE
- LDPCH Receive_ACK
- CALL Receive_ACK
- AND A,#0001B
- LDPCH Random_Read_Start
- JNZ Random_Read_Start
-
- LDPCH IIC_START
- CALL IIC_START
-
- LD A,#Device_Add.N0 ;;再次发送 从器件地址,并发送读命令
- OR A,#Read_Command
- LD (DATAL),A
- LD A,#Device_Add.N1
- LD (DATAH),A
- LDPCH WRITE_BYTE
- CALL WRITE_BYTE
- LDPCH Receive_ACK
- CALL Receive_ACK
- AND A,#0001B
- LDPCH Random_Read_Start
- JNZ Random_Read_Start
-
- LDPCH READ_BYTE
- CALL READ_BYTE
-
- LDPCH M_to_S_NoACK
- CALL M_to_S_NoACK
-
- LDPCH IIC_STOP
- CALL IIC_STOP ;;Random_Read 结束,读到的数据存放于DATAL和DATAH中
- Random_Read_End:
- LD A,(DATAL) ;;读取到的数据给PB和PD,指示结果
- LD (DATA_PB),A
- LD A,(DATAH)
- LD (DATA_PD),A
-
- LDPCH Main_Loop
- JMP Main_Loop
- Random_Read_TimeOut:
- Enable_All_Interrupt
- LDPCH Main_Loop
- JMP Main_Loop
-
-
复制代码 |
|