;

;		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

24C02操作--松瀚汇编源码的更多相关文章

  1. 松瀚SN8P2501 定时器初始化程序--汇编源码

    /* 松瀚 SN8P2501B 定时器初始化程序 */ INI_IRQ: ;定时器T0初始化 MOV A, #01100000b ;定时器模式Fcpu/4 16M/4/4=1M 1U计一次 B0MOV ...

  2. 松瀚SN8P2711 2722 ADC初始化程序及应用--汇编源码

    /* 松瀚 SN8P2711 2722 ADC初始化程序 及应用实例 */ INIT_ADC: MOV A, #0XB2 // 启动ADC电路 使能AIN通道 B0MOV ADM, A MOV A,# ...

  3. C# Retry重试操作解决方案(附源码)

    一.前言 (1)对于Thread的Abort方法,如果线程当前正在执行的是一段非托管代码,那么CLR就不会抛出ThreadAbortException,只有当代码继续回到CLR中时,才会引发Threa ...

  4. 用普通IO驱动LCD的控制方法-松瀚汇编源程序

    /*************************************** 本例程为IO直接驱动LCD的方法 以下是松瀚MCU汇编源程序 **************************** ...

  5. [IO] C# DirFileHelper文件与文件夹操作类教程与源码下载 (转载)

    点击下载 DirFileHelper.zip 主要功能如下所示 // 摘要: // 向文本文件的尾部追加内容 // // 参数: // filePath: // 文件的绝对路径 // // conte ...

  6. ExcelReport.cs Excel操作类、实例源码下载

    标题一.告别ASP.NET操作EXCEL的烦恼标题二.ASP.NET操作EXCEL 合并单元格 大全... cnblogs/hanzhaoxin/韩兆新的博客园ExcelReport第一篇:使用Exc ...

  7. eclipse连接mysql数据库实现怎删改查操作实例(附带源码)

    package model; public class User { private int id; private String name; private String password; pub ...

  8. 如何用C++封装一个简单的数据流操作类(附源码),从而用于网络上的数据传输和解析?

    历史溯源 由于历史原因,我们目前看到的大部分的网络协议都是基于ASCII码这种纯文本方式,也就是基于字符串的命令行方式,比如HTTP.FTP.POP3.SMTP.Telnet等.早期操作系统UNIX( ...

  9. 《Linux内核设计的艺术》学习笔记(一)从开机加电到加载三个汇编源码

      实验内核版本:0.11 ◆ 从开机到main函数的三步: ① 启动BIOS,准备实模式下的中断向量表和中断服务程序: ② 从启动盘加载OS程序到内存中,加载OS程序的工作就是利用第一步中的中断服务 ...

随机推荐

  1. forward && redirect 区别介绍

    解释一 一句话,转发是服务器行为,重定向是客户端行为.为什么这样说呢,这就要看两个动作的工作流程: 转发过程:客户浏览器发送http请求---->web服务器接受此请求-->调用内部的一个 ...

  2. 部分视图调用方法总结(Action 、 RenderAction 、 Partial 、 RenderPartial)

    Action . RenderAction . Partial . RenderPartial 1.Action . RenderAction Action 方法以字符串的形式返回子视图,可以直接被呈 ...

  3. mysql 监控工具monyog使用总结

    1. 下载安装 2. 登录之后,查看 locked queries 2. 慢查询

  4. Lucas定理及其应用

    Lucas定理这里有详细的证明. 其实就是针对n, m很大时,要求组合数C(n, m) % p, 一般来说如果p <= 10^5,那么就能很方便的将n,m转化为10^5以下这样就可以按照乘法逆元 ...

  5. 程序模拟浏览器请求及会话保持-python实现

    http://www.cnblogs.com/zxlovenet/p/4006649.html

  6. ANDROID_MARS学习笔记_S02_005_AppWidget1

    一.AppWidget介绍 1.要在手机生成AppWidget需的东西 (1)AppWidgetProviderInfo a).res\xml\example_appwidget_info.xml b ...

  7. 自定义NavigationView's item 的高度

    http://stackoverflow.com/questions/31204320/how-can-i-change-the-navigationviews-item-text-size 自定义s ...

  8. laravel 模板 blade

    控制器布局 在Laravel框架中使用模板的一种方法就是通过控制器布局.通过在控制器中指定 layout 属性,对应的视图会被创建并且作为请求的默认返回数据. 在控制器中定义一个布局 class Us ...

  9. VM8下安装Mac OS X 10.7

    下载Mac OS X  10.7 安装包http://115.com/file/clj1iu8m#            下载HJMac http://115.com/file/cljyu1rh#   ...

  10. openssl的CRYPTO_set_locking_callback

    openssl可以在多线程环境下使用,但前提是向openssl提供线程锁设施,通过CRYPTO_set_locking_callback设置. 在一些复杂软件环境环境中,可能存在多个上层模块同时使用o ...