?? 93c46asm.asm
字號:
;
;1用一個4PIN數據排線一端插入CPU部分JP53(P3口)的P3.4,P3.5,P3.6,P3.7。另外一端插入93C46部分的輸入端JP46.
;2用一條8PIN的數據排線把CPU部份的P2口(JP52)接到八路指示燈部份的JP32。
;此程序先把8路跑馬燈的數據寫入93C46, 然后讀出送P2口顯示。 運行程序可以觀察到8路跑馬燈。
;為證明93C46的作用, 可以拔下93c46的數據線, 再次運行程序, 則沒有跑馬燈。
;
READ EQU 0 ;讀93C46
WRITE EQU 2 ;寫入93C46
EWEN EQU 4 ; 93C46寫入使能
EWDS EQU 6 ; 93C46寫入禁止
CS BIT P3.7 ; 93C46 CS
CLK BIT P3.6 ; 93C46 CLK
DI BIT P3.5 ; 93C46 DI
DO BIT P3.4 ; 93C46 DO
ADR46 EQU 20H
ORG 00H
START0:
MOV P3,#10H ;93c46 CS=1
MOV ADR46,#00H ;93C46地址00H
START: MOV 21H,#00H ; 取地址碼
MOV 22H,#08H ; 8組8個碼
;-----------------------------------------------------------------
MOV A,#EWEN ;寫入使能
CALL TO9346
;-----------------------------------------------------------------
MOV A ,21H ;載入取碼指針
MOV DPTR,#TABLE ;至TABLE取碼
MOVC A,@A+DPTR
MOV R4,A ;存入"寫入寄存器"
;-----------------------------------------------------------------
MOV A,#WRITE ;寫入數據
CALL TO9346
MOV A,#EWDS ;寫禁止
CALL TO9346
;-----------------------------------------------------------------
INC 21H ;取下一個碼
;-----------------------------------------------------------------
INC ADR46 ;下一個地址
CALL DELAY1
DJNZ 22H,START
;-----------------------------------------------------------------
;-----------------------------------------------------------------
;-----------------------------------------------------------------
;-----------------------------------------------------------------
MOV R0,#30H ;存入8051的RAM 地址 RAM區域30~7FH
MOV ADR46,#00H ;93C46 :00地址
MOV 22H,#08H ; 93C46 8個地址8個碼
;-----------------------------------------------------------------
A1: MOV A,#READ ;讀(地址)的數據
CALL TO9346
MOV A,R4 ;93C46輸出的數據載入ACC
MOV @R0,A
INC ADR46 ;讀下一個地址
INC R0 ;下一個RAM
DJNZ 22H,A1
;-----------------------------------------------------------------
A2: MOV 22H,#08H
MOV R0,#30H ;
OUTPUT: MOV A,@R0
MOV P2,A ;輸出至P2
CALL DELAY1 ;
INC R0
DJNZ 22H,OUTPUT
JMP A2
;-----------------------------------------------------------------
TO9346: SETB CS ;93C46 CS=1
SETB DI ;DI=1
SETB CLK ;CLK=1
CALL DELAY ;啟動位
CLR CLK ;CLK=0
CALL DELAY
MOV DPTR,#JPTBL46
JMP @A+DPTR ;依ACC值跳至相關地址 散轉指令
JPTBL46: ;下面是散轉指令表
AJMP SREAD ;讀
AJMP SWRITE ;寫
AJMP SEWEN ;寫使能
AJMP SEWDS ;寫禁止
;-----------------------------------------------------------------
SREAD:
MOV A,#80H ;送操作碼10
CALL SDATA
MOV A,ADR46 ;載入93C46地址
CALL SADR ;寫入7位地址(DI)
CALL RDT46 ;讀出數據(DO),存入3CH
MOV R4,A
;CALL RDT46 ;讀出數據(DO),存入3DH
;MOV 3DH,A
JMP EX9346
;-----------------------------------------------------------------
SWRITE:
MOV A,#40H ;送操作碼01
CALL SDATA
MOV A,ADR46 ;載入93C46地址
CALL SADR ;寫入7位地址
MOV A,R4 ;寫入(3CH)數據
CALL SDT46
;MOV A,3DH ;寫入(3DH)數據
;CALL SDT46
JMP EX9346
;-----------------------------------------------------------------
SEWEN:
CLR A ;送操作碼00
CALL SDATA
MOV A,#60H ;寫使能操作碼11XXXXX
CALL SADR
JMP EX9346
;-----------------------------------------------------------------
SEWDS:
CLR A ;送操作碼00
CALL SDATA
CLR A ;寫7位禁止操作碼000XXXX
CALL SADR
;-----------------------------------------------------------------
EX9346:
CLR CS ;CS=0
RET
;-----------------------------------------------------------------
SADR:
CLR C
RLC A
MOV R3,#7
JMP SD1
SDATA:
MOV R3,#2
JMP SD1
SDT46:
MOV R3,#8 ;寫入8位數據
SD1:
RLC A ;
MOV DI,C
SETB CLK
CALL DELAY
CLR CLK
CALL DELAY
DJNZ R3,SD1
RET
RDT46:
MOV R3,#8 ;讀出8位數據
RD1:
SETB CLK
CALL DELAY
CLR CLK
CALL DELAY
MOV C,DO
RLC A
DJNZ R3,RD1
RET
DELAY: ;0.1ms 11.0592MHz
MOV R7,#0FH
DJNZ R7,$
RET
DELAY1: ;0.2秒延時 11.0592MHz
MOV R4,#20
D1: MOV R5,#20
D2: MOV R6,#248
DJNZ R6,$
DJNZ R5,D2
DJNZ R4,D1
RET
TABLE :
DB 0FEH ,0FDH ,0FBH, 0F7H ;廣告一個燈左移
DB 0EFH ,0DFH ,0BFH, 7FH ;
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -