|
IC377_CS1 EQU P2.0
IC377_CS2 EQU P2.1
IC377_CS3 EQU P2.2
IC377_WR EQU P2.3
WP EQU P2.4
SCL EQU P2.5
SDA EQU P2.6
IC4094_RX EQU P1.0
IC4094_TX EQU P1.1
IC4094_ST EQU P1.2
org 0000h
ljmp setup;转向初始化设置程序
org 000bh
ljmp timer0;转向定时器0中断服务程序
org 0023h
ljmp uart_yb;转向串行接收中断服务程序
org 0030h
setup:
;TMOD: GATE|C/!T|M1|M0|GATE|C/!T|M1|M0
MOV TMOD,#00100001B; 0 0 1 0 0 0 0 1
MOV TH1,#0FFH ;波特率57600
MOV TL1,#0FFH
;SCON: SM0|SM1|SM2|REN|TB8|RB8|TI|RI
MOV SCON,#01010000B ; 0 1 0 1 0 0 0 0
MOV PCON,#10000000B ;SMOD=1
SETB TR1
;setb ren;允许接收数据
;setb es 允许从中断中接收数据
;setb ea;开启总中断
MOV P0,#0;面板清零不显示
LCALL XIE377_3
LCALL XIE377_2
LCALL XIE377_1
mov p0,#0ffh;恢复复位状态
clr wp;允许写24c64eeprom,地址从0000h~1fffh共8192个字节
main:
CLR RI ;准备好接受上位机信息
JNB RI,$ ;等待接收
MOV b,sbuf ;保存到b中
mov dptr,#100h ;选24c64eeprom任意地址
call write24c ;调用,默认将b中数据写到24c64eeprom以dptr所指示的单元中
mov dptr,#100h ;任意取24c64eeprom中某个单元地址
call read24c ;调用读取24c64eeprom
clr ti ;准备好传送给上位机
MOV SBUF,A ;传送给上位机
jnb ti,$ ;等待传送完毕
jmp main
WRITE24C:
LCALL INVI ;开始条件
MOV A,#0a0H;特征字
LCALL WRI ;写
JB SDA,WRITE24C;写入了吗
MOV A,dph ;片地址 H
LCALL WRI ;写
JB SDA,WRITE24C;写入了吗
MOV A,dpl ;片地址 L
LCALL WRI ;写
JB SDA,WRITE24C;写入了吗
MOV A,b ;数据
LCALL WRI ;写
JB SDA,WRITE24C;写入了吗
LCALL STOP ;停止条件
RET
READ24C:
LCALL INVI
MOV A,#0A0H
LCALL WRI
JB SDA,READ24C
MOV A,dph ;片地址H
LCALL WRI
JB SDA,READ24C
MOV A,dpl ;片地址L
LCALL WRI ;写
JB SDA,READ24C;写入了吗
LCALL INVI
MOV A,#0A1H
LCALL WRI
JB SDA,READ24C
LCALL RRD
LCALL STOP
RET
DEL10US:
MOV R7,#18
DEL:MOV R6,#0H
DJNZ R6,$
DJNZ R7,DEL
RET
RRD: ;MOV R0,#30H
MOV R2,#08H
RDD:CLR SCL
SETB SCL
MOV C,SDA
RLC A
CLR SCL
DJNZ R2,RDD
LCALL ACK
;读取结果在A中
RET
ACK: CLR SDA
SETB SCL
CLR SCL
RET
WRI: MOV R2,#08H
clr c
CLR SCL
WRII:
RLC A
MOV SDA,C
CLR SCL
SETB SCL
CLR SCL
DJNZ R2,WRII
SETB sda
SETB SCL
RET
INVI:CLR SCL ;SCL为低允许数据线改变,不认为是起始或停止信号
SETB SDA ;数据线保持高电平
SETB SCL ;准备启动i2c总线
CLR SDA ;启动信号
CLR SCL ;启动完成
setb sda
RET
STOP:CLR SCL
CLR SDA
SETB SCL
SETB SDA
RET
XIE377_3:
CLR IC377_CS3
CLR IC377_WR
SETB IC377_WR
SETB IC377_CS3
RET
XIE377_2:
CLR IC377_CS2
CLR IC377_WR
SETB IC377_WR
SETB IC377_CS2
RET
XIE377_1:
CLR IC377_CS1
CLR IC377_WR
SETB IC377_WR
SETB IC377_CS1
RET
timer0:
reti
uart_yb:
;允许从中断中接收数据
reti