;简洁的24C02读写汇编程序
;--------------------------------------------
I2C_SDA EQU P1.6 ; PIN 5
I2C_SCL EQU P1.7 ; PIN 6
;=============================================
I2C_WRITE: ; WRITE 8 BYTES TO EEROM ; INPUT: A - A*8 = EEROM START ADDR
; R0 - RAN START ADDR
; USE: C, A, R0, R6, R7
ACALL I2C_START
ACALL OUT
MOV R6, #8
WR_LP:MOV A, @R0
ACALL OUT
INC R0
DJNZ R6, WR_LP
AJMP I2C_STOP
;==========================================
I2C_READ: ; READ 8 BYTES FROM EEROM ; INPUT: A - A*8 = EEROM START ADDR
; R0 - RAN START ADDR
; USE: C, A, R0, R6, R7
ACALL I2C_START
ACALL OUT
MOV R6, #8
MOV A, #0A1H; #RDCMD
ACALL OUTS
BRDLP:
MOV R7, #8
SETB I2C_SDA
INLP: CLR I2C_SCL
ACALL DELAY6
SETB I2C_SCL
NOP
MOV C, I2C_SDA
RLC A
DJNZ R7, INLP
CLR I2C_SCL
MOV @R0, A
INC R0
DJNZ R6, ACKLP
;;;;----------------------------
I2C_STOP:
CLR I2C_SDA
ACALL DELAY5
SETB I2C_SCL
ACALL DELAY5
SETB I2C_SDA
DELAY6:
NOP
DELAY5:
NOP
RET
;;-----------------------------
I2C_START:
SWAP A
RR A
MOV R6, A
MOV A, #0A0H; #WTCMD
ACALL OUTS
MOV A, R6
RET
;-------------------------------
ACKLP:
CLR I2C_SDA
SETB I2C_SCL
ACALL DELAY5
CLR I2C_SCL
AJMP BRDLP
;=======================
OUTS:
SETB I2C_SDA
SETB I2C_SCL
ACALL DELAY5
CLR I2C_SDA
ACALL DELAY5
CLR I2C_SCL
;========================
OUT:
SETB C
MOV R7, #9
OTLP: RLC A
NOP
MOV I2C_SDA, C
NOP
NOP
SETB I2C_SCL
ACALL DELAY5
CLR I2C_SCL
DJNZ R7, OTLP
RET
;========================
END
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号
享受更多官方福利
推荐阅读
STC15单片机实验名称:使用NTC电阻测量温度实验内容: 使用NTC电阻测量温度并显示在数码管上 读取DS18B20模块测量温度作为参考实验器材: STC15W408AS_DIP16 x1 DS18B20 x1 TM1637数码管 x1
发表于 2020-12-17
/*一款电子钟程序,此电子钟是四位电子钟数码管组成的,功能分别有走时、响闹、走时间调整、闹钟时间调整等功能!调整部分分别由三个按键实现,一个功能键,一个+(加)键,另一个为-(减)键,其它功能键是复用功能!*/硬键介绍:数码管个位.十位.百位.千位.小数点分别接P0.0 P0.1 P0.2 P0.3 P0.4。蜂鸣器接P3.5脚,功能按键接P3.2 加按键接P3.3 减按键接P3.4以下是两张图片!!!#include //头文件#define uchar unsigned char//宏定义#define uint unsigned int//宏定义uchar shi,fen,nshi,nfen,ma
发表于 2020-12-17
51单片机做的温度显示,温度显示在LCD1602液晶屏上。然后按键可以调整温度阈值,温度高于或低于所设温度,蜂鸣器就会响……单片机源程序如下:/*************************************************************************************** 基于单片机的实时温度报警系统设计  
发表于 2020-12-17
当电机较大时,启动是个必须注意的问题。比较简单且用的很多的是星三角启动,这里写出了星三角启动的核心部分。每一个IO口接上继电器,再控制交流接触器,就OK了。但,要注意,星、角交流接触器一定要互锁,否则一旦某个交流接触器粘连,就造成短路了。#include sbit K1=P3^1; //按键1,控制第1个继电器启动sbit K2=P3^2; //按键2,控制第2个继电器启动sbit J1=P1^5; //星接继电器sbit J2=P1^6; //星点继电器sbit J3=P1^7; //角继电器void Delay_1ms(unsigned i
发表于 2020-12-16
、技术性能稳定等特点而受到广大用户和专业人士的欢迎。而本设计的电路包括硬件和软件两个部分。硬件部分包括红外感应部分与单片机控制部分。整个系统电路可划分为:电源部分、传感器模块部分、单片机控制电路,而单片机控制由最小系统和指示灯电路、报警电路等子模块组成。主要工作由热释电红外感应器完成信息采集、处理、数据传送经过单片机功能设定到达报警模块这一过程。就此设计的核心模块来说,单片机就是设计的中心单元。单片机应用系统也是由硬件和软件组成。硬件包括单片机、输入/输出设备、以及外围应用电路等组成的系统,软件是主要是工作的程序通过编写程序来控制输入的信号。二、设计任务分析1.该设计包括硬件和软件设计两个部分。模块划分为数据采集、按键设定、报警
发表于 2020-12-16
用一个按键控制四个继电器循环导通,程序由51单片机的程序改到STC15F104W上,第一次按键,第一个继电器吸合,第二次按键,第二个继电器吸合,第一个继电器释放,以此类推。最初的想法就是实现电风扇,三档开关,程序里面可以修改端口。#includesbit key = P3^4; //定义按键void delayms(void); //延时void led_refresh(unsigned char
发表于 2020-12-16