⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iic.asm

📁 自制单片机实验板.rar
💻 ASM
字号:
;*****************************************************
;
;     This programme is for study Ver2.0.0 beta
;    I2C reader/writer programme for MCS-51's
;         For PHILIPS PCF8563 timer-chip
;This programme mast be run in 12MHz standard settings
;               Designer: Mr.Koii
;           Copyright 2002 koiistudio
;     2003.03.31 at Changsha. H.N. P.R.China
;
;*****************************************************

;*****************************************************
;参数定义
;*****************************************************

scl                     bit     p1.6                    ;时钟引脚
sda                     bit     p1.7                    ;数据引脚

;*****************************************************
;时钟数据设置
;*****************************************************

timer_set:              mov     r0,#date_data           ;时钟相关设置
                        mov     @r0,#0                  ;Control status 1
                        inc     r0
                        mov     @r0,#11h                ;Control status 2
                        inc     r0
                        mov     @r0,#00h                ;Seconds
                        inc     r0
                        mov     @r0,#15h                ;Minutes
                        inc     r0
                        mov     @r0,#15h                ;Hours
                        inc     r0
                        mov     @r0,#30h                ;Days
                        inc     r0
                        mov     @r0,#07h                ;Weekdays
                        inc     r0
                        mov     @r0,#03h                ;Months
                        inc     r0
                        mov     @r0,#03h                ;Years
                        inc     r0
                        mov     @r0,#80h                ;Minute alarm
                        inc     r0
                        mov     @r0,#80h                ;Hour alarm
                        inc     r0
                        mov     @r0,#80h                ;Day alarm
                        inc     r0
                        mov     @r0,#80h                ;Weekday alarm
                        inc     r0
                        mov     @r0,#83h                ;CLKout control
                        inc     r0
                        mov     @r0,#82h                ;Timer control
                        inc     r0
                        mov     @r0,#01h                ;Timer
                        call    timer_write             ;设置时钟
                        ret

;*****************************************************
;PCF8563应用程序
;写PCF8563
;入口参数:发送缓冲@r1
;*****************************************************

timer_write:            call	iicstart
                        mov	a,#0a2h			;器件地址和写指令
                        call	iicwbyte
                        call	iiccack
                        jc	return_0
                        mov	a,#0		        ;字节子地址
                        call	iicwbyte
                        call	iiccack
                        jc	return_0
                        mov     r1,#date_data           ;数据
                        mov     r0,#16                  ;字节数
iicwrite0:              mov	a,@r1                   ;数据
                        call	iicwbyte
                        call	iiccack
                        jc	return_0
                        inc     r1
                        djnz    r0,iicwrite0
                        call    iicstop
                        ret
return_0:               call    beep3
                        call	iicstop
                        mov     a,#0e5h
                        ret

;*****************************************************
;读PCF8563
;出口参数:接收缓冲@r1
;*****************************************************

iicread:                call	iicstart
                        mov	a,#0a3h			;器件地址和读命令
                        call	iicwbyte
                        call	iiccack
                        jc	retrdn
                        mov     r1,#date_data
                        mov     r0,#15                  ;共读取16个字节数据
iicread0:               call	iicrbyte
                        call    iicack
                        inc     r1
                        djnz    r0,iicread0
                        call    iicrbyte
                        call    iicnack
                        call	iicstop
                        mov     r0,#digital_byte            ;时间数据存入显存
                        mov     a,#date_data
                        add     a,#2
                        mov     r1,a
                        mov     a,@r1                       ;秒
                        anl     a,#0fh
                        mov     @r0,a
                        inc     r0
                        mov     a,@r1                       ;十秒
                        swap    a
                        anl     a,#0fh
                        mov     @r0,a
                        inc     r0
                        inc     r1
                        mov     a,@r1
                        anl     a,#0fh                      ;分
                        mov     @r0,a
                        inc     r0
                        mov     a,@r1
                        swap    a
                        anl     a,#0fh                      ;十分
                        mov     @r0,a
                        inc     r0
                        inc     r1
                        mov     a,@r1
                        anl     a,#0fh                      ;时
                        mov     @r0,a
                        inc     r0
                        mov     a,@r1
                        swap    a
                        anl     a,#0fh                      ;十时
                        mov     @r0,a
                        inc     r0
                        mov     @r0,#20h
                        inc     r0
                        mov     @r0,#20h
                        ret
retrdn:                 call    beep3
                        call	iicstop
                        ret

;*****************************************************
;iic写字节
;入口条件:被写数据acc
;*****************************************************

iicwbyte:               mov	r2,#08H
wlp:                    rlc	a
                        jc	wr1
                        clr	sda		;发送0
                        setb	scl
                        nop
                        nop
                        clr	scl
                        djnz	r2,wlp
                        ret

wr1:                    setb	sda		;发送1
                        setb	scl
                        nop
                        nop
                        clr	scl
                        clr	sda
                        djnz	r2,wlp
                        ret

;*****************************************************
;iic读字节
;出口参数:所读数据acc
;*****************************************************

iicrbyte:               mov	r2,#08h
iicr2:                  setb    sda
                        setb	scl
                        nop
                        mov	c,sda
                        clr	scl
                        rlc	a
                        djnz	r2,iicr2
                        clr     sda
                        mov	@r1,a
                        ret

;*****************************************************
;iic起始位
;*****************************************************

iicstart:               setb	sda
                        nop
                        setb    scl
                        nop
                        nop
                        clr	sda
                        nop
                        nop
                        clr	scl
                        ret

;*****************************************************
;停止位
;*****************************************************

iicstop:                clr	sda
                        nop
                        setb	scl
                        nop
                        nop
                        setb	sda
                        nop
                        nop
                        ret

;*****************************************************
;iic应答
;*****************************************************

iicack:                 clr	sda
                        nop
                        setb	scl
                        nop
                        nop
                        clr 	scl
                        ret

;*****************************************************
;iic非应答
;*****************************************************

iicnack:                setb	sda
                        nop
                        setb	scl
                        nop
                        nop
                        clr	scl
                        ret

;*****************************************************
;iic检查应答
;*****************************************************

iiccack:                setb	sda
                        nop
                        setb	scl
                        nop
                        mov	c,sda
                        clr	scl
                        clr     sda
                        ret

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -