微机原理.docx

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

微机原理.docx

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

微机原理.docx

微机原理

;6264.asm

;1

codesegment'code'

assumecs:

code

start:

movax,1000h

movds,ax

movbx,0000h

movdl,40h?

rep1:

incdl

movds:

[bx],dl

incbx

cmpdl,5ah

jnzrepl

movdl,0

mov[bx],dl

movax,ds

moves,ax

movbp,0

movah,4

int14h

xorcx,cx

loop$

int20h?

codeends

end

;simpleIO.asm

;2

mainprocfar;与程序结尾处的“mainendp”一起定义一个过程

codesegment'code';定义代码段,段名“code”

assumecs:

code;指定代码段和段寄存器cs之间的联系

begin:

movbl,0

start:

movdx,8h

inal,dx;从244读入开关状态(地址08h)

testal,0ffh;

jzflash;判断是否全0,若是,二极管闪烁

movdx,10h;10h是377的地址

notal

outdx,al;将读入的开关状态求反后送377输出,对应发光二极管显示

jmpstart

flash:

notbl;闪烁程序段

movdx,10h

moval,bl

notal

outdx,al;将全0送二极管显示

movcx,0bfffh;延时200ms。

0bffh=3071(D),

loop$;延时时间=49151*33(时钟周期)/8000000(CPU工作频率)≈200ms

notbl;又一次求反bl,即将全1送二极管显示

moval,bl

notal

outdx,al

movcx,0bfffh

loop$;延时200ms。

jmpstart

codeends

mainendp

endbegin

;中断控制器8259的使用

;8259.asm

;IRQ1INTERRUPT

;

C8259EQU20H;8259地址,通过硬件译码电路已设好

CODESEGMENT

MAINPROCFAR;与程序结尾处的“mainendp”一起定义一个过程

ASSUMECS:

CODE

Start:

XORAX,AX;AX=0

MOVDS,AX;中断向量表在内存0000h~03ffh

LEAAX,IRQ1;IRQ1是中服程序地址,送AX,见下文中服程序

MOVDS:

24H,AX;装入IP(以下几条,向中断向量表装入中服入口地址,24h=09h*4

MOVAX,CS

MOVDS:

26H,AX;装入CS

MOVDX,C8259;8259地址

MOVAL,00010011B;初始化字ICW1,边沿触发,单片,写入ICW4

OUTDX,AL

INCDX

MOVAL,00001000B;ICW2,设置中断类型号08h~0fh,不严格,intel规定0~4是专用中

;断,5~31是为将来扩展或特殊用途保留的中断,32~255是用户可使用的

OUTDX,AL

MOVAL,00001101B;中断方式字ICW4,普通嵌套,缓冲方式,主片,非自动中断结束,16位CPU

OUTDX,AL

MOVAL,11111101B;屏蔽命令字OCW1,只允许IRQ1中断请求

OUTDX,AL

MOVAL,20H;中断结束字OCW2(EOI),00100000B,普通EOI,优先权固定

OUT20H,AL

MOVBL,'0';设置初始发送字符为“0”

MOVAL,BL

MOVAH,1

INT14H;BIOS异步通信功能调用,通过串口将AL指定字符发送到上位机显示

STI;开中断

JMP$;死循环,等待外部中断触发信号

IRQ1:

CLI;以下是中服程序,开中断

INCBL;下一个输出字符

MOVAL,BL

MOVAH,1

INT14H;输出字符

MOVAL,20H;

OUT20H,AL;中断结束字

STI;开中断

IRET;中断返回

MAINENDP

CODEENDS;代码段结束

END

定时控制器8253的使用

;03E8=0000001111101000==1000D,0.001s,

;8253.asm

;8253waveoutput

;

CODESEGMENT;SEGMENT与ENDS构成一完整的代码段

MAINPROCFAR;PROC和ENDP定义完整的过程,过程属性为FAR,过程可以被

;其它代码段的程序调用(p81)

ASSUMECS:

CODE;建立段与段寄存器的关系

STARTMOVDX,43H;控制字寄存器端口地址

MOVAL,01110110B;计数器1,2进制,方式3,读16位计数值

OUTDX,AL

MOVDX,41H;计数器1地址

MOVAL,0E8H

OUTDX,AL;写计数值高8位

MOVAL,03H

OUTDX,AL;计数值低8位

MOVDX,43H

MOVAL,10110100B;计数器2,2进制,方式2,读16位计数值

OUTDX,AL;写计数器2控制字

MOVDX,42H

MOVAL,0FH;00001111B

OUTDX,AL

MOVAL,0H

OUTDX,AL;计数器2预置计数值000fh

INT20H;20h中断调用,结束程序运行

MAINENDP

CODEENDS

END

;8255.asm

;test8255io

;readfromportb

;outputtoporta

porta=8h

portb=9h

portc=0bh

;

mainprocfar

dcons=10h;延时常数

cgsegment'code'

assumecs:

cg

;

begin:

movdx,portc;8255初始化

moval,82h

outdx,al

movah,0ffh

movbl,0

lp:

movdx,portb;B口读入开关状态

inal,dx

testal,ah

jzshift

movdx,porta;A口输出开关状态

notal

outdx,al

jmplp

shift:

moval,bl

movdx,porta

notal

outdx,al

calldelay;延时

shlbl,1;移位

testbl,ah

jnzlp

movbl,1

jmplp

back:

retf

;

delayprocnear

pushcx

movcx,0

delay1:

orcx,cx

orcx,cx

loopdelay1

popcx

retn

delayendp

;

mainendp

cgends

endbegin

;8255lamp.asm

;用8255控制模拟十字路口交通灯的控制情况

;8255trafficlamp

;

portaEQU8H

portbEQU9H

controlEQU0bH

;

dsegsegment

timedb?

valuedb?

donedb0

intmaskdb?

dsegends

;

csegsegment

assumecs:

cseg,ds:

dseg

start:

moval,80h

movdx,control

outdx,al;8255初始化

sw:

moval,11h

movdx,porta

notal

outdx,al;ALLREDLIGHT

incdx

notal

outdx,al

movcx,3

cp1:

calldelay

loopcp1

lamp:

moval,14h

movdx,porta

notal

outdx,al

moval,41h

incdx

notal

outdx,al

movcx,6

cp2:

calldelay

loopcp2

movvalue,5

flash:

;GREENFLASH

moval,10h;绿灯闪烁,0.5秒亮,0.5秒灭

movdx,porta

notal

outdx,al

movAL,1h

incdx

notal

outdx,al

movcx,1

cp3:

calldelay

loopcp3

moval,14h

movdx,porta

notal

outdx,al

moval,41h

incdx

notal

outdx,al

movcx,1

cp4:

calldelay

loopcp4

decvalue

jneflash;重复5次

;黄灯1秒钟

moval,12h

movdx,porta

notal

outdx,al

moval,21h

incdx

notal

outdx,al

movcx,2

cpa:

calldelay

loopcpa

;绿灯6秒钟

moval,41h

movdx,porta

notal

outdx,al

moval,14h

incdx

notal

outdx,al

movcx,6

cp5:

calldelay

loopcp5

movvalue,5

flass:

;GREENFLASH

moval,1h;绿灯闪烁,0.5秒亮,0.5秒灭

movdx,porta

notal

outdx,al

moval,10h

incdx

notal

outdx,al

movcx,1

cp6:

calldelay

loopcp6

moval,41h

movdx,porta

notal

outdx,al

moval,14H

incdx

notal

outdx,al

movcx,1

cp7:

calldelay

loopcp7

decvalue

jnzflass

;黄灯1秒钟

moval,21h

movdx,porta

notal

outdx,al

moval,12h

incdx

notal

outdx,al

movcx,2

cpb:

calldelay

loopcpb

jmplamp

;

back:

int20h

;

delayprocnear

pushds

pushax

pushcx

xorcx,cx

loop$

popcx

popax

popds

retn

delayendp

;

csegends

endstart

;

;8255led.asm

;用8255的A口和B口分别作4个共阴数码管的段码端口和位选端口,

;在4个数码管上循环显示4个数码字符0-3

;8255addressis10h~13h(连接JJ11-2)

;portAconnecttoledsegment

;portb0-3connecttoledcolumn

;

portaequ10h

portbequ11h

controlequ13h

;

mainprocfar

codesegment'code'

assumecs:

code,ds:

code

movax,cs

movds,ax

moval,80h

movdx,control

outdx,al;初始化,所有的端口设为输出

moval,0ffh

movdx,porta

outdx,al;A口送全1,关闭数码管显示

incdx;B口地址

outdx,al;B口送全1,各位数码管全不选中

movbx,0e00h;bh=00001110(位选),bl=00000000(指示位显示内容)

disp:

movsi,offsetsegtab

pushbx

movbh,0

addsi,bx;si指向segtab的元素

popbx;bx仍等于0e00h

moval,[si];首次al=“0”的七段代码

notal;因为JB输入低电平,经74ls40反相,对应段亮

movdx,porta

outdx,al;

moval,bh

incdx

outdx,al;首次选中最低位数码管,对应数码管亮

movcx,01ffh

loop$;延时

shlbh,1

orbh,1;到此bh=00011101B

incbl;

cmpbl,04;bl若加到4,则使bh=00001110,bl=00000000,即重新从0开始显示

jnedisp1

movbh,0eh;

disp1:

andbl,3;

jmpdisp

segtab:

db3fh,06h,5bh,4fh,66h,6dh,7dh,7,7fh,6fh;0-9的7段译码

codeends

mainendp

end

;8255key.asm

pa55equ10h

pb55equ11h

p55ctlequ13h

codesegment

mainprocfar

assumecs:

code

start:

movax,cs

movds,ax

scan:

callkey;getacharin(dl)anddisplayit

jmpscan

mainendp

keyprocnear

moval,82h

movdx,p55ctl

outdx,al;setcommandwordof8255a

;portaforoutput,portbforinput

wait1:

moval,00

movdx,pa55

outdx,al;portaoutput00

movdx,pb55

inal,dx;getcoldata

andal,0fh

cmpal,0fh

jnzkey1;nokeyisclosed,wait

retn

key1:

pushax;savethecoldata

pushax

movcx,1000h;delayforamoment

loop$

movdx,p55ctl

moval,90h;setcommandwordof8255a

outdx,al;portaforinput,portbforoutput

movdx,pb55

popax

outdx,al;outputcoldatafromportb

movdx,pa55

inal,dx;(al)isrowdata

popbx

movah,bl;(ah)iscoldata

notax

andax,0f0fh

movsi,offsettable

movdi,offsetchar

movcx,24

tt:

cmpax,[si];cmp(col,row)witheveryword

jznn;inthetable

deccx

jnzkey2

retn

key2:

addsi,2

incdi

jmptt

nn:

moval,[di]

movah,1

int14h

pushdx

moval,82h

movdx,p55ctl

outdx,al;setcommandwordof8255a

;portaforoutput,portbforinput

wait2:

moval,00

movdx,pa55

outdx,al;portaoutput00

movdx,pb55

inal,dx;getcoldata

andal,0fh

cmpal,0fh

jnzwait2;waituntilthekeyisup

popdx

retn

keyendp

tabledw0101h,0102h,0104h,0108h

dw0201h,0202h,0204h,0208h

dw0401h,0402h,0404h,0408h

dw0801h,0802h,0804h,0808h

chardb'048C159D26AE37BF'

codeends

endstart

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

当前位置:首页 > 职业教育 > 职高对口

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

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