⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 n8251.asm

📁 MCS96的源程序。用来给96单片机使用
💻 ASM
字号:
;---------------------------------------------------------
C8255   EQU     0C006H   ;8255命令口地址
P8255A  EQU     0C000H   ;8255 PA口地址
P8255B  EQU     0C002H   ;8255 PB口地址
P8255C  EQU     0C004H   ;8255 PC口地址
Z8251   EQU     0D002H   ;8251 状态/命令口地址
D8251   EQU     0D000H   ;8251 数据口地址
COM_MOD EQU     04EH     ;字符 8 位, 1 位起始位, 1 位停止位,异步 * 16                         
COM_COM EQU     25H      ;请求发送,发送允许,接收允许
TIM_CTL EQU     0C806H   ;8253 状态/命令口地址
TIMER0  EQU     0C800H  
MODE03  EQU     00110110B;定时器0工作在方式3
AL      EQU     1AH
AH      EQU     1BH
AX      EQU     1AH
BL      EQU     22H
BX      EQU     22H
CX      EQU     24H
DL      EQU     26H
DX      EQU     26H
;---------------------------------------------------------
 		ORG 	2080H
START:	LD 		SP,#0F8H
		LCALL 	INIT55			;初始化
		LCALL 	INIT53
		LCALL 	INIT51
GOON:	LCALL 	P55IN			;键盘输入,CRT显示
		LCALL 	P51IN 			;串口输入,LED显示 
		SJMP 	GOON			;循环	
;--------------------------------------------------------- 		
P55IN:	
 		SCALL   RD_KB			;读键盘值
 		JBS     AL,4,EXIT_55  	;无键值则返回
 		SJMP    OUT				;有键则发送
EXIT_55:
		RET
OUT:	LCALL 	OUT55			;先显示到数码管上
		LDB 	AH,#0H
		LDB 	AL,ASCII[AL]	;转换成ASCII码
		LCALL 	OUT51			;发送到PC机屏幕上
		RET
;--------------------------------------------------------- 		
P51IN:	LDB     AL,Z8251		;判断是否有串行输入	
        JBS 	AL,1,I51		;有则跳到I51
        RET             	 	;无则返回
I51:    LDB 	AL,D8251 		;读接收到的字符 
		LCALL 	OUT51			;先在CRT上显示
		CMPB 	AL,#61H 		;以字母‘a’为界限
		JNC 	I52
		ANDB 	AL,#11011111B	;小写转大写
I52:	SUBB 	AL,#30H
		JNC 	IGNO			;<30H
		CMPB 	AL,#0AH
		JC 		I511			;>=3AH
		LCALL 	OUT55			;显示到数码管上
IGNO:	RET
I511:	SUBB 	AL,#07
		CMPB 	AL,#0AH
		JNC 	IGNO
		CMPB 	AL,#10H
		JC 		IGNO
		LCALL 	OUT55
		RET

OUT51:  STB 	AL,D8251
		PUSH 	AL
        LDB 	AL,Z8251
        JBC 	AL,0,$-5
        POP 	AL
        RET
OUT55:	
		PUSH    DL
		LDB     DL,LED[AX]      ;显示键值
        STB     DL,P8255A
        POP     DL
		RET
;--------------------------------------------------------- 
RD_KB:
        LDB     BL,#0AH         ;键盘扫描第一行
        STB     BL,P8255C[0]
        SKIP
        SKIP
        LDB     AL,P8255B[0]    ;读键值
        XORB    AL,#0FFH
        JNE     AA              ;判键是否按下
        SJMP    BB				;无键转第二行 
AA:		LCALL   DELAY			;延时消抖
        LDB     AL,P8255B[0]    ;读键值
        XORB    AL,#0FFH
        JNE     KEYVAL			;计算键值
BB:        
        LDB     BL,#09H         ;扫描第二行
        STB     BL,P8255C[0]
        SKIP
        SKIP
        LDB     AL,P8255B[0]
        XORB    AL,#0FFH
        JNE     CC
        SJMP    NOKEY
CC:     LCALL   DELAY			;延时消抖
        LDB     AL,P8255B[0]    ;读键值
        XORB    AL,#0FFH
        JNE     KEYVAL			;计算键值  
        SJMP    NOKEY
KEYVAL:                         ;计算键码
        ANDB    BL,#01H
        SHL     BL,#03H
        LDB     AH,AL
        LDB     AL,#0FFH
SHIFT:  INCB    AL
        SHRB    AH,#01H
        JNC     SHIFT
        ORB     AL,BL
        SCALL   DELAY
        LJMP    KEYWAIT
        
NOKEY:  LD      AL,#10H     	;返回无键标志
 		LJMP    KEYEXIT
KEYWAIT:
		LDB     BL,P8255B[0]	;等待键释放
		XORB    BL,#0FFH
	    JNE     KEYWAIT        
KEYEXIT:
        RET  
;---------------------------------------------------------         
INIT53:
		PUSH    DX
		PUSH    AX
        LD      DX,#TIM_CTL   	;定时器0工作在方式3
        LDB     AL,#MODE03        
        STB     AL,[DX]
        LD      DX,#TIMER0    	;计数初值为0010H,16分频
        LDB     AL,#10H
        STB     AL,[DX]
        LDB     AL,#00H    
        STB     AL,[DX]
        POP     AX
        POP     DX
        RET   
;---------------------------------------------------------          		        						
INIT55:
		PUSH    AX
  		LDB     AL,#82H         ;PB口输入,PA,PC口输出
        STB     AL,C8255[0]          
	    LDB     AL,#08H         ;使PC3置1
	    STB     AL,P8255C[0] 
	    POP     AX
	    RET
;---------------------------------------------------------         			
INIT51: LDB 	AL,#4EH			;置 8251 工作方式    
        STB 	AL,D8251+2
        NOP
        NOP
        LDB 	AL,#25H			;请求发送,发送允许,接收允许
        STB 	AL,D8251+2
 		NOP
 		NOP
        LDB 	AL,#65H
        STB 	AL,D8251+2
        NOP
        NOP
        LDB 	AL,#4EH			;置 8251 工作方式
        STB 	AL,D8251+2
        NOP
        NOP
        LDB 	AL,#25H			;请求发送,发送允许,接收允许
        STB 	AL,D8251+2
        NOP
        NOP
        RET
;---------------------------------------------------------   
DELAY:  LD      DX,#0F00H       ;延时子程序
DELAY1: DEC     DX
        JNE     DELAY1
        RET 
;---------------------------------------------------------             
;LED显示常数表
LED 	DB      3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
        DB      7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'
;0-F ASCII码表
ASCII:  DB      30H,31H,32H,33H,34H,35H,36H,37H ;'0,1,2,3,4,5,6,7'
        DB      38H,39H,41H,42H,43H,44H,45H,46H ;'8,9,A,B,C,D,F,F'
;---------------------------------------------------------           
        END
        
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -