微机原理实验代码.docx

上传人:b****2 文档编号:24305680 上传时间:2023-05-26 格式:DOCX 页数:22 大小:18.24KB
下载 相关 举报
微机原理实验代码.docx_第1页
第1页 / 共22页
微机原理实验代码.docx_第2页
第2页 / 共22页
微机原理实验代码.docx_第3页
第3页 / 共22页
微机原理实验代码.docx_第4页
第4页 / 共22页
微机原理实验代码.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

微机原理实验代码.docx

《微机原理实验代码.docx》由会员分享,可在线阅读,更多相关《微机原理实验代码.docx(22页珍藏版)》请在冰豆网上搜索。

微机原理实验代码.docx

微机原理实验代码

CHECKMACROCODE,COMPARE

MOVAL,0000&CODE&B

MOVDX,PORT

OUTDX,AL

MOVDX,PORT+1

INAL,DX

LEABX,TAB&COMPARE

CMPAL,0FH

JNEDISPLAY

ENDM

DATASEGMENT

MESSAGEDB'PLEASEINPUTANYKEYFROMKEYBOARD,PRESSFFOREND.',0DH,0AH,'$'

TAB1DB'F','E','D','C'

TAB2DB'B','A','9','8'

TAB3DB'7','6','5','4'

TAB4DB'3','2','1','0'

KBDB00EH,00DH,00BH,007H

PORTEQU280H

DATAENDS

STACKSEGMENTPARASTACK

DB256DUP(0)

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVDX,PORT+3;初始化8255

MOVAL,10000010b

OUTDX,AL

LEADX,MESSAGE

MOVAH,09H

INT21H

SEARCH:

MOVAL,0;若有键按下,按列查找哪个键

MOVDX,PORT

OUTDX,AL

MOVDX,PORT+1

INAL,DX

ANDAL,0FH

CMPAL,0FH

JESEARCH

CHECK1110,1;查找按下的键,并显示

CHECK1101,2

CHECK1011,3

CHECK0111,4

NOP

JMPSEARCH

DISPLAY:

MOVDI,BX;存小键盘扫描码

LEASI,KB

NEXT:

CMPAL,[SI];查键盘扫描码表

JESHOW;找到了,转去显示

INCSI;否则继续

INCDI

JMPNEXT

SHOW:

;显示键入字符

MOVAH,02H

MOVDL,[DI]

INT21H

CMPDL,'F';若是'F'则退出

JEOVER

CALLDELAY

JMPSEARCH;重新开始查询

OVER:

MOVAH,4CH

INT21H

DELAYPROC;延时循环100*65536次

PUSHDI

PUSHCX

MOVCX,0FH

XORDI,DI

AGAIN:

NOP

DECDI

JNZAGAIN

DECCX

JNZAGAIN

POPCX

POPDI

RET

DELAYENDP

CODEENDS

ENDSTART

SET8253MACROSEGCODE,SEGOFFSET

MOVAL,SEGCODE&B

MOVDX,P8253+3;;工作在模式3

OUTDX,AL

MOVAX,3E8H

MOVDX,P8253+&SEGOFFSET

OUTDX,AL

MOVAL,AH;;先赋高八位再赋低八位

OUTDX,AL

ENDM

LIGHTUPMACRODIGIT,SELECT

LOCALDELAY

MOVDL,DIGIT;;选择位

MOVDH,0

MOVSI,DX

MOVAL,[BX][SI]

MOVDX,P8255+1;;点亮LED

OUTDX,AL

MOVAL,0000&SELECT&B

MOVDX,P8255+2;;PC输出选通信号

OUTDX,AL

PUSHCX

MOVCX,00F00H;;延时

DELAY:

LOOPDELAY

POPCX

XORAX,AX

MOVDX,P8255+2;;PC输出选通信号

OUTDX,AL

ENDM

DATASEGMENT

LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

SEC1DB0

SEC2DB5

MIN1DB9

MIN2DB5

P8259EQU20H

P8255EQU288H

P8253EQU280H

OLD_0ADW0,0;原中断向量

OLD_8259DB0

DATAENDS

STACKSEGMENTPARASTACK

DB256DUP(0)

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

CLI

SET825300110110,0

SET825301110110,1

PUSHES;设置中断向量表

PUSHBX

MOVAL,0BH;保护原中断向量,0B中断类型号

MOVAH,35H

INT21H;读中断向量表

MOVOLD_0A+2,ES;ES为段地址,BX为段偏移地址

MOVOLD_0A,BX

POPBX

POPES

PUSHDS

MOVAL,0BH;写新中断向量

MOVAH,25H

MOVDX,SEGINT_0A

MOVDS,DX

MOVDX,OFFSETINT_0A

INT21H

POPDS

MOVAL,10000000B;对8255进行设置,PB/PC输出

MOVDX,P8255+3

OUTDX,AL

INAL,P8259+1;8259奇地址,中断向量屏蔽

MOVOLD_8259,AL;字设置保护原屏蔽字

ANDAL,11110111B;开IRQ3

OUTP8259,AL

STI;开中断

PLAY:

LEABX,LED;LED段码

LIGHTUPSEC1,0001

LIGHTUPSEC2,0010

LIGHTUPMIN1,0100

LIGHTUPMIN2,1000

JMPPLAY

MOVAH,4CH

INT21H

INT_0APROCNEAR;中断服务子程序

CMPSEC1,9

JZINT1

INCSEC1

JMPEXIT

INT1:

MOVSEC1,0

INCSEC2

CMPSEC2,6

JNZEXIT

MOVSEC2,0

INCMIN1

CMPMIN1,10

JNZEXIT

MOVMIN1,0

INCMIN2

CMPMIN2,6

JNZEXIT

MOVMIN2,0

EXIT:

MOVAL,20H

OUT20H,AL

IRET

INT_0AENDP

CODEENDS

ENDSTART

TRANSSETMACROADDRESS,ALNUM

MOVDX,ADDRESS

MOVAX,ALNUM

OUTDX,AL

ENDM

DATASEGMENT

FILEDB'D:

\abc.TXT',0

FCODEDW0

BUFDB2000HDUP(0)

DATAENDS

STACKSEGMENTPARASTACK

DB256DUP(0)

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

TRANSSET3FBH,80H;传输线路控制寄存器,寻址除数锁存器

TRANSSET3F8H,60H;DLL

TRANSSET3F9H,0;DLH

TRANSSET3FBH,1AH;传输线路控制寄存器,LCR地址,7位数据,1位停止

TRANSSET3FCH,03H;MODEM控制寄存器

TRANSSET3F9H,0;屏蔽中断

MOVAH,3DH;文件操作

LEADX,FILE

MOVAL,2

INT21H

MOVFCODE,AX

XORSI,SI

RECEIVE:

MOVDX,3FDH;检测接收数据是否准备好

INAL,DX

TESTAL,01H

JZRECEIVE

MOVDX,3F8H

INAL,DX

MOVDL,AL

MOVAH,02

INT21H

SEND:

MOVDX,3FDH;检测接收数据是否准备好

INAL,DX

TESTAL,20H

JZSEND

MOVAH,3FH;从文件中读取发送

LEADX,BUF

ADDDX,SI

MOVBX,FCODE

MOVCX,1

INT21H

MOVDX,3F8H

MOVAL,BUF[SI]

OUTDX,AL

INCSI

;MOVDL,AL

;MOVAH,02;将字符显示在屏幕上

;INT21H

REPT45

NOP

ENDM

JMPRECEIVE

CODEENDS

ENDSTART

TRANSSETMACROADDRESS,ALNUM

MOVDX,ADDRESS

MOVAX,ALNUM

OUTDX,AL

ENDM

DATASEGMENT

FILEDB'D:

\abc.TXT',0

FCODEDW0

BUFDB2000HDUP(0)

IO8254AEQU280H

IO8251AEQU2B8H

IO8251BEQU2B9H

DATAENDS

STACKSEGMENTPARASTACK

DB256DUP(0)

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

TRANSSETIO8254A+3,00010110B;设置8254计数器0工作方式,低字节,8位,方式3,二进制

TRANSSETIO8254A,52;给8254计数器0送初值(波特率1200,因子16,计数初值52)

TRANSSETIO8251B,0;初始化8251

TRANSSETIO8251B,40H;向8251控制端口送40H,使其复位

TRANSSETIO8251B,7EH;设置为1个停止位,8个数据位,波特率因子为16

TRANSSETIO8251B,27H;向8251送控制字允许其发送和接收

MOVAH,3CH;文件操作

LEADX,FILE

MOVCX,00

INT21H

MOVFCODE,AX

MOVAH,3DH

LEADX,FILE

MOVAL,2

INT21H

XORSI,SI

SEND:

MOVDX,IO8251B

INAL,DX

TESTAL,20H;发送是否准备好

JZSEND

MOVDX,IO8251A

MOVAL,'F'

OUTDX,AL;发送

;MOVDL,AL

;MOVAH,02;将字符显示在屏幕上

;INT21H

REPT64

NOP

ENDM

RECEIVE:

MOVDX,IO8251B

INAL,DX

TESTAL,01;检查接收是否准备好

JZRECEIVE;没有,等待

MOVDX,IO8251A

INAL,DX;准备好,接收

MOVDL,AL

MOVAH,02;将接收到的字符显示在屏幕上

INT21H

MOVBUF[SI],DL

MOVAH,40H;接收到的字符写入文件

LEADX,BUF

ADDDX,SI

MOVBX,FCODE

MOVCX,1

INT21H

INCSI

REPT45

NOP

ENDM

JMPSEND

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

DATASEGMENT

INT0BDW2DUP(?

IMRDB?

P_ADDW298H

TABDB'0123456789ABCDEF'

DATAENDS

SSEGMENTSTACK'STACK'

DB128DUP(?

SENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

S

MAINPROCPAR

MOVAX,DATA

MOVDS,AX

CLI

;修改中断向量表

PUSHES

PUSHBX

MOVAH,35H;保护原中断向量

MOVAL,0BH

INT21H

MOVINT0B,ES

MOVINT0B+2,BX

POPBX

POPES

PUSHDS

PUSHDX

MOVDX,OFFSETDISP;设置新的中断向量

PUSHBX

MOVBX,SEGDISP

MOVDS,BX

POPBX

MOVAX,250BH

INT21H

POPDX

POPDS

;8259清除0BH号中断屏蔽位

INAL,21H

MOVIMR,AL

ANDAL,0F7H

OUT21H,AL

;启动AD转换

NEXT:

MOVDX,P_AD

MOVAL,0

OUTDX,AL

;等待中断,并检测是否有按键

PUSHCX

MOVCX,100

LOOP$

POPCX

STI

MOVAH,1

INT16H

JZNEXT

;恢复8259中断屏蔽位

CLI

MOVAL,IMR

OUT21H,AL

;恢复中断向量表

PUSHDX

PUSHDS

MOVDX,INT0B

MOVDS,DX

MOVDX,INT0B+2

MOVAX,250BH

INT21H

POPDS

POPDX

MOVAX,4C00H

INT21H

MAINENDP

DISPPROCFAR

PUSHAX

PUSHDX

MOVDX,P_AD;读入AD转换结果

INAL,DX

MOVAH,0;AH中为低位,AL中为高位

SHLAX,4

SHRAL,4

PUSHAX;输出高位

MOVAL,AH

LEABX,TAB

XLATB

MOVDL,AL

MOVAH,2

INT21H

POPAX

LEABX,TAB;输出低位

XLATB

MOVDL,AL

MOVAH,2

INT21H

MOVDL,0DH;输出回车

MOVAH,2

INT21H

MOVDL,0AH;输出回车

MOVAH,2

INT21H

MOVAL,20H

OUT20H,AL

POPDX

POPAX

IRET

DISPENDP

CODEENDS

ENDMAIN

DATASEGMENT

ADD_DADW290H

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MAINPROCFAR

MOVAX,DATA

MOVDS,AX

MOVDX,ADD_DA

MOVAL,0

NEXT:

OUTDX,AL;向DA送数据

ADDAL,10

MOVCX,5;延时

LOOP$

MOVAH,1;检测按键

INT16H

JZNEXT

MOVAH,4CH

INT21H

MAINENDP

CODEENDS

ENDMAIN

DATASEGMENT

ADD_DADW290H

LENDB32

DATA_INDB80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh

db0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h

db80h,66h,4eh,38h,25h,15h,09h,04h

db00h,04h,09h,15h,25h,38h,4eh,66h

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

MAINPROCFAR

MOVAX,DATA

MOVDS,AX

MOVDX,ADD_DA

BEGIN:

MOVBH,LEN

LEASI,DATA_IN

NEXT:

MOVAL,[SI]

OUTDX,AL;向DA送数据

INCSI

DECBH

MOVCX,1;延时

LOOP$

CMPBH,0;一个周期已完成

JZBEGIN

MOVAH,1;检测按键

INT16H

JZNEXT

MOVAH,4CH

INT21H

MAINENDP

CODEENDS

ENDMAIN

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1