zoukankan      html  css  js  c++  java
  • 24C02操作--松瀚汇编源码

    ;
    					
    ;		P_CLKIIC 	EQU	P1.2
    ;		P_DATIIC	EQU	P1.3
    ;		PM_DATIIC	EQU	P1M.3	
    
    ;		EE_ADDR		DS	1    	;地址寄存器
    ;		TMP3_IIC	DS	1
    ;		TMP2_IIC	DS	1
    ;		TMP1_IIC	DS	1
    ;		DATA_TEMP	DS	1	;数据缓存
    ;		R_DATA		DS	1	;读数据寄存器	
    ;		W_DATA		DS	1	;写数据寄存器
    
    ;*************************************************
    ;功能:读出一认定地址的数据
    ;INPUT:  EE_ADDR_H  , EE_ADDR_L  --> EE_ADDR
    ;OUTPUT: R_DATA		
    ;影响参数:DATA_TEMP ,TMP1_IIC ,TMP2_IIC	,TMP3_IIC,TMP4_IIC
    ;======================================
    READ_EEPROM:
    	MOV A,#200
    	MOV TMP2_IIC,A	
    READ_EEPROM_LOOP0:	
    ;------------
    	B0BSET	PM_DATIIC			;SET  OUT MODEL
    	CALL	STAR_CONDITION
    	MOV	A,#10100000B
    	B0MOV	DATA_TEMP,A
    	CALL	SEND_DATA_ADD		;写模式,写入高3位地址	
    	B0BCLR	PM_DATIIC			;IN MODEL	
    	B0BSET	P_CLKIIC
    	B0BTS1	P_DATIIC	
    	JMP 	READ_EEPROM_LOOP1	
    	DECMS 	TMP2_IIC
    	JMP 	READ_EEPROM_LOOP0
    	BSET	F_ERRIIC	
    READ_EEPROM_LOOP1:
    	B0BCLR	P_CLKIIC
    	B0BSET	PM_DATIIC			;OUT MODE
    	MOV	A,EE_ADDR
    	MOV	DATA_TEMP,A
    	CALL	SEND_DATA_ADD		;写入低8位地址
    	B0BCLR	PM_DATIIC			;IN MODEL
    	B0BSET	P_CLKIIC
    	MOV 	A,#200
    	MOV 	TMP2_IIC,A	
    READ_EEPROM_LOOP2:	
    	B0BTS1	P_DATIIC	
    	JMP 	READ_EEPROM_LOOP3	
    	DECMS 	TMP2_IIC
    	JMP 	READ_EEPROM_LOOP2
    	BSET	F_ERRIIC		
    READ_EEPROM_LOOP3:
    	B0BCLR	P_CLKIIC
    	B0BSET	PM_DATIIC			;OUT MODEL
    	CALL	STAR_CONDITION	
    	MOV	A,#10100001B
    	MOV	DATA_TEMP,A
    	CALL	SEND_DATA_ADD		;读出数据
    	B0BCLR	PM_DATIIC			;IN MODEL
    	B0BSET	P_CLKIIC
    	MOV 	A,#200
    	MOV	 TMP2_IIC,A	
    READ_EEPROM_LOOP4:	
    	B0BTS1	P_DATIIC	
    	JMP 	READ_EEPROM_LOOP5	
    	DECMS 	TMP2_IIC
    	JMP 	READ_EEPROM_LOOP4
    	BSET	F_ERRIIC		
    READ_EEPROM_LOOP5:
    	B0BCLR	P_CLKIIC	
    	CALL	OUT_DATA_X
    	B0BSET	PM_DATIIC			;OUT MODEL
    	CALL	STOP_CONDITION
    	B0BCLR	PM_DATIIC			;IN MODEL
    ;-------------	
    	MOV 	A,DATA_TEMP
    	MOV 	R_DATA,A     		 ;8.28
    	RET
    ;************************************************************************
    ;功能:定入一指定地址的数据
    ;INPUT:  EE_ADDR_H  , EE_ADDR_L ,W_DATA
    ;OUTPUT: F_EER ,24写入有错		
    ;影响参数:DATA_TEMP ,TMP1_IIC ,TMP2_IIC	,TMP3_IIC
    ;===================================================
    WRITE_EEPROM:
    ;先读出,与写入相同则不写 --> 如果读出的数与要写的数一致则不用再写
    		
    	CALL	READ_EEPROM	;
    
    	MOV	A,R_DATA
    	XOR	A,W_DATA
    	BTS0	FZ
    	RET
    
    ;=================================
    	MOV	A,#3		;如果写数据失败则重复写 最多写3次
    	MOV	TMP3_IIC,A
    ;------------
    WRITE_EEPROM00:		
    	B0BSET	PM_DATIIC		;SET P1.3 OUT MODEL
    	CALL	STAR_CONDITION
    	MOV	A,#10100000B		;写入高3位地址
    	MOV	DATA_TEMP,A
    	CALL	SEND_DATA_ADD		;DEVICE_ADDRESS
    	B0BCLR	PM_DATIIC		;IN MODEL
    	B0BSET	P_CLKIIC
    	MOV 	A,#200
    	MOV 	TMP2_IIC,A	
    WRITE_EEPROM_LOOP0:	
    	B0BTS1	P_DATIIC	
    	JMP 	WRITE_EEPROM_LOOP1	
    	DECMS 	TMP2_IIC
    	JMP 	WRITE_EEPROM_LOOP0
    	BSET	F_ERRIIC		
    WRITE_EEPROM_LOOP1:
    	B0BCLR	P_CLKIIC
    	B0BSET	PM_DATIIC			;OUT
    	MOV	A,EE_ADDR
    	MOV	DATA_TEMP,A
    	CALL	SEND_DATA_ADD		;写入低8位地址
    	B0BCLR	PM_DATIIC			;IN MODEL
    	B0BSET	P_CLKIIC
    	MOV 	A,#200
    	MOV 	TMP2_IIC,A	
    WRITE_EEPROM_LOOP2:	
    	B0BTS1	P_DATIIC	
    	JMP 	WRITE_EEPROM_LOOP3	
    	DECMS 	TMP2_IIC
    	JMP 	WRITE_EEPROM_LOOP2
    	BSET	F_ERRIIC		
    WRITE_EEPROM_LOOP3:
    	B0BCLR	P_CLKIIC
    	B0BSET	PM_DATIIC		;OUT	
    	MOV	A,W_DATA
    	MOV	DATA_TEMP,A
    	CALL	SEND_DATA_ADD		;写入的数据
    	B0BCLR	P_DATIIC;
    	B0BCLR	PM_DATIIC		;IN MODEL
    	B0BSET	P_CLKIIC
    	MOV 	A,#200
    	MOV 	TMP2_IIC,A	
    WRITE_EEPROM_LOOP4:	
    	B0BTS1	P_DATIIC	
    	JMP 	WRITE_EEPROM_LOOP5	
    	DECMS 	TMP2_IIC
    	JMP 	WRITE_EEPROM_LOOP4
    	BSET	F_ERRIIC		
    WRITE_EEPROM_LOOP5:
    	B0BCLR	P_CLKIIC
    	B0BSET	PM_DATIIC			;OUT	
    	B0BSET	P_DATIIC
    	JMP $+1
    	B0BCLR	P_DATIIC
    	CALL	STOP_CONDITION	
    	CALL	STOP_CONDITION
    	B0BCLR	PM_DATIIC			;IN MODEL
    ;---------------
    ;读出比较是否与定入的一致
    	CALL	READ_EEPROM
    	MOV	A,R_DATA
    	CMPRS	A,W_DATA
    	RET
    	DECMS	TMP3_IIC
    	JMP	WRITE_EEPROM00
    	BSET	F_EEPOM_W		
    	RET
    ;----------------
    OUT_DATA_X:
    	CLR	DATA_TEMP
    	MOV	A,#8H
    	MOV	TMP1_IIC,A
    OUT_LOOP1:	
    	B0BCLR	PFLAG.2
    	B0BTS0	P_DATIIC
    	B0BSET	PFLAG.2
    ;===========================
    
    	JMP 	$+1
     	JMP 	$+1
    	B0BSET	P_CLKIIC	
    	JMP 	$+1
     	JMP 	$+1
    	B0BCLR	P_CLKIIC
    ;==========================
    	RLCM	DATA_TEMP
    	DECMS	TMP1_IIC
    	JMP	OUT_LOOP1
    	RET	
    ;----------------
    SEND_DATA_ADD:			;
    	MOV	A,#8H
    	MOV	TMP1_IIC,A
    SEND_LOOP1:
    	RLCM	DATA_TEMP
    	B0BCLR	P_DATIIC
    	B0BTS0	PFLAG.2
    	B0BSET	P_DATIIC
    ;===========================
    	JMP 	$+1
     	JMP 	$+1
    	B0BSET	P_CLKIIC	
    	JMP 	$+1
     	JMP 	$+1
    	B0BCLR	P_CLKIIC
    ;==========================
    	DECMS	TMP1_IIC
    	JMP	SEND_LOOP1
    	RLCM	DATA_TEMP
    	RET		
    ;---------
    POSITIVE_EDGE:		;起始信号
    	JMP 	$+1
     	JMP 	$+1
    	B0BSET	P_CLKIIC	
    	JMP 	$+1
     	JMP 	$+1
    	B0BCLR	P_CLKIIC
    	RET	
    ;----------	
    STAR_CONDITION:		;结束信号
    	B0BSET	P_CLKIIC
    	B0BSET	P_DATIIC
    	JMP $+1
    	JMP $+1
    	B0BCLR	P_DATIIC	
    	JMP $+1
      	JMP $+1
    	B0BCLR	P_CLKIIC	
    	RET	
    ;------------	
    STOP_CONDITION:			;
    	B0BCLR	P_DATIIC
    	B0BSET	P_CLKIIC		
    	JMP 	$+1
    	JMP 	$+1
    	B0BSET	P_DATIIC
    	JMP 	$+1
    	JMP 	$+1
    	B0BCLR	P_CLKIIC
    	B0BCLR	P_DATIIC	
    	RET		
    	


  • 相关阅读:
    C 和 C++ 的标准库分别有自己的 locale 操作方法,C 标准库的 locale 设定函数是 setlocale(),而 C++ 标准库有 locale 类和流对象的 imbue() 方法(gcc使用zh_CN.GBK,或者zh_CN.UTF-8,VC++使用Chinese_People's Republic of China.936或者65001.)
    QCache 缓存(模板类,类似于map,逻辑意义上的缓存,方便管理,和CPU缓存无关。自动获得被插入对象的所有权,超过一定数量就会抛弃某些值)
    QBuffer简单操作(被看做一个标准的可随机访问的文件,支持信号)
    Qt里的原子操作QAtomicInteger
    进程、线程、协程、例程、过程
    net Core 2.2
    如何看源码
    code review规则
    NET Core中使用Dapper操作Oracle存储过程
    实现一个Promise
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3235276.html
Copyright © 2011-2022 走看看