南邮微机实验二

实验要求:输入用户名和密码,输入密码时无回显,当输入用户名及密码与预设用户名、密码相同时,才显示欢迎页面。

.486
DATA SEGMENT USE16
INPUTID DB 'PLEASE INPUT YOUR ID: $'
WRONGINPUT DB 'YOUR INPUT IS WRONG $'
ID DB 'KELLY'    ;your ID
IDLEN EQU $-ID
INPUTPASSWORD DB 'PLEASE INPUT YOUR PASSWORD: $'
PASSWORD DB 'CODING'    ;your PASSWORD
PASSWORDLEN EQU $-PASSWORD
MESG DB 'WELCOME$'
LL EQU $-MESG
BUF DB 100
    DB ?
    DB 100 DUP (?)
DUF DB 100 DUP (?)
DATA ENDS
CODE SEGMENT USE16
     ASSUME CS:CODE,DS:DATA,ES:DATA
BEG: 
     MOV AX,DATA
     MOV DS,AX
     MOV ES,AX
AGAIN: MOV AH,9
       MOV DX,OFFSET INPUTID
       INT 21H
       CALL ENTER
       MOV AH,0AH          ;input ID
       MOV DX,OFFSET BUF
       INT 21H
       CALL ENTER
       MOV BL,BUF+1
       MOV BH,0H
       CMP BL,IDLEN
       JNZ EXIT
       LEA DI,ID    ;compare strings
       LEA SI,BUF+2
       MOV CX,IDLEN
	   CLD
	   REPE CMPSB
	   JNZ EXIT
	   MOV AH,9
	   MOV DX,OFFSET INPUTPASSWORD
	   INT 21H
	   CALL ENTER
	   MOV CX,100
	   LEA SI,DUF
	   MOV DL,0
PSD:   MOV AH,07H           ;input password
       INT 21H
	   CMP AL,0DH
	   JZ COMPARE
	   MOV [SI],AL
	   INC SI
	   INC DL
	   LOOP PSD
COMPARE:   CMP DL,PASSWORDLEN
           JNZ EXIT
           LEA DI,PASSWORD     ;compare strings
	   LEA SI,DUF
	   MOV CX,PASSWORDLEN
	   CLD
	   REPE CMPSB
	   JNZ EXIT
WELCOME:MOV AX,0003H
        INT 10H
        MOV AH,9
	MOV DX,OFFSET MESG
	INT 21H
       MOV AH,4CH
       INT 21H
EXIT PROC 
    MOV AH,9
    MOV DX,OFFSET WRONGINPUT
    INT 21H
    MOV AH,4CH
    INT 21H
    RET
EXIT ENDP
ENTER PROC
         MOV AH,2
	 MOV DL,0DH
	 INT 21H
	 MOV AH,2
	 MOV DL,0AH
	 INT 21H
	 RET
ENTER ENDP
CODE ENDS
     END BEG

### 电大学微机实验中的串行接口 #### 一、串行接口概述 在计算机体系结构中,串行通信是一种数据传输方式,在这种模式下,数据一位接一位地顺序传送。这种方式减少了所需的物理连接线数量,从而降低了成本和复杂度[^1]。 对于电大学的微机实验而言,串行接口实验旨在让学生理解并掌握单片机或其他处理器通过RS-232标准与其他设备进行异步通讯的方法和技术要点。这不仅涉及到硬件电路的设计搭建,还包括相应驱动程序编写等内容的学习实践过程[^2]。 #### 实验目的与要求 该实验的主要目的是使学生能够熟悉常用PC机上的COM端口配置参数设置;学会利用C/C++编程实现简单的字符发送接收功能;进一步加深对中断机制的理解应用水平。具体来说: - 掌握8051系列单片机内部SCI模块的工作原理及其寄存器定义; - 编写基于查询方式或中断服务子程序控制下的UART收发例程; - 使用Proteus仿真工具完成虚拟仪器仪表连线调试工作。 #### 三、示例代码展示 下面给出一段适用于MCS-51架构MCU平台的基础版本ASCII码字符串回显测试源文件(假设波特率为9600bps),供参考学习之用: ```c #include <reg52.h> sbit LED=P2^7; // 定义LED指示灯引脚位置 void delay(unsigned int i){ while(--i); } // 初始化串行口函数, 设置SMOD=1,BREN=1,TB8=RB8=0, // 波特率发生器采用定时器T1模式2(自动重装载), SMOD位决定实际波特率高低. void InitSerial(void){ TMOD = 0x20; TH1 = 0xFD; // 设定初值对应于fosc=11.0592MHz时的标准9600bps速率 SCON = 0x50; // 工作于方式1,允许接收 TR1 = 1; // 启动计数溢出产生时钟脉冲序列供给SCON寄存器作为移位时序信号 ES = 1; // 开启串口中断请求开关 EA = 1; // 总控全局中断使能标志置位 } // 中断处理程序用于响应来自外部器件的数据到来事件触发条件满足情况 void UartInt() interrupt 4 { if(RI){ // 如果RI被置'1',表示已成功收到一字节有效信息 RI = 0; SBUF=SBUF; // 将读取到的内容原样送回到发送缓冲区准备再次发出形成自环效果 } TI = 0; // 清除发送完毕状态标记以便后续继续正常运作不受影响 } main(){ InitSerial(); while (1){ LED=~LED; delay(6000); } } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值