📄 iicnet1.a51.bak
字号:
;20060422 12:00通过对24c512的变地址读写
;---------------------------------------------------------------------------------
;COM单元程序
;---------------------------------------------------------------------------------
CS BIT P3.7 ;eeprom喂狗
ComTxed bit 00H ;数据发送成功标记
;---------------------------------------------------------------------------------
;IIC单元程序
;---------------------------------------------------------------------------------
;引脚定义
SDA BIT P3.3
SCL BIT P3.2
WDT BIT P1.4
;常量定义
IICWAD_C EQU 60H ;IIC读写半周期延时
C512Wr EQU 0A0H ;24C512写入指令
C512Rd EQU 0A1H ;24C512读出指令
;位变量定义
IICReAckB BIT 01H ; IIC接收返回应答信号接收成功标记,1时接收成功
;变量定义
IICDelayCo DATA 30H ;延时子程序延时计数器
IICRCo DATA 31H ;IIC总线发送和接收数据字节时所用的位计数器
IICData DATA 32H ;从IIC总线接收的数据字节
IICWAD DATA 33H ;IIC等待应答信号检测应答次数
C512Ad0 DATA 34H ;24C512读写地址0
C512Ad1 DATA 35H ;24C512读写地址1
C512Data DATA 36H ;24C512读写数据
;*********************************************************************************
;程序开始
;*********************************************************************************
ORG 0000H
AJMP 0030H
;---------------------------------------------------------------------------------
;中断入口
;---------------------------------------------------------------------------------
ORG 0003H ;外中断0入口
;AJMP $
ORG 000BH ;定时器0中断入口
;AJMP $
ORG 0013H ;外中断1入口
;AJMP $
ORG 001BH ;定时器1中断入口
;AJMP $
ORG 0023H ;com口
;AJMP $
ORG 002BH ;定时器2中断入口
;AJMP $
;*********************************************************************************
;主程序
;*********************************************************************************
ORG 0030H
STAR:
MOV SP,#10H ;设定堆栈起始地址
MOV P1,#0FFH
CLR RS0 ;选择寄存器组0
CLR RS1
;---------------------------------------------------------------------------------
;初始化计算脉冲长度的定时器0
;---------------------------------------------------------------------------------
MOV TMOD,#21H ;定时器0 1的工作方式
;MOV TH0,#00H
;MOV TL0,#00H
;SETB TR0
MOV TL1,#0FAH ;22.1184-9600
MOV TH1,#0FAH
SETB TR1
;com口工作方式
MOV SCON,#52H
;MOV PCON,#80H ;倍增波特率
;SETB TR0
;SETB TR1
;MOV IE,#00H
CLR RI
;SETB TI
MOV C512Ad1,#00H
MOV C512Ad0,#01H
MOV C512Data,#5FH
;---------------------------------------------------------------------------------
;主循环
;---------------------------------------------------------------------------------
MAIN:
ACALL rst_wdog
ACALL IICTEST
AJMP MAIN
;---------------------------------------------------------------------------------
;---------------------------------------------------------------------------------
;子程序开始
;---------------------------------------------------------------------------------
;---------------------------------------------------------------------------------
;IIC TEST
;---------------------------------------------------------------------------------
IICTEST:
JNB RI,IICTESTEND
CLR RI
MOV A,SBUF
CJNE A,#01H,IICTEST_20
IICTEST_10:
INC C512Data
ACALL IICWr512
JB IICReAckB,IICTEST_11
MOV A,#0EEH
MOV SBUF,A
AJMP IICTESTEND
IICTEST_11:
MOV A,C512Data
MOV SBUF,A
AJMP IICTESTEND
IICTEST_20:
CJNE A,#02H,IICTEST_30
ACALL IICRd512
JB IICReAckB,IICTEST_21
MOV A,#0EEH
MOV SBUF,A
AJMP IICTESTEND
IICTEST_21:
MOV A,IICData
MOV SBUF,A
AJMP IICTESTEND
IICTEST_30:
CJNE A,#03H,IICTEST_40
INC C512Ad0
MOV A,C512Ad0
MOV SBUF,A
AJMP IICTESTEND
IICTEST_40:
CJNE A,#04H,IICTEST_50
DEC C512Ad0
MOV A,C512Ad0
MOV SBUF,A
IICTEST_50:
CJNE A,#05H,IICTESTEND
ACALL IICCR
JB IICReAckB,IICTEST_51
MOV A,#0EEH
IICTEST_51:
MOV SBUF,A
IICTESTEND:
RET
IICCR:
ACALL IICStart ;启动iic传送
;发送寻址数据
MOV A,#C512Rd ;读取要操作的器件地址和操作方向(读/写)到累加器
ACALL IICSendByte ;发送累加器中的数据
CLR IICReAckB ;清零返回应答位
ACALL IICWaitAck ;等待应答动作
JNB IICReAckB,IICCREND;无应答跳转结束传送,有应答继续传送
;读出数据(连续批量读出数据时可以修改该处)
ACALL IICRecByte ;发送累加器中的数据
ACALL IICNoAck ;发送不应答
IICCREND: ;无应答转入点
ACALL IICStop ;发送iic结束通讯
RET
;---------------------------------------------------------------------------------
; Name : ComTx
; Function : send data from Tx Pin
; Calls : None
; Input : None
; Outputs : None
; Register : None
; Return : None
; Date : 20060420 Heng
;---------------------------------------------------------------------------------
ComTx:
jnb TI,ComTx00
mov A,#5FH
mov sbuf,A
clr TI
setb ComTxed
ajmp ComTx10
ComTx00:
clr ComTxed
ComTx10:
ret
;*********************************************************************************
;* Name: RST_WDOG
;* Description: Reset Watchdog Timer
;* Function: 在没有输入输出时喂狗
;* Calls: None
;* Input: None
;* Outputs: None
;* Register Usage: None
;*********************************************************************************
rst_wdog:
clr cs ; Bring /CS low to reset watchdog
setb cs ; Bring /CS high
ret
;**********************************************************
;iic
;**********************************************************
;---------------------------------------------------------------------------------
; Name : IICDelay
; Function : iic延时函数传送半位延时
; Calls : None
; Input : None
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -