?? ht1380.src
字號(hào):
.include"s3C9454.reg"
SDA_164 BIT P1.0
SCL_164 BIT P1.1
SW BIT P2.6
LED_ BIT P2.5
LED4 BIT P2.4
LED3 BIT P2.3
LED2 BIT P2.2
LED1 BIT P2.1
SCL_2402 BIT P0.7
SDA_2402 BIT P0.6
SCL_1380 BIT P0.5
SDA_1380 BIT P0.4
RST_1380 BIT P0.3
COMMAND EQU 60H;1380命令字節(jié)地址
BYTECNT EQU 61H;數(shù)據(jù)字節(jié)讀數(shù)地址
XMTDAT EQU 62H;寫(xiě)入數(shù)據(jù)寄存器
RCVDAT EQU 70H;讀出數(shù)據(jù)寄存器
ORG 0000H
VECTOR 00H,INT_9454
ORG 003CH
DB 00H
DB 00H
DB 0E7H
DB 03H;3.2M時(shí)鐘
ORG 0100H
RESET:
DI
LD BTCON,#10100011B;禁止看門(mén)狗
LD CLKCON,#00011000B;選擇時(shí)鐘 FOSC
LD SP,#0C0H
LD P0CONH,#10101010B;P0為輸出口
LD P0CONL,#10101010B
LD P1CON,#00001010B;P1.0-P1.1為輸出口
LD P2CONH,#00001010B;P2.0-P2.5為輸出口
LD P2CONL,#10101010B;P2.6為輸入
LD T0DATA,#04EH
LD T0CON,#00001010B;定時(shí)0.1秒
MAIN:LD P2,#0H;P2.1-P2.4接數(shù)碼管共陽(yáng)腳極
SETBIT LED_
LD 30H,#10
LD 20H,#0H
LD 21H,#0H
LD 22H,#0H
LD 23H,#0H
LD 25H,#0
LD 26H,#0;按鍵按一次有效
LD 27H,#0;SET,只有當(dāng)27=1時(shí)。加減才有效
LD 28H,#0;當(dāng)按了SET時(shí),28=1,顯示閃爍
EI
CALL DELY
LD R0,#05H
LD R1,#TAB
JR MMMM1
CALL OSC_ENABLE
CALL WRITE_ENABLE
CALL WRITE_1380
MAI:CALL READ_1380
LD R5,71H
AND 71H,#00001111B
LD 20H,71H
CALL ZH4
AND R5,#00001111B
LD 21H,R5
LD R5,72H
AND 72H,#00001111B
LD 22H,72H
CALL ZH4
AND R5,#00001111B
LD 23H,R5
CALL SIAO
JR MAI
ZH4:LD R4,#4
ZH3:RR R5
DEC R4
JR NZ,ZH3
RET
MMMM1:CALL AT2402R
LD 20H,50H
LD 21H,51H
LD 22H,52H
LD 23H,53H
MAIN2:TM P2,#01000000B
JR NZ,MAIN0
LD 26H,#0
MAIN0:TM 28H,#00000001B
JR NZ,MAIN3
CALL SIAO
LD 40H,20H
LD 41H,21H
LD 42H,22H
LD 43H,23H
CALL AT2402W
MAIN3:LD R5,#0FFH
CALL SEND164
CALL DELY
TM P2,#40H
JR Z,MAIN2
CALL SW_S
JR MAIN2
INT_9454:AND T0CON,#11111110B
DEC 30H
CP 30H,#5
JP NE,L1
LD 28H,#1
SETBIT LED_
L1:AND 30H,#11111111B
JR NZ,L5
LD 30H,#10
LD 28H,#0
CLRBIT LED_
CALL XIANSHI
L5:TM 27H,#00000001B
JR NZ,L6
LD 28H,#0
L6:IRET
XIANSHI:INC 20H
CP 20H,#0AH
JP LT,XS
LD 20H,#0H
INC 21H
CP 21H,#6H
JP LT,XS
LD 21H,#0H
INC 22H
CP 22H,#0AH
JP LT,XS
LD 22H,#0H
INC 23H
CP 23H,#6H
JP LT,XS
LD 23H,#0H
XS:RET
SIAO:LD R1,20H
LDC R5,@RR0
CALL SEND164
SETBIT LED4
CALL DELY
CLRBIT LED4
LD R1,21H
LDC R5,@RR0
CALL SEND164
SETBIT LED3
CALL DELY
CLRBIT LED3
LD R1,22H
LDC R5,@RR0
CALL SEND164
SETBIT LED2
CALL DELY
CLRBIT LED2
CP 23H,#0H;當(dāng)時(shí)十位小等于0時(shí),不顯示
JP EQ,SAO1
LD R1,23H
LDC R5,@RR0
CALL SEND164
SETBIT LED1
CALL DELY
CLRBIT LED1
SAO1:RET
SW_S:AND 26H,#0FFH
JR NZ,SW5
LD 26H,#1
LD R5,#10000000B;A-OFF
CALL SEND164
TM P2,#01000000B;檢測(cè)SW
JR Z,SW2
COM 25H
JR Z,SW1
CALL OFF
JR SW5
SW1:CALL STAR_00
JR SW5
SW2:LD R5,#01000000B
CALL SEND164
TM P2,#01000000B
JR Z,SW3
COM 27H
AND 27H,#00000001B
JR SW5
SW3:TM 27H,#00000001B
JR Z,SW5
LD R5,#00100000B;C-ADD
CALL SEND164
TM P2,#01000000B
JR Z,SW4
INC 22H
CP 22H,#0AH
JP LT,SW5
LD 22H,#0H
INC 23H
CP 23H,#6H
JP LT,SW5
LD 23H,#0H
JR SW5
SW4:TM 27H,#00000001B
JR Z,SW5
LD R5,#00010000B;D-DEC
CALL SEND164
TM P2,#01000000B
JR Z,SW5
DEC 22H
CP 22H,#0H
JP GE,SW5
LD 22H,#9H
DEC 23H
CP 23H,#0H
JP GE,SW5
LD 23H,#5H
SW5:RET
SEND164: LD R4,#08H;左移次數(shù)
S0:RRC R5;要發(fā)的數(shù)據(jù)存在R1
JR C,S1;如果C等于1跳 ,C=1表示左移過(guò)來(lái)的是高電頻1
CLRBIT SDA_164;SDA清0
JR S2
S1:
SETBIT SDA_164;SDA置1
S2:NOP
NOP
SETBIT SCL_164;SCL置1
NOP
NOP
CLRBIT SCL_164;SCL清0
NOP
NOP
DEC R4
JR NZ,S0
RET
OFF:DI
SETBIT LED_
LD 20H,#0BH
LD 21H,#0BH
LD 22H,#0AH
LD 23H,#0H
RET
STAR_00:EI
LD 20H,#0H
LD 21H,#0H
LD 22H,#0H
LD 23H,#0H
RET
;*********************************************
;2402單片機(jī)寫(xiě)入2402
AT2402W:LD 60H,#4;寫(xiě)4個(gè)數(shù)到2402中
CALL R2STAR
LD R5,#10100000B
CALL R2SEND
LD R5,#30H
CALL R2SEND
LD R15,#40H;40H-43H存要寫(xiě)入的數(shù)
LM1:LD R5,@R15
CALL R2SEND
INC R15
DEC 60H
JR NZ,LM1
CALL R2STOP
NOP
RET
;*******************************************
R2SEND:LD R4,#8;發(fā)送一個(gè)字節(jié)子程序
R2SLOP1:RLC R5
JR C,R2SLOP2
CLRBIT SDA_2402
JR R2SLOP3
R2SLOP2:
SETBIT SDA_2402
R2SLOP3:NOP
SETBIT SCL_2402
NOP
CLRBIT SCL_2402
DEC R4
JR NZ,R2SLOP1
CLRBIT SDA_2402
NOP
SETBIT SCL_2402
NOP
CLRBIT SCL_2402
NOP
RET
;******************************************
;讀出數(shù)據(jù)程序
AT2402R:LD 60H,#4;讀出4個(gè)字節(jié)
LD R15,#50H;讀出來(lái)的字節(jié)存入以50H為首址地址
CALL R2STAR
LD R5,#10100000B;固定,表示對(duì)2402寫(xiě)
CALL R2SEND
LD R5,#30H;2402中的地址,可自設(shè),從這個(gè)地址寫(xiě)入就從這個(gè)地址讀出
CALL R2SEND
CALL R2STAR
LD R5,#10100001B;固定,表示對(duì)2402讀
CALL R2SEND
AT2402R1:CALL R2READ
LD @R15,R5
INC R15
DEC 60H
JR NZ,AT2402R1
CALL R2STOP
RET
;******************************************************
R2READ:LD R4,#8;讀出一個(gè)字節(jié)子程序,
SETBIT SDA_2402
R2RLOP1:NOP
SETBIT SCL_2402
NOP
LD P0CONH,#10001010B;P0.6為輸出入
NOP
TM P0,#01000000B ;P0.6為SDA
LD P0CONH,#10101010B;P0.6為輸出口
JR Z,R2RLOP2
OR R5,#10000000B
JR R2RLOP3
R2RLOP2:AND R5,#01111111B
R2RLOP3:RL R5
CLRBIT SCL_2402
DEC R4
JR NZ,R2RLOP1
NOP
CLRBIT SDA_2402
NOP
SETBIT SCL_2402
NOP
CLRBIT SCL_2402
NOP
RET
;***************************************************
R2STAR:;開(kāi)始子程序,當(dāng)SCL為高時(shí).SDA從高到低為開(kāi)始
SETBIT SDA_2402
SETBIT SCL_2402
NOP
CLRBIT SDA_2402
NOP
CLRBIT SCL_2402
NOP
RET
;*******************************************************
R2STOP:NOP;結(jié)束子程序,當(dāng)SCL為高時(shí),SDA從低到高為結(jié)束
SETBIT SCL_2402
NOP
SETBIT SDA_2402
NOP
CLRBIT SCL_2402
NOP
RET
;*******************************************
;1380讀寫(xiě)程序
WRITE_ENABLE:LD COMMAND,#8EH;允許數(shù)據(jù)寫(xiě)入寄存器
LD BYTECNT,#1
LD R15,#XMTDAT
LD XMTDAT,#00H
CALL SEND_BYTE
RET
;*********************************
OSC_ENABLE:LD COMMAND,#80H;起動(dòng)時(shí)鐘開(kāi)始
LD BYTECNT,#1
LD R15,#XMTDAT
LD XMTDAT,#00
CALL SEND_BYTE
RET
;***********************************
WRITE_1380:LD COMMAND,#0BEH;寫(xiě)入8個(gè)數(shù)據(jù)到1380
LD BYTECNT,#8
LD R15,#XMTDAT
LD XMTDAT,#0
LD XMTDAT+1,#14h
LD XMTDAT+2,#08H
CALL SEND_BYTE
RET
;************************************
READ_1380:LD COMMAND,#0BFH;讀出8個(gè)數(shù)據(jù)
LD BYTECNT,#8
LD R15,#RCVDAT
CALL RECEIVE_BYTE
RET
;****************************************************
SEND_BYTE:
CLRBIT RST_1380;發(fā)送數(shù)據(jù)到1380
NOP
CLRBIT SCL_1380
NOP
SETBIT RST_1380
NOP
LD R5,COMMAND
LD R4,#08H
S_BYTE0:RRC R5
JR C,S_1
CLRBIT SDA_1380
JR S_2
S_1:
SETBIT SDA_1380
S_2:NOP
SETBIT SCL_1380
NOP
CLRBIT SCL_1380
NOP
DEC R4
JR NZ,S_BYTE0
NOP
S_BYTE1:LD R5,@R15
LD R4,#8H
S_BYTE2:RRC R5
JR C,S_3
CLRBIT SDA_1380
JR S_4
S_3:
SETBIT SDA_1380
S_4:NOP
SETBIT SCL_1380
NOP
CLRBIT SCL_1380
NOP
DEC R4
JR NZ,S_BYTE2
INC R15
DEC BYTECNT
JR NZ,S_BYTE1
NOP
CLRBIT RST_1380
RET
;****************************************8
RECEIVE_BYTE:
CLRBIT RST_1380;從1380中讀出數(shù)據(jù)
NOP
CLRBIT SCL_1380
NOP
SETBIT RST_1380
LD R5,COMMAND
LD R4,#8
R_BYTE0:RRC R5
JR C,R_1
CLRBIT SDA_1380
JR R_2
R_1:
SETBIT SDA_1380
R_2:NOP
SETBIT SCL_1380
NOP
CLRBIT SCL_1380
DEC R4
JR NZ,R_BYTE0
NOP
R_BYTE1:
LD R4,#8
R_BYTE2:
SETBIT SDA_1380
SETBIT SCL_1380
NOP
LD P0CONH,#10101000B;P0.4為輸出入
NOP
TM P0,#00010000B ;P0.4為SDA
LD P0CONH,#10101010B;P0.4為輸出口
JR Z,R_3
SCF
JR R_4
R_3:RCF
R_4:NOP
RRC R5
CLRBIT SCL_1380
DEC R4
JR NZ,R_BYTE2
LD @R15,R5
INC R15
DEC BYTECNT
JR NZ,R_BYTE1
NOP
CLRBIT RST_1380
RET
;**********************************************
DELY:LD R6,#0FFH;延時(shí)子程序
D2:LD R7,#02H
D1:DEC R7
JR NZ,D1
DEC R6
JR NZ,D2
RET
ORG 0500H
TAB:DB 03H,09FH,025H,0DH,099H,49H,41H,01FH,1H,9H,0C5H,71H
END
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -