?? iic.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
;
;*****************************************************
;*****************************************************
;參數(shù)定義
;*****************************************************
scl bit p1.6 ;時(shí)鐘引腳
sda bit p1.7 ;數(shù)據(jù)引腳
;*****************************************************
;時(shí)鐘數(shù)據(jù)設(shè)置
;*****************************************************
timer_set: mov r0,#date_data ;時(shí)鐘相關(guān)設(shè)置
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 ;設(shè)置時(shí)鐘
ret
;*****************************************************
;PCF8563應(yīng)用程序
;寫PCF8563
;入口參數(shù):發(fā)送緩沖@r1
;*****************************************************
timer_write: call iicstart
mov a,#0a2h ;器件地址和寫指令
call iicwbyte
call iiccack
jc return_0
mov a,#0 ;字節(jié)子地址
call iicwbyte
call iiccack
jc return_0
mov r1,#date_data ;數(shù)據(jù)
mov r0,#16 ;字節(jié)數(shù)
iicwrite0: mov a,@r1 ;數(shù)據(jù)
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
;出口參數(shù):接收緩沖@r1
;*****************************************************
iicread: call iicstart
mov a,#0a3h ;器件地址和讀命令
call iicwbyte
call iiccack
jc retrdn
mov r1,#date_data
mov r0,#15 ;共讀取16個(gè)字節(jié)數(shù)據(jù)
iicread0: call iicrbyte
call iicack
inc r1
djnz r0,iicread0
call iicrbyte
call iicnack
call iicstop
mov r0,#digital_byte ;時(shí)間數(shù)據(jù)存入顯存
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 ;時(shí)
mov @r0,a
inc r0
mov a,@r1
swap a
anl a,#0fh ;十時(shí)
mov @r0,a
inc r0
mov @r0,#20h
inc r0
mov @r0,#20h
ret
retrdn: call beep3
call iicstop
ret
;*****************************************************
;iic寫字節(jié)
;入口條件:被寫數(shù)據(jù)acc
;*****************************************************
iicwbyte: mov r2,#08H
wlp: rlc a
jc wr1
clr sda ;發(fā)送0
setb scl
nop
nop
clr scl
djnz r2,wlp
ret
wr1: setb sda ;發(fā)送1
setb scl
nop
nop
clr scl
clr sda
djnz r2,wlp
ret
;*****************************************************
;iic讀字節(jié)
;出口參數(shù):所讀數(shù)據(jù)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應(yīng)答
;*****************************************************
iicack: clr sda
nop
setb scl
nop
nop
clr scl
ret
;*****************************************************
;iic非應(yīng)答
;*****************************************************
iicnack: setb sda
nop
setb scl
nop
nop
clr scl
ret
;*****************************************************
;iic檢查應(yīng)答
;*****************************************************
iiccack: setb sda
nop
setb scl
nop
mov c,sda
clr scl
clr sda
ret
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -