;程序说明:将MPU内部的55h~~~58h中的内容由外部中断0经I2C总线写到24c02中,然后由外部中断1将所写的内容读到
;MPU内部数据存储器60H~~63H
SCL EQU P1.1
SDA EQU P1.0
org 0000h
jmp begin
org 0003H
ljmp write
org 0013H
ljmp read
;主程序
begin:
mov 55H,#41H
mov 56h,#42h
MOV 57h,#43H
MOV 58H,#44H
mov tcon,#0
setb ex0
setb ex1
setb ea
main:
nop
jmp main
;**********************************************************
;读24C02的数据的程序
read:
ACALL START ;开始信号
MOV A,#0A0H ;发从机的地址
ACALL SEND ;发送控制字
ACALL ACKI;接收应答
JC OUTEND ;不响应,转结束
MOV A,#00H;设置要读取从器件的片内地址
ACALL SEND
ACALL ACKI
JC OUTEND
ACALL START ;开始信号
ORL A,#0A1H;设置控制字,准备接收
ACALL SEND ;发送控制字
ACALL ACKI
JC OUTEND
MOV R2,#4 ;准备接收数据的字节数
MOV R1,#60H ;接收字节存放在主器件中的地址60H
IN0:
ACALL REV ;接收一个字节
ACALL ACKO;主机向24C02发送应答信号
MOV @R1,A ;把接收到数据存放到存储单元中
INC R1
DEC R2
CJNE R2,#1,IN0 ;判断是否为最后一个接收字节
ACALL REV ;接收最后一个字节
ACALL ACKN;
MOV @R1,A ;把接收到数据存放到存储单元中
OUTEND:
ACALL STOP ;停止信号
jnb p3.3,$
reti
;**********************************************************
;写24C02的数据的程序
write:
LCALL START ;开始信号
MOV A,#0A0H ;定控制字,准备发送
ACALL SEND ;发送控制字
ACALL ACKI ;接收应答
JC WRITEEND ;从器件不响应,转结束
MOV A,#00H ;设置从器件片内地址
ACALL SEND ;发送片内地址
ACALL ACKI
JC WRITEEND
MOV R2,#4;设置发送字节数
MOV R1,#55H ;主器件中要发送数据的头地址
OUT1:
MOV A,@R1
ACALL SEND;发送数据
ACALL ACKI;
JC WRITEEND
INC R1
DJNZ R2,OUT1 ;发送未结束,继续发送
WRITEEND:
ACALL STOP ;停止信号
jnb p3.2,$;防止再次中断
reti
;********************************************************
;********************
;I2C模拟程序
;开始信号
START:
CLR SCL
SETB SDA
ACALL DELAY
SETB SCL
ACALL DELAY
CLR SDA
ACALL DELAY
CLR SCL
RET
; 停止信号:
STOP:CLR SCL
CLR SDA
ACALL DELAY
SETB SCL
ACALL DELAY
SETB SDA
ACALL DELAY
RET
; 接收一个字节
REV: MOV R0,#08H
REV0: SETB SCL
LCALL DELAY
MOV C,SDA
RLC A
CLR SCL
LCALL DELAY
DJNZ R0,REV0
RET
;发送一个字节
SEND:
MOV R0,#08H
CLR SCL
SEND0:
RLC A
MOV SDA,C
SETB SCL
ACALL DELAY
CLR SCL
DJNZ R0,SEND0
SETB SDA
RET
;接收一个应答位:
ACKI:
SETB SCL
ACALL DELAY
MOV C,SDA
CLR SCL
RET
; 发送一个接收应答位
ACKO:
CLR SDA
ACALL DELAY
SETB SCL
ACALL DELAY
CLR SCL
ACALL DELAY
SETB SDA
ACALL DELAY
RET
;发送一个非接收接收应答位
ACKN:
SETB SDA
ACALL DELAY
SETB SCL
ACALL DELAY
CLR SCL
ACALL DELAY
DELAY:
NOP
NOP
NOP
RET
END
关键字:51单片机 驱动I2C 汇编语言
引用地址:
51单片机驱动I2C(24C02)汇编语言程序
推荐阅读最新更新时间:2024-03-16 14:30
51单片机逻辑运算指令表与示例
1.逻辑运算 指令 的一般性说明 与、或、异或的逻辑运算指令可以Acc或direct为目标。但是以direct为目标时,另一操作数只能是Acc或立即数。 与、或、异或是对位逻辑运算。 其他逻辑运算指令只对Acc操作。 小循环不影响Cy,大循环Cy在循环圈内。 除了RLC和RRC,逻辑运算指令不影响P以外的标志位。 2.与、或、异或的特殊用途 用ANL指令屏蔽指定位 例:ANL A,#0FH ;屏蔽高4位 用ORL指令将指定位置1 例:ORL A,#0FH ;将低4位置1 用ORL指令拼接一个字节 例:ANL A,#0FH ANL B,#0F0H ORL A,B 用XRL指令将指定位取反
[单片机]
利用汇编语言实现DES加密算法
DES算法是一种数据加密算法。自从1977年公布以来,一直是国际上的商用保密通信和计算机通信的最常用的加密标准。DES算法的实现一般用高级语言。 关键词:加密算法 DES 汇编语言 目前在金融界及非金融界的保密通信中,越来越多地用到了DES算法。DES(Data Encryption Standard)即数据加密算法,是IBM公司于 1977年研究成功并公开发表的。随着我国三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC卡)中被广泛应用,以此来实现关键数据的保密。如信用卡持卡人的PIN的加密传输、IC卡与POS间的双向认证、金融交易中的密码键盘等,均用到DES算法。由于密码键盘不可能使用高级语言,所以用
[工业控制]
基于AT89S51单片机的低频信号设计及仿真研究
传统的低频信号源或发生装置,因其大部分采用模拟电路设计的原因,一般具有价格昂贵、输出性能欠佳且不便于调节等问题,工程应用价值较低。为避免传统低频信号源或发生装置的上述技术缺点,降低技术开发成本和提高技术开发效率,文中利用AT89S51可以在线编写程序的特点,结合了DAC接口技术,设计了波形、频率、相位均调节方便并可产生方波、三角波、锯齿波、正弦波四种波形的技术方案。这种新的低频信号源设计方案,可以使得波形信号的产生由单片机查表软件产生,波形的周期依靠程序设置来改变,具有线路简单、结构紧凑、价格低廉、性能优越等优点。 1 设计目标和思路 文中设计目标是完成4种波形信号输出,即正弦波、三角波、方波和锯齿波,并使其在低频范围内具
[单片机]
基于51单片机之8个独立式键盘驱动程序
#define KEY P1 //键盘所连接的I/O接口组定义 *********************************************************** 函数名:8个独立式键盘驱动程序 调 用:? = Key (); 参 数:无 返回值:unsigned char 键值0~8 结 果:有键按下时返回值为键值1~8,无键按下时返回值为0 备 注:在主函数中不断调用 *********************************************************/ unsigned char Key ( ){ //8个独立键盘处理程序 unsigned char a,
[单片机]
【51单片机实验】5-串行接口与键盘接口技术应用
一、实验目的 1.掌握51单片机串行口的应用设计 2.掌握按键的工作原理和消抖动的方法 二、实验设备 1、微机一台,Keil C集成开发环境 2、DP-51PRO.NET综合实验箱 3、Proteus仿真软件 三、实验内容 1、P1接8个按键或拨位开关,P2接8个发光LED,编程实现读入单片机P1状态,通过串行方式1实现自发、自收,并将接收到的内容从P2口的LED显示出来。(注意:TXD(P3.1)和RXD(P3.0)的接线。—实验箱的要求,仿真请忽略) 程序及必要的注释: /*单片机自发自收,将P1口信息传给P2口*/ #include reg51.h void main () { SCON
[单片机]
如何在Linux下进行stc51单片机的开发
第一次接触 单片机 ,自然选择了简单的51单片机。然而我的操作系统是 Linux 。在 Windows 下上手51似乎很容易。但是 Linux 上搭建 51 开发环境不是很顺。 那么谈谈 Linux 我如何搭建 STC89C52RC 的开发环境吧。 (一) 选择自己喜好的 代码编辑器 即可。vim , emacs , gedit 等都可以。 (二) 安装编译器。一般选择 sdcc 。一般可从发行版的包管理器中直接安装。 如Arch中: $ sudo pacman -S sdcc 如果不行,需要自行下载编译。 简单介绍使用sdcc: 假如当前目录有一个写好的源文件 main.c 。 使用如下简单方式即可编译。 $ s
[单片机]
51单片机的边沿触发及电平触发的区别
51单片机的边沿触发及电平触发简介及测量 51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。 这个原理很好理解。但应用时需要特别注意的几点: 1)电平触发方式时,中断标志寄存器不锁存中断请求信号。也就是说,单片机把每个机器周期的S5P2采样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要使电
[单片机]
解析8051单片机的三种数据传输方式
单片机CPU与外部设备交换信息通常有如下几种方式:无条件传送方式,查询传送方式和中断传送方式。我们以单片机与微型打印机接口为例讲述这三种方式。假定用户要打印三个数据,这三个数据保存在单片机的内部数据存储器10H,11H,和12H中,8051用并口P2与微型打印机的并行数据口DB进行数据交换。 (1)无条件传送方式 这种数据传送方式中没有联络信号,即CPU总是认为打印机在如何时候都是处于“准备好”的状态。这种传送方式中只需要在程序中加入数据送往P2的指令,数据传送便可以实现。但这种数据传送方式有一个致命弱点,数据易丢失,这是因为CPU的速度相当快,而打印机的速度相对来说较慢,其结果是在打印机打印一个数据的时间内,CPU已送来了多
[单片机]