-
一、实验目的
1、熟悉基于proteus的8086仿真过程。
2、熟练掌握附件中8086+8253+虚拟示波器电路的工作原理,硬件连接及程序流程。 -
二、实验任务
读懂示例程序,在此基础上实现给定频率的方波输出功能。设方波的输出频率为X赫兹,则X的计算方式为:X= A3+ A2+ A1 +A0,其中,A3 A2 A1A0为你本人学号的后四位。
任务A:利用8253的计数器0生成频率为X的方波
本任务仅使用8253A的计数器0,GATE0始终打开, CLK0接10KHz的时钟脉冲(修改电路图中的晶体振荡器实现),OUT0接虚拟示波器观测输出波形(示例程序中,OUT0连接至虚拟示波器的B通道),并截图。
任务B:利用8253的计数器0和计数器1级联生成频率为X的方波
本任务使用8253A的计数器0和计数器1,GATE0和GATE1始终打开,CLK0接2MHz的时钟脉冲(修改电路图中的晶体振荡器实现),OUT1输出X赫兹的方波,把OUT0和OUT1接虚拟示波器观测输出波形(示例程序中,OUT0连接至虚拟示波器的B通道,OUT1连接A通道),并截图。
-
三、思考题
- 示例程序中,8253的各输出口的工作模式和连接关系?给出例程中8253的0号计数器和1号计数器的工作方式,分频原理。
任务A:输出口为OUT0,对应0计数器的工作方式为3方式,方波输出;偶计数初值,如果GATE高电平,OUT在前半个时钟周期输出高电平,后半个时钟周期输出低电平;奇计数初值,如果GATE高电平,前(N+1)/2时钟周期输出高电平,后(N-1)/2时钟周期输出低电平
任务B:OUT0作为计数器1的时钟信号输入,存在计数器0到1的分频转换,计数器1收到的频率为f1=f0/TC0,fout1=f1/TC1,得到目标频率,通过TC0*TC1实现分频。
2、原理图中,U11的功能是什么?代码中如何实现该功能?
当U11被选中时,通过输出Q0的值来完成对计数器0和计数器1的GATE信号的控制
计数器1门控信号打开:
mov dx,io3
mov al,01h
out dx,al
门口信号关闭:
mov dx,io3
mov al,00h
out dx,al
-
四、实验过程及结果
任务A:
X=1+1+6+7=15HZ
TC=10k/15=668
668=29CH
即送入计数初值29CH
连线图:
示波器结果:
B分度值20ms,一个方波周期约等于3.2个方格,20ms*3.3=660ms
1/15=0.0666s=66.7ms
实验设定正确
任务B:
设定频率2Mhz
连线图:
OUT1频率周期验证:
分度值为10ms,是黄色波形的周期大约为6.8格,即68ms,这与上述的1/15Hz = 66.667相近
实验正确。
-
五、代码附录
任务A:
io2 = 400h
io3=600h
code segment 'code' ;定义代码段
assume cs:code
start:
mov al,00110100b
mov dx,io2+6
out dx,al
mov ax,29ch
mov dx,io2
out dx,al
mov al,ah
out dx,al ;送入计数初值
mov dx,io3
mov al,01h
out dx,al
mov bx,500H
wait1: mov cx,882
loop $
dec bx
jnz wait1
mov dx,io3
mov al,01h
out dx,al
J1: jmp J1
exit: ret ;利用功能调用返回DOS
code ends ;代码段结束
end start
任务B:
io2 = 400h
io3=600h
code segment 'code' ;定义代码段
assume cs:code
start:
mov al,00110100b
mov dx,io2+6
out dx,al
mov ax,16eh
mov dx,io2
out dx,al
mov al,ah
out dx,al ;送入计数初值16eh
mov al,00110100b
mov dx,io2+6
out dx,al
mov ax,16eh
mov dx,io2+2
out dx,al
mov al,ah
out dx,al ;送入计数初值16eh
mov dx,io3
mov al,01h
out dx,al
mov bx,500H
wait1: mov cx,882
loop $
dec bx
jnz wait1
mov dx,io3
mov al,01h
out dx,al
J1: jmp J1
exit: ret ;利用功能调用返回DOS
code ends ;代码段结束
end start