7.用8253设计定时程序,设输入频率为2MHz,要求能产生3分、6分和12分的定时,定时到产生中断,8253的连接示意图如下,试编写相应程序段。
例如要求的定时时间分别为5μs 、l0μs和20μs并设计一个1s延时子程序DELAY,则不同定时的调用情况表示如下:
MOV # 05H R0 , ;5s延时
DELAY LOOP1: LCALL
DJNZ LOOP1 R0 , ? MOV # 0AH R0 , ;10s延时
DELAY LOOP2: LCALL
DJNZ LOOP2 R0 , ? MOV # 14H R0 , ;20s延时
DELAY LOOP3: LCALL
DJNZ LOOP3 R0 , ?
8.一个数据采集系统,其中A/D转换为8位,要求采样5次,其数据放在3000H为首地址的内存单元中,试设计一个排序程序,将采样值按从小到大顺序排列。 FILTER: MOV A,3000H ;新的采样数据在3000H中
MOV @R0,A ;以R0间址将新数据排入队尾,
同时冲掉原队首数据
INC R0 ;修改队尾指针 MOV A,R0
ANL A,#4FH ;对指针作循环处理 MOV R0,A
MOV Rl,#40H ;设置数据地址指针 MOV R2,#00H ;清累加和寄存器 MOV R3,#00H
9.在以DATA为首地址的存储区中,有一长度为100字节的无序数据表,设要查找的关键字在KEY单元,试编写程序,要求找到关键字,则它所在的内存单元地址存在R2、R3中,若未找到,则将R2、R3置零,根据上述要求编制框图和程序。出于待查找的是无序表格,所以只能按单元逐个搜索,根据题意可画出程序流程图,如图所示。 ORG 8000H
START:MOV CHE,KEY DONE:RET MOV R4,#100 A1: POP A MOV A,#0 INC A MOV DPTR,#TABLE LOOP:PUSH A DJNZ R4 , LOOP MOVC A,@A+DPTR MOV R2 , #0 CJNE A, CHE, A1 MOV R3 , #0 MOV R2, DPH AJMP DONE MOV R3, DPL TABLE:DB xx … CHE EQU 20H KEY EQU 21H
10.用DAC0832设计一个锯齿波电压发生器,在一些控制应用中,需要有一个线性增长的电压(锯齿波)来控制检测过程、移动记录笔或移动电子束等。对此可通过在DAC0832的输出端接运算放大器,由运算放大器产生锯齿波来实现(可用其它的芯片来实现)。设计电路如图。试绘制设计电路并编制相应程序。用DAC0832产生锯齿波电路。
图中的DAC0832工作于单缓冲方式,其中输入寄存器受控,而DAC寄存器直通。假定输入寄存器地址为7FFFH,产生锯齿波的程序清单如下: MOV A,#00H ;取下限值 MOV DPTR,#7FFFH ;指向0832口地址 MM: MOVX @DPTR,A ;输出 INC A ;延时 NOP NOP NOP SJMP MM ;反复
9.现有2K*8位存储器芯片,需扩展8K*8位存储器结构采用译码法进行扩展,扩展8KB的存储结构需要2KB的存储器芯片4块,2K存储器所用的地址为A0~A10共11根地址线。试画出电路图,并标出地址范围。
80C51 存储器 AA 与0~7相连 AA1相连 与8~ 0DD 与0~7相连 译码输出与存储器的片选信号连接 1的片选信号相连 与存储器 2的片选信号相连 与存储器 3的片选信号相连 与存储器 4的片选信号相连 与存储器 P0口经锁存器锁存形成AA0~7 P2.、P2.、P2. 012 P0口 P2. P2. 43 0 0 0 1 1 0 1 1
P2.3、P2.4作为二-四译码器的译码地址,译码输出作为扩展4个存储器芯片的片选信
号,P2.5、P2.6、P2.7悬空。扩展连线图如图所示。
74LS139Y0Y1Y2Y3CP2.2P2.1P2.0P0口锁存输出A10A9A8A10A9A8P2.4P2.3BA1GCEEA10A9A8CEA10A9A8CEA7|A0A7A7|A7|1|A02A03A04
这样得到四个芯片的地址分配如表所示。 译码方式地址分配表
P2.7芯片100000000P2.600000000P2.500000000P2.400001111P2.300110011P2.2…. P00 …. 01 …. 10 …. 01 …. 10 …. 01 …. 10 …. 01 …. 1地址范围0000H---07FFH0800H---0FFFH1000H---17FFH1800H—1FFFH芯片2芯片3芯片4
9.用8253监视一个生产流水线示意图,每通过50个工件扬声器响5秒,频率为2000HZ,根据分析编制监视程序。
例:用8253监视一个生产流水线,每通过100个工件。蜂鸣器响6s。频率为1000HZ。 ① 硬件连接:工件从光源与光敏电阻之间通过时,在晶体管的发射极上会产生一个脉冲,此脉冲作为8253计数通道0的计数脉冲,当通道0计数满100后,由OUT0输出负脉冲,经反相后作为8259A的一个中断请求信号,在中断服务程序中,启动8253计数通道1工作,由OUT1连续输出1000HZ的方波,持续6s后停止输出。 ② 控制字设置:通道0计数器工作于方式2,采用BCD计数,因计数初值为100,采用RL1RL0=10(读/写计数器的高8位),则方式控制字为00100101B。通道1计数器工作于方式3,CLK1接2MHZ时钟,要求产生1000HZ的方波,则计数初值应为2000000÷1000=2000,采用RL1RL0=10(只读/写高8位),BCD计数,则方式控制字为01100111B。 ③ 程序编制:假设8253通道0的地址为40H,通道1的地址为42H,控制口地址为46H。8255A的A口地址为80H,工作于方式0输出。 则主程序为:
;通道0初始化 MOV AL,25H
;计数初值高8位,低8位自动清零 OUT 46H,AL
MOV AL,01H
OUT 40H,AL
;开中断 STI
;等待中断 HLT LOP:
JMP LOP
中断服务程序为:
;通道1的GATE1置1,启动计数 MOV AL,01H
OUT 80H,AL
;通道1初始化 MOV AL,67H
OUT 46H,AL
;计数初值高8位,低8位自动清零 MOV AL,20H
OUT 42H,AL
;延时6s CALL DL 6s
;通道1的GATE1置0,停止计数 MOV AL,00H
OUT 80H,AL
;向8259A发中断结束命令 IRET