?? 24c08lamp.asm
字號:
;///////////////////////////////////////////
;本程序源代碼由單片機(jī)培訓(xùn)網(wǎng)提供.
;單片機(jī)培訓(xùn)網(wǎng),讓更多人學(xué)習(xí)單片機(jī)更容易.
;第一網(wǎng)址----www.mcuedu.com
;第二網(wǎng)址----http://51_train.nease.net
;創(chuàng)辦人------劉永忠
;熱線電話----(0755)27529998
;email-------aa815@163.com
;本程序使用24C08存儲流水燈的實(shí)時狀態(tài)
;///////////////////////////////////////////
i2c_clk bit p3.4 ;時鐘信號
i2c_data bit p3.5 ;數(shù)據(jù)信號
org 0000h ;
ajmp main
org 0030h
main:
mov dptr,#tab ;表頭
mov r0,#30h ;r0為指針
mov 2bh,#00h ;2bh為地址L
lcall r_d ;調(diào)用讀EEPROM子程序
lcall delay10ms ;延時10ms
mov a,30h ;
cjne a,#20h,com1 ;將讀回的內(nèi)容與20H相比較,
com1:
jc loop ;如果超過20H,則清零,否則跳到LOOP顯示.
mov 30h,#00h
mov a,30h
loop:
movc a,@a+dptr ;查表顯示到P0口
mov p0,a
inc 30h ;取下一內(nèi)容顯示到P2口
mov a,30h
movc a,@a+dptr
mov p2,a
mov r4,#10
tt3:
lcall delay10ms ;延時一秒鐘
djnz r4,tt3
inc 30h
mov r0,#30h
mov 2bh,#00h
lcall w_t ;將當(dāng)前的30H寫入到EEPROM.
lcall delay10ms
mov a,30h
cjne a,#32,loop ;再做一次比較,此步也可省去.
mov 30h,#00h
mov a,30h
ajmp loop ;重復(fù)循環(huán).
delay10ms:
mov r6,#100
tt2:
mov r5,#50
djnz r5,$
djnz r6,tt2
ret
tab: dw 0fffeh,0fffdh,0fffbh,0fff7h
dw 0ffefh,0ffdfh,0ffbfh,0ff7fh
dw 07fffh,0bfffh,0dfffh,0efffh
dw 0f7ffh,0fbffh,0fdffh,0feffh
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 2bh為地址L r0為指針
w_t:
a067EH: SETB i2c_data ;;;;寫
SETB i2c_clk ;;;clk
CLR i2c_data ;;;sda//start
LCALL a0799H
CLR i2c_clk
LCALL a0799H
MOV A, #0A0H
LCALL a06EEH
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
lcall ledb;;; JB i2c_data, $
CLR i2c_clk
LCALL a0799H
MOV A, 2bh ;;;;;寫地址L
LCALL a06EEH
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
lcall ledb;;; JB i2c_data, $
CLR i2c_clk
LCALL a0799H
a06BDH: MOV A, @R0 ;;;;寫數(shù)據(jù)
LCALL a06EEH
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
lcall ledb;;; JB i2c_data, $
CLR i2c_clk
LCALL a0799H
CLR i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
SETB i2c_data
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
a06EEH: MOV R6, #08H
a06F0H: RLC A ;;;
MOV i2c_data, C
lcall a0799h
SETB i2c_clk
lcall a0799h
CLR i2c_clk
lcall a0799h
DJNZ R6, a06F0H
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;
ae6EEH: MOV R6, #08H
ae6F0H: RLC A ;;;
MOV i2c_data, C
lcall a0799h
SETB i2c_clk
lcall a0799h
lcall a0799h
DJNZ R6, ae6F0H
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
r_d:
a0718H: SETB i2c_data ;;;;寫
SETB i2c_clk
CLR i2c_data
LCALL a0799H
CLR i2c_clk
LCALL a0799H
MOV A, #0A0H
LCALL ae6EEH
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
lcall leda;; JB i2c_data, $
CLR i2c_clk
LCALL a0799H
MOV A, 2bh ;;;;;寫地址L
LCALL ae6EEH
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
lcall leda;; JB i2c_data, $
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
CLR i2c_clk
LCALL a0799H
CLR i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
SETB i2c_data
lcall delay10ms
SETB i2c_data ;;;;;;;讀
SETB i2c_clk
CLR i2c_data
LCALL a0799H
CLR i2c_clk
LCALL a0799H
MOV A, #0A1H
LCALL ae6EEH
LCALL a0799H
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
lcall leda;; JB i2c_data, $
CLR i2c_clk
LCALL a0799H
NOP
NOP
a0747H: MOV R6, #08H ;;;
CLR A
CLR C
SETB i2c_data
LCALL a0799H
a0750H: SETB i2c_clk ;;;
LCALL a0799H
MOV C, i2c_data
RLC A
CLR i2c_clk
LCALL a0799H
DJNZ R6, a0750H
MOV @R0, A
INC R1
SETB i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
CLR i2c_clk
LCALL a0799H
CLR i2c_data
LCALL a0799H
SETB i2c_clk
LCALL a0799H
SETB i2c_data
RET
a0784H: CLR i2c_data ;;;
LCALL a0799H
SETB i2c_clk
LCALL a0799H
CLR i2c_clk
LJMP a0747H
;;;;;;
a0799H: NOP
NOP
NOP
nop
NOP
NOP
NOP
nop
NOP
NOP
NOP
nop
NOP
NOP
NOP
nop
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
leda: mov b, #50h
led1: jnb i2c_data, led0
lcall a0799h
djnz b, led1
;mov 4ch, #0ddh
nop
led0: ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ledb: mov b, #50h
led0b: jnb i2c_data, led0a
lcall a0799h
djnz b, led0b
nop
led0a: ret
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -