📄 24c1024.asm
字号:
;***************************************************************************************
;摘 要: 24C16的读写,并将读出的数据从串口送出,串口波特率为4800
;版 本: V1.0
;完成日期: 2008.6.15
;作 者: LANE
;***************************************************************************************
SDA EQU P1.1
SCL EQU P1.0
ORG 0000H
AJMP MAIN
ORG 0023H;串行中断入口
LJMP SAR
ORG 0030H
MAIN: MOV R0,#20H
MOV @R0,#31H
INC R0
MOV @R0,#32H
INC R0
MOV @R0,#33H
INC R0
MOV @R0,#34H
INC R0
MOV @R0,#35H
INC R0
MOV @R0,#36H
INC R0
MOV @R0,#37H
INC R0
MOV @R0,#38H
LCALL SCINIT
MOV R0,#30H
CJNE @R0,#52H,$
MOV R0,#255
MOV R1,#20H ;从20H开始写入8个字符到E2PROM的30H开始的单元
MOV R2,#00H
WRITE: LCALL C2416_W
INC R1
INC R2
CJNE R1,#28H,WINIT
MOV R1,#20H
WINIT: DJNZ R0,WRITE
MOV R1,#27H
MOV R2,#255
LCALL C2416_W
CJNE A,#53H,$
LOOP: MOV R0,#9
MOV R1,#30H ;将读取的数据存到单片机的30H开始的单元
MOV R2,#248
READ: LCALL C2416_R
INC R1
INC R2
DJNZ R0,READ
CJNE A,#54H,$
MOV R0,#10
MOV R1,#30H
SLOOP: MOV A,@R1
LCALL SEND
LCALL DELAY
INC R1
DJNZ R0,SLOOP
MOV A,R2
LCALL SEND
AJMP LOOP
;----------------------------------------------------------
;摘要:24C16写子程序
;参数:R2为写入E2PROM的地址,R1为数据在单片机中的地址
;----------------------------------------------------------
C2416_W:
LCALL START ;启动
MOV A,#0A0H ;写控制字
LCALL BYTE_W ;调用字节写
LCALL ACK ;调用应答
MOV A,R2 ;写入E2PROM单元地址
LCALL BYTE_W
LCALL ACK
MOV A,@R1 ;写数据
LCALL BYTE_W
LCALL ACK
LCALL STOP
LCALL DELAY
RET
;----------------------------------------------------------
;摘要:24C16读子程序,
;参数:从R2单元读取数据,R1为读出的数据存在单片机中的地址
;----------------------------------------------------------
C2416_R:
LCALL START
MOV A,#0A0H
LCALL BYTE_W
LCALL ACK
MOV A,R2 ;从E2PROM的R2单元的读取数据
LCALL BYTE_W
LCALL ACK
LCALL START
MOV A,#0A1H ;DEVICE ADDRESS WORD
LCALL BYTE_W
LCALL ACK
LCALL BYTE_R
MOV @R1,A
LCALL MNACK
LCALL STOP
RET
;----------------------------------------------------------
;串口初始化
;----------------------------------------------------------
SCINIT:
MOV TMOD,#20H ;设置定时器 T1 方式 2
MOV PCON,#00H ;使 SMOD 为 0
MOV TL1,#0FAH ;波特率为 4800b/s
MOV TH1,#0FAH ;8位重装值
SETB EA ;开全局中断
CLR ET1 ;关 T1 中断
SETB ES ;开串行中断
SETB TR1 ;开 T1 定时
MOV SCON,#50H ;串行方式 1 ,允许接收
RET
;------------------------------------------------
;串口中断收子程序
;------------------------------------------------
SAR: MOV A,SBUF ;接收数据
CLR RI
MOV @R0,A
SCIEND: RETI
;----------------------------------------------------------
;串口发数据
;----------------------------------------------------------
SEND: CLR ES
MOV SBUF,A
JNB TI,$
CLR TI
RET
;----------------------------------------------------------
;字节读子程序
;----------------------------------------------------------
BYTE_R: MOV R3,#08H
CLR SCL
LCALL WAIT
BIT_R: SETB SCL
LCALL WAIT
MOV C,SDA
LCALL WAIT
CLR SCL
LCALL WAIT
RLC A
DJNZ R3,BIT_R
CLR SDA
LCALL WAIT
LCALL STOP
RET
;----------------------------------------------------------
;字节写子程序
;----------------------------------------------------------
BYTE_W: MOV R3,#08H
BIT_W: RLC A
MOV SDA,C
LCALL WAIT
SETB SCL
LCALL WAIT
CLR SCL
LCALL WAIT
DJNZ R3,BIT_W
RET
;----------------------------------------------------------
;启动子程序
;----------------------------------------------------------
START: SETB SDA ;启动子程序
LCALL WAIT
CLR SCL
LCALL WAIT
SETB SCL
LCALL WAIT
CLR SDA
LCALL WAIT
CLR SCL
LCALL WAIT
RET
;----------------------------------------------------------
;停止子程序
;----------------------------------------------------------
STOP: CLR SDA
LCALL WAIT
SETB SCL
LCALL WAIT
SETB SDA
LCALL WAIT
CLR SCL
LCALL WAIT
CLR SDA
RET
;----------------------------------------------------------
;时钟脉冲信号子程序
;----------------------------------------------------------
ACK: SETB SCL
LCALL WAIT
CLR SCL
LCALL WAIT
RET
;----------------------------------------------------------
;发送应答信号子程序
;----------------------------------------------------------
MACK: CLR SDA
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
SETB SDA
RET
;----------------------------------------------------------
;发送非应答信号子程序
;----------------------------------------------------------
MNACK: SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
CLR SDA
RET
;----------------------------------------------------------
;延时4.7uS子程序
;----------------------------------------------------------
WAIT: NOP
NOP
NOP
NOP
NOP
RET
;----------------------------------------------------------
;延时程序
;----------------------------------------------------------
DELAY: MOV R7,#0F0H
DJNZ R7,$
MOV R7,#0C0H
DJNZ R7,$
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -