微机原理习题 1.docx

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

微机原理习题 1.docx

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

微机原理习题 1.docx

微机原理习题1

1、设8255A的A口、B口、C口与控制字寄存器的端口地址分别为80H、82H、84H与86H。

要求A口工作在方式0输出,B口工作在方式0输入,C口高4位输入,低4位输出,试编写8255A的初始化程序。

MOV  AL,10001010B   ;方式控制字

OUT86H ,AL 

2.8255A 的A口、B口、C口与控制字寄存器的端口地址分别为80H、82H、84H与86H,要求PC4输出高电平,PC5 输出低电平,PC6输出一个正脉冲,试写出完成这些功能的指令序列。

MOV AL,00001001B   ;PC4输出高电平

OUT 86H ,AL

 MOV AL,00001010B;PC5 输出低电平

OUT 86H,AL

 MOVAL ,000001100B  ;PC6先输出低电平 

OUT 86H,AL

MOV  AL,00001101B;PC6再输出高电平

OUT86H,AL

 MOV AL,00001100B  ;PC6再输出低电平,形成一个正脉冲 

OUT86H,AL

3、8255A的口地址为 80H~83H,8253的口地址为 84H~87H ,

(1)若A口接8个开关K7~K0,B口接8个指示灯LED 7~LED0,当开关合上时相应的

指示灯亮,断开时灯灭,要求每隔0.5s检测一次开关状态,并在LED上显示出来,试画出

硬件连线图,编写实现这种功能的程序。

(2)若把接在端口A上的开关去掉,要求接在端口B上的指示灯轮流熄灭,每只灯熄灭1

秒钟,请编程实现这种功能。

答:

(1 )8255A:

A口输入,B口输出

 8253:

2MHz/2Hz=1000000

 通道0工作于方式2,取N0=1000

 通道1 工作于方式0,取N1=999,即得OUT1每0.5秒中断一次。

本题用 8253 定时中断,中断处理时检测开关状态,并点亮相应的LED。

 假设8259A已初始化,主程序如下:

 MOVAX,SEG INTR;形成中断矢量表

  MOVDS, AX

 MOVDX,OFFSET INTR

MOVAL,N

MOVAH, 25H

INT21H

MOVAL,10010000B;8255初始化 

OUT83H,AL

 MOVAL, 00110101B;通道0 方式 2,BCD计数

OUT87H,AL

MOVAL,00H;置初值1000

OUT84H,AL

MOV AL,10H

OUT84H, AL

 MOVAL,01110001B ;通道1方式0 ,BCD计数

OUT87H,AL 

MOVAL,99H ;置初值999 

 OUT 85H,AL

MOV AL,09H

OUT 85H,AL

STI

AGAIN:

HLT

JMPAGAIN

中断服务程序:

INTR:

PUSHAX 

 STI

 INAL, 80H;检测开关,合上为0

 NOTAL  ;取反 

OUT81H,AL ;点亮相应LED(合上) 

MOVAL, 01110001B;通道1方式0 ,BCD计数

OUT87H,AL

MOVAL, 99H  ;置初值999

OUT85H,AL

MOV AL, 09H

  OUT85H,AL

  CLI

  MOVAL,20H ;普通EOI 命令 

OUT20H, AL

POPAX

 IRET

2)8255A:

B口输出

  8253:

通道0工作于方式2,取N0=2000 

 通道1工作于方式3,取N1=1000,即得OUT1 频率为1Hz(周期为1秒)的方波,

接到8259A 的IRi,边沿触发中断请求。

 

  主程序如下:

 

MOVAX, SEG INTR ;形成中断矢量表

     MOV DS,AX

MOV DX,OFFSET INTR

MOVAL,N 

MOVAH,25H

 INT 21H

MOVAL,10000000B ;8255初始化

OUT83H,AL

MOVAL, 00110101B;通道0方式2 ,BCD计数 

OUT87H, AL

 MOVAL,00H;置初值2000

 OUT84H,AL

 MOVAL,20H

OUT 84H,AL

MOVAL, 01110111B;通道1方式3,BCD计数

 OUT87H,AL 

MOVAL,00H ;置初值1000

 OUT85H,AL 

 MOV AL,10H

OUT 85H,AL 

MOV AL,0FEH ;熄灭LED0

OUT 81H, AL 

STI 

GOON:

HLT 

 JMP 

中断服务程序如下:

INTR:

 PUSHAX 

STI

ROLAL,1 ;AL左循环移位1位

 OUT81H,AL;点亮下一位LED 

 CLI

 MOV AL,20H

 OUT20H,AL;普通EOI结束命令

POP AX

IRET

硬件连接图如下:

4、设8255A的口地址为300H~303H,A口接4个开关K3~K0,B口接一个七段LED 显示器,用来显示4个开关所拨通的16进制数字0~F,开关都合上时,显示0 ,都断开时显示F,每隔2 秒钟检测一次,试画出硬件连线图,并编写实现这种功能的程序。

 

与上题思路相同

8255A:

A口方式 0 输入,B 口方式0输出,端口地址 300H~303H

8253:

用于2秒定时,端口地址为 304H~307H

2MHz/0.5Hz=4000000

       通道0工作于方式2,取N0=4000

   通道1工作于方式0,取N1=999,即得OUT1每2 秒中断一次。

  本题用8253定时中断,中断处理时检测开关状态,并点亮相应的LED。

假设8259A已初始化,主程序如下:

 TABLE DB3FH,06H,5BH,4FH,66H,6DH,7DH, 07H;七段码表格 

      DB 7FH, 6FH,77H,7CH,39H,5EH,79H,71H 

 

 MOVAX, SEG INTR;形成中断矢量表

 MOVDS, AX

MOV DX,OFFSETINTR 

 MOVAL,N

 MOVAH, 25H

INT21H 

MOVAL, 10010000B;8255初始化

MOV DX,303H

OUTDX,AL

MOVAL,00110101B;8253初始化,通道 0方式2,BCD计数

  MOV DX,307H 

 OUTDX,AL

  MOVAL,00H;置初值4000H

 MOV DX,304H

OUTDX,AL

MOVAL,40H

 OUTDX,AL 

MOVAL,01110001B;通道1 方式0,BCD计数

  MOVDX,307H

OUTDX,AL

 MOVAL,99H;置初值999

 MOV DX,305H

OUT DX,AL 

 MOVAL,09H

 OUT DX,AL   

STI

AGAIN:

HLT 

 JMP AGAIN

中断服务程序:

INTR:

PUSH AX

 STI 

    MOVDX,300H

IN AL, DX ;检测开关,合上为0 

ANDAL,0FH;只保留低4位PA3~PA0

     MOVBX,OFFSETTABLE

XLATTABLE

   MOVDX ,301H

OUTDX,AL  ;点亮LED ,显示数字

MOVAL,01110001B;通道1方式0,BCD计数

  MOV DX,307H

 OUTDX,AL 

MOVAL,99H ;置初值999

 MOV DX,305H

OUTDX,AL

MOVAL, 09H 

 OUTDX ,AL 

   CLI

   MOVAL, 20H;普通EOI命令

OUT20H,AL

 POPAX 

IRET

 

5、利用8255A与ADC0809等芯片设计 PC机上的A/D 转换卡,设8255A的口地址为3C0H~

3C3H,要求对8个通道各采集1个数据,存放到数据段中以D_BUF为始址的缓冲器中,

试完成以下工作:

(1)画出硬件连接图。

(2)编写完成上述功能的程序。

(2)AD_SUBPROC NEAR 

  MOVCX,8    ;CX作数据计数器

     MOV BL,00H ;模拟通道号存在 BL中

 LEADI,D_BUF ;缓冲区

  NEXT_IN:

MOVDX,3C2H;8255A 端口C 地址

    MOV AL,BL 

   OUT DX,AL   ;输出通道号 

   MOV DX,3C3H ;指向控制口

      MOVAL,00000111B;PC3置1

   OUTDX,AL   ;送出开始启动信号

    NOP   ;延时

    NOP

     NOP

   MOVAL,00000110B  ;PC3复位

  OUTDX,AL   ;送出结束启动信号

   MOVDX,3C2H   ;C口 

   NO_CONV:

IN AL ,DX;读入C口内容 

  TESTAL,80H  ;PC7,EOC信号

JNZNO_CONV;PC7=1,未开始转换,等待

NO_EOC:

IN AL,DX   ;PC7=0,已启动转换

    TESTAL,80H  ;再查PC7 

    JZ NO_EOC   ;PC7=0,转换未结束,等待 

   MOVDX,3C0H ;PC7=1 ,转换结束,DX指向A口

     IN AL,DX  ;读入数据

   MOV[DI],AL   ;存入缓冲区

      INCDI

      INC BL     ;指向下个通道 

     LOOPNEXT_IN

RET

AD_SUB  ENDP

6. 试利用ADC0809,8253与8259A等芯片设计8通道A/D转换电路。

系统中用 8253 作定时器,采用中断方式控制采样率,采样率为500Hz。

设8253 的通道0输入时钟脉冲为 2MHz ,输出端OUT0接8259A的IR2,8253的口地址为300H~303H,8259A的口地址为304H与305H,ADC0809的8个输入通道的口地址为308H~30FH,查询EOC信号与状态口地址为306H,ADC0809的输入时钟频率为640KHz,A/D 转换的结果依次存入数据段中以BUFFER为始址的内存中,从通道0 开始先存入各通道的第一个数据,再存放第二个数据,采集10秒钟后停止工作。

要求:

(1 )画出硬件连线图,可以不画具体的译码电路。

(2)编写8253,8259A(只需写入中断屏蔽字)的初始化程序及采集 8 路模拟信号的中断服务程序。

答:

(1)

(2)因为8253的时钟输入频率为2MHz,而要求的采样频率f=500Hz,即用8253定时,每隔2ms 中断一次,因此8253的分频次数(时间常数)N=2MHz/500Hz=4000。

采集10秒钟,共采集10s/2ms=5000次,即8253中断次数为 5000次。

DATA SEGMENT 

BUFFER DB8*5000DUP(?

) 

DATAENDS

;数据采集子程序

8253初始化编程,通道0,方式2,先写低字节,后高字节,BCD计数,时间常数4000

  MOV DX,303H

   MOVAL,00110101B

OUTDX,AL 

    MOV  DX ,300H;通道0

   MOVAX,4000H ;时间常数

  OUT DX,AL

 MOVAL,AH

   OUT  DX,AL

;8259A设置屏蔽字,仅允许 8259A的IR2 与键盘中断,其余禁止

 MOVAL,11111001B ;屏蔽字

  MOVDX,305H 

  OUT  DX,AL   ;向屏蔽寄存器输出屏蔽字 

;设置数据缓冲区始址到SI中,计数初值到 BX中,等待中断,每通道采完5000 次后结束

中断

 MOVSI,OFFSET BUFFER ;SI指向数据缓冲区

  MOVBX,5000

  STI        ;开中断

AGAIN:

CMPBX,0

  JNZ AGAIN

 MOVAL,11111101B  ;采集完,禁止 IR2中断

   MOV DX ,305H

  OUT DX,AL

      MOVAH ,4CH    ;退出中断

 INT 21H 

;中断服务程序,对每个通道均采集一个数据,存入BUFFER

ADINTPROC NEAR 

  MOV CX,0008H  ;设置通道计数器初值

   MOVDX,308H ;DX指向ADC通道0 

NEXT:

OUT DX,AL   ;启动一次转换

 PUSH DX    ;保存通道号 

  MOVDX,306H  ;DX指向状态口

POLL:

IN AL ,DX   ;读入EOC状态 

  TEST AL,80H    ;EOC(D7)=0?

即开始转换了

  JNZPOLL     ;非0 ,循环等待

NO_END:

IN AL,DX   ;EOC=0,开始转换

   TESTAL ,80H  ;再查EOC就是否为1 

  JZ NO_END   ;EOC=0,等待转换结束 

   POPDX   ;EOC=1,恢复通道地址

     IN AL ,DX    ;读取结果

   MOV  [SI],AL ;存储到缓冲区 

   INC DX    ;DX指向下一个通道

  INCSI  ;地址指针指向下一个缓冲单元

  LOOPNEXT ;通道计数器减1,结果非0则循环

    DECBX     ;为0,缓冲数据计数器减1 

   MOV AL,20H

   MOVDX,304H 

   OUT DX,AL

    STI    ;开中断

    IRET

ADINTENDP

7.利用8255A与AD574A设计数据采集系统,输入模拟电压为0~+10V,若每秒采集100

个数据,转换后的数据字存放在W_BUF开始的缓冲器中,低字节在前,高字节在后,采满

16K字节的数据后停止工作,要求:

(1 )画出硬件连线图。

(2 )编写启动AD574A工作与读取转换结果的子程序。

(2 )16K字节的数据共需要8K=8192次采集

;8255A的端口地址

PORT_AEQU0F0H;A 口地址

PORT_B EQU0F1H   ;B 口地址

PORT_CEQU0F2H  ;C 口地址

PORT_CTLEQU0F3H ;控制口地址 

;8255A控制字:

A 口与B口工作于方式 0,A口、B口与C口的上半部分为输入,C

口的下半部分为输出

LEA DI,W_BUF

MOVCX,8192 

AD_CONT:

MOVAL,10011010B;方式字 

OUTPORT_CTL ,AL ;输出方式字

;启动A/D转换 

MOVAL,00H

OUT PORT_C,AL   ;使CS,CE, R/C均为低

NOP            ;延时

NOP

MOVAL,04H

OUT PORT_C,AL  ;使CE=1,启动A/D 转换

NOP

NOP

MOV AL,03H 

OUT  PORT_C,AL ;使CE=0,CS=R/C=1,结束启动状态

READ_STS:

INAL,PORT_C;读STS状态

    TESTAL,80H  ;转换(STS=0) 完了不?

   JNZ READ_STS   ;否,则循环等待

;转换完成,启动读操作 

     MOVAL,01H

    OUT PORT_C,AL  ;使CS=0,CE=0, R/C=1

   NOP

 MOV AL ,05H;使CE=1,CS=0,R/C=1

   OUTPORT_C,AL 

 ;读取数据,存入BX中

   INAL,PORT_A  ;读入高4位数据

     ANDAL,0FH

  MOVBH,AL;存入BH

     INAL,PORT_B    ;读入低8 位

    MOV BL,AL;存入BL

      MOV[DI],BX ;存入缓冲区

   INCDI 

 INC DI

     ;结束读操作

 MOV AL,03H ;使CE=0,CS=1 

   OUTPORT_C,AL  ;结束读操作 

   CALL DELAY_10MS ;延时10个毫秒

    LOOP AD_CONT

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

当前位置:首页 > 高等教育 > 理学

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

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