?? b13-2.asm
字號:
;PROGRAM NAME B13-2.ASM
MS10 EQU 9217 ;APPROXIMATELY 10MS INTERRUPR
;
INTR_CNT EQU 30H ;CNT STORIAGE
BUFFER EQU 31H ;DISPLAY BUFFER
BUF_WR EQU 32H ;DISPLAY BUFFER
EE_ADDR EQU 33H
WAIT EQU 34H
;
SCLK REG P1.7
SDA REG P1.6
;
SCOPE REG P3.3 ;CHECK BY SCOPE
BUZZER REG P3.4
LED REG P3.7
;
ORG 0000H
JMP START
ORG 0003H ;[DISABLE] EXTERNAL INT0 INTERRUPT
RETI
ORG 000BH ;[ENABLE] TIMER0 OVERFLOW INTERRUPT
JMP T0_ISR
;
ORG 0013H
RETI ;[DISABLE] EXTERNAL INT1 INTERRUPT
ORG 001BH
RETI ;[DISABLE] TIMER1 OVERFLOW INTERRUPT
ORG 0023H
RETI ;[DISABLE] SERIAL INTERRUPT
;
ORG 30H
START MOV R0,#00H
DJNZ R0,$ ;DELAY A WHILE
MOV SP,#60H
MOV P1,#FFH
MOV P3,#FFH
MOV INTR_CNT,#00H
CLR BUZZER ;P3.4=0,BUZZER OFF
CLR LED ;P3.7=0,LED OFF
CALL SET_TMR0
MOV BUF_WR,#66H ;DISPLAY DATA
MOV BUFFER,#99H ;DISPLAY DATA
CALL IIC_INIT
$LOOP
CLR EA
MOV R0,#00
MOV R1,#00
MOV B,BUF_WR
CALL IIC_WRITE
SETB EA
CALL DELAY
CALL DELAY
;
CLR EA
MOV R0,#00
MOV R1,#00
SETB SCOPE
CALL IIC_READ ;RESULT IN ACC
CLR SCOPE
CJNE A,#FFH,$NEW
MOV A,#00H
$NEW MOV BUFFER,A ;READ FROM EEPROM
SETB EA
CALL DELAY
CALL DELAY
;
MOV A,BUF_WR
ADD A,#01H
DA A
MOV BUF_WR,A
SJMP $LOOP
;
;MEM BLOCK IN R0
;ADDRESS IN R1
;DATA IN B
IIC_WRITE
CALL IIC_START
MOV A,R0
ANL A,#07H ;MASK BIT7-BIT3
RL A
ORL A,#A0H ;WR=TRUE(0) AS BIT0=1
CALL IIC_OUT ;COMMAND OUT
CALL IIC_ACK ;9 CLK
;
MOV A,R1
CALL IIC_OUT ;ADDR OUT
CALL IIC_ACK
;
MOV A,B
CALL IIC_OUT ;DATA OUT
CALL IIC_ACK
;
CALL IIC_STOP
RET
;
IIC_OUT CLR SCLK
CALL DLY
MOV R7,#8
$RL RLC A
JC $O1
$O0 CLR SDA
JMP $NEXT
$O1 SETB SDA
$NEXT
CALL DLY
SETB SCLK
CALL DLY
CLR SCLK
CLR SDA
CALL DLY
DJNZ R7,$RL
RET
;
;MEM BLOCK IN R0
;ADDRESS IN R1
;DATA RETURN AT ACC
;
IIC_READ
CALL IIC_START
MOV A,R0
ANL A,#07H ;MASK BIT7-BIT3
RL A
ORL A,#A0H ;RD/!WR=0 AS BIT0=1
CALL IIC_OUT ;COMMAND OUT(WR)
CALL IIC_ACK
;
MOV A,R1
CALL IIC_OUT ;ADDR OUT
CALL IIC_ACK
;
CALL IIC_START
MOV A,R0
ANL A,#07H ;MASK BIT7-BIT3
RL A
ORL A,#A1H ;RD=1 AS BIT0=1
CALL IIC_OUT ;COMMAND OUT(RD)
CALL IIC_ACK
;
CALL IIC_IN ;DATA IN
CALL IIC_ACK
;
CALL IIC_STOP
RET
;
IIC_ACK
SETB SCLK
NOP
CLR SCLK
NOP
RET
;
IIC_IN SETB SDA
CLR SCLK
MOV R2,#8
MOV R0,#00H
$SI SETB SCLK
JB SDA,$SI1
$SI0 CLR C
JMP $SNX
$SI1 SETB C
$SNX NOP
MOV A,R0 ;LOW BYTE
RLC A
MOV R0,A
CLR SCLK
DJNZ R2,$SI
MOV A,R0
RET
;
IIC_INIT
SETB SCLK
SETB SDA
RET
;
IIC_START
SETB SCLK
SETB SDA
;
CLR SDA
NOP
CLR SCLK
NOP
RET
;
IIC_STOP
SETB SCLK
SETB SDA
RET
;
DLY RET
MOV WAIT,#1
DJNZ WAIT,$
RET
;
;
DELAY MOV R7,#00H
$1 MOV R6,#00H
$2 DJNZ R6,$2
DJNZ R7,$1
RET
;
T0_ISR
MOV TH0,#(65536-MS10) / 256 ;RELOAD TH0
MOV TL0,#(65536-MS10) .MOD. 256
PUSH A
;
MOV A,BUFFER
ANL A,#0FH ;GET LOW NIBBLE
SETB ACC.5 ;BIT5=1
SETB ACC.6
SETB ACC.7
MOV P1,A ;SHOW 1 DIGIT
MOV R0,#30H
DJNZ R0,$ ;DELAY
;inter-blanking
CLR ACC.4
CLR ACC.5
MOV P1,A ;ALL DIGIT BLANK
MOV R0,#04H
DJNZ R0,$ ;DELAY
;
MOV A,BUFFER
ANL A,#F0H ;GET HIGH NIBBLE
SWAP A ;SWAP A
SETB ACC.4 ;BIT4=1
SETB ACC.6
SETB ACC.7
MOV P1,A ;SHOW ANOTHER DIGIT
MOV R0,#30H
DJNZ R0,$ ;DELAY
;
CLR ACC.4
CLR ACC.5
MOV P1,A ;ALL DIGIT BLANK
;
;INTR_CNT+1
INC INTR_CNT
MOV A,INTR_CNT
CJNE A,#100,$T0_END
MOV INTR_CNT,#00H
$T0_END POP A
RETI
;
SET_TMR0
MOV A,#01H ;TIMER MODE 1
MOV TMOD,A
MOV TH0,#(65536-MS10) / 256 ;RELOAD TH0
MOV TL0,#(65536-MS10) .MOD. 256
CLR TF0 ;CLEAR TIMER0 FLAG
SETB TR0 ;TIMER0 START COUNT
SETB ET0 ;ENABLE TIMER0 INTERRUPT
SETB EA ;ENABLE SYSTEM INTERRUPT
RET
;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -