📄 noname1.asm
字号:
;;;;;*************************************;;;;;;;;;;;
;;;;;***********初始化定义*****************;;;;;;;;;;
;在程序里定义了 reg00--reg1f 来对应240H--25FH端口。
;
;
ORG 0000H
SP0 EQU 31H
RST EQU P3.4
T0DJ EQU 30H ;;30_-_-40 USED
;;;;以下地址保存网卡的物理地址;
PHYAD1 EQU 50H
PHYAD2 EQU 51H
PHYAD3 EQU 52H
PHYAD4 EQU 53H
PHYAD5 EQU 54H
PHYAD6 EQU 55H
RSTREG EQU 0DF00H
REG00 EQU 0C000H
REG01 EQU 0C100H
REG02 EQU 0C200H
REG03 EQU 0C300H
REG04 EQU 0C400H
REG05 EQU 0C500H
REG06 EQU 0C600H
REG07 EQU 0C700H
REG08 EQU 0C800H
REG09 EQU 0C900H
REG0A EQU 0CA00H
REG0B EQU 0CB00H
REG0C EQU 0CC00H
REG0D EQU 0CD00H
REG0E EQU 0CE00H
REG0F EQU 0CF00H
REG10 EQU 0D000H
REG11 EQU 0D100H
REG12 EQU 0D200H
REG13 EQU 0D300H
REG14 EQU 0D400H
REG15 EQU 0D500H
REG16 EQU 0D600H
REG17 EQU 0D700H
REG18 EQU 0D800H
REG19 EQU 0D900H
REG1A EQU 0DA00H
REG1B EQU 0DB00H
REG1C EQU 0DC00H
REG1D EQU 0DD00H
REG1E EQU 0DE00H
REG1F EQU 0DF00H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;主程序;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
JMP MAIN
ORG 000BH
AJMP TIMER0
ORG 0050H
MAIN: MOV SP,#SP0
CALL D100MS
CALL D100MS
MOV TMOD,#01H
MOV TH0, #3CH
MOV TL0, #0B0H
MOV IE,#82H
SETB TR0
MOV T0DJ,#14H ;;;;TIMER 1SECOND
MOV A,#0fcH
MOV 30H,A
MOV A,#60H
MOV 31H,A
MOV A,#0DBH
MOV 32H,A
MOV A,#0F2H
MOV 33H,A
MOV A,#66H
MOV 34H,A
MOV A,#0B6H
MOV 35H,A
MOV A,#0BEH
MOV 36H,A
MOV A,#0E0H
MOV 37H,A
MOV A,#0FEH
MOV 38H,A
MOV A,#0F6H
MOV 39H,A
MOV A,#0EEH
MOV 3AH,A
MOV A,#03EH
MOV 3BH,A
MOV A,#9CH
MOV 3CH,A
;;;;;;;;;;;开始复位;;
CALL NCRST
CALL DELAY
CALL DELAY
CALL INITIAL
CALL READDR
CALL SETADDR
ORG 0100H
TIMER0: DJNZ T0DJ,NOT0
LCALL DISPLAY
MOV T0DJ,#14H
NOT0: MOV TH0,#3CH
MOV TL0,#0B0H
RETI
;;;;;;;;;;;;网卡复位子程序;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
NCRST: SETB RST ;把8019的33脚置1 ;网卡复位程序
LCALL DELAY ;延时至少2MS,
CLR RST ;复位完成,清RST (
MOV R2,RSTREG
MOV RSTREG,R2 ;;hot reset
RET
;;;;;;;;;;网卡初始化;;;;;;;;;;;;;;;;;;;;;;;;;;
INITIAL: MOV DPTR,#0C000H
MOV A,#21H ;page0 stop netcard
MOVX @DPTR, A
INC DPH
MOV A,#4CH
MOVX @DPTR,A
INC DPH
MOV A,#80H
MOVX @DPTR,A
INC DPH
MOV A,#4CH
MOVX @DPTR,A
INC DPH
MOV A,#45H
MOVX @DPTR,A
MOV DPTR,#0CC00H
MOV A,#0CCH
MOVX @DPTR,A
INC DPH
MOV A,#0E0H
MOVX @DPTR,A
INC DPH
MOV A,#0C8H
MOVX @DPTR,A
INC DPH
MOV A,#00H
MOVX @DPTR,A
;
MOV DPTR,#0C000H ;SELECT PAGE1
MOV A,#61H
MOVX @DPTR,A
MOV DPTR,#0C700H
MOV A,#4dH
MOVX @DPTR, A
INC DPH
MOV A,#00H
MOVX @DPTR,A
INC DPH
MOV A,#41H
MOVX @DPTR,A
INC DPH
MOV A,#00H
MOVX @DPTR,A
INC DPH
MOV A,#80H
MOVX @DPTR,A
INC DPH
MOV A,#00H
MOVX @DPTR,A
INC DPH
MOV A,#00H
MOVX @DPTR,A
INC DPH
MOV A,#00H
MOVX @DPTR,A
INC DPH
MOV A,#00H
MOVX @DPTR,A
MOV DPTR,#0C000H
MOV A,#22H
MOVX @DPTR,A ;START NET CARD
RET
;reg00=0x21; //选择页0的寄存器,网卡停止运行,因为还没有初始化。
;reg01=0x4c; //寄存器Pstart
;reg02=0x80; //Pstop
;reg03=0x4c; //BNRY
;reg04=0x45; //TPSR
;reg0c=0xcc; //RCR
;reg0d=0xe0; //TCR
;reg0e=0xc8; //DCR 数据配置寄存器 8位数据dma
;reg0f=0x00; //IMR disable all interrupt
;page(1); //选择页1的寄存器
;reg07=0x4d; //CURR
;reg08=0x00; //MAR0
;reg09=0x41; //MAR1
;reg0a=0x00; //MAR2
;reg0b=0x80; //MAR3
;reg0c=0x00; //MAR4
;reg0d=0x00; //MAR5
;reg0e=0x00; //MAR6
;reg0f=0x00; //MAR7
;reg00=0x22;//选择页0寄存器,网卡执行命令
;;;;PSTART 接收缓冲区的起始页的地址。
;;;;PSTOP 接收缓冲区的结束页地址。(该页不用于接收)
;;;;BNRY 指向最后一个已经读取的页(读指针)
;;;;URR 当前的接收结束页地址。(写指针)
;*****************************************************
;;;;;;;;;;;;;读取网卡的物理地址的子程序;;;;;;;;;;;;;;;
READDR:
MOV DPTR,#REG08
MOV A,#00H
MOVX @DPTR,A
MOV DPTR,#REG09
MOV A,#00H
MOVX @DPTR,A
MOV DPTR,#REG0B
MOV A,#00H
MOVX @DPTR,A
MOV DPTR,#REG0A
MOV A,#12H
MOVX @DPTR,A
MOV DPTR,#REG00
MOV A,#0AH
MOVX @DPTR,A
;;START TO READ
MOV DPTR,#REG10
MOV A,#PHYAD1
MOV R0,A
MOV R2,#06H
RALOOP: MOVX A,@DPTR
MOV @R0,A
INC R0
NOP
NOP
MOVX A,@DPTR
NOP
NOP
NOP
NOP
DJNZ R2,RALOOP
RET
;;;;;;;;;;;;;;设置网卡地址;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;************************************************;;;;;;;
SETADDR: MOV DPTR,#REG00
MOVX A,@DPTR
ORL A,#40H ;;SELECT PAGE1
MOVX @DPTR,A
MOV R0,#PHYAD1
MOV DPTR,#REG01
MOV R3,#06H
SADDLOP: MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPH
DJNZ R3,SADDLOP
RET
keyscan:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;显示子程序(通过串口输出);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
display: MOV R1,#50H
MOV R2,#0CH
DSPL1: MOV A,@R1
CALL SEGTBL
MOV SBUF,A
DSPLOOP: JNB TI,DSPLOOP
CLR TI
INC R1
DJNZ R2,DSPL1
RET
;
;}
;;;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -