至于8253的各个端口地址,那要看电路连接图,或者题目给出一个8253的基地址,根据这个基地址(即为通道0的地址)来判断其他三个端口地址。
输出信号周期为1秒,频率为1Hz,则计数初值=1MHz/1Hz=1M=10^6.所以需要用两个通道级联,使两个通道的计数初值的乘积为10^6.可以选取通道0和通道1(随意,反正两个通道级联即可)
把1MHz输入8253的CLK0,OUT0计入CLK1,GATE0和GATE1接+5V。写入0号通道初值1000,1号通道计数初值1000,则OUT1即为每秒一次的信号了
一个通道若使用双字节,是16位计数器,最大计数值N =2^16 =65536
若输入CLK脉冲频率为2MHz, 脉冲周期Tin =1/2MHz =2μS
则一个通道最大定时时间Tmax =65536x2μS =131072μS =131.072mS
.
若要输出周期1秒的连续方波,因所需计数值超出一个通道最大计数值65536,
采用通道级联来实现(如图):
通道0工作方式2,用作自动重装计数初值的分频器;
通道1工作方式3,用作自动重装计数初值的方波发生器。
级联计数初值N1.N2 = 1S/2μS =500000d
设定通道0的计数初值N1 =1000d =3E8h
设定通道1的计数初值N2 =500d =1F4h
.
级联工作过程:
①GATE0及GATE1长接+5V(高电平),
通道0及通道写入计数初值,即开始递减计数,OUT0及OUT1输出高电平;
②每个脉冲输入至CLK0, 通道0的计数值递减1;
当通道0每次计数完毕(计数值递减至0),OUT0向CLK1输出一个脉冲宽度低电平,
使通道1的计数值递减1,通道0自动重装初值开始另一轮计数;
③当通道1的计数值递减到N2/2 =250d,即总计数值递减至25000d,
OUT1输出电平自动翻转,进入方波的下半周期;
④当通道1计数值递减至0,亦自动重装初值,
开始另一轮计数的上半周期,OUT1重新输出高电平。
.
初始化程序:
MOV DX, 203h 8253控制口地址
MOV AL, 00110100b 通道0,方式2,写16位初值,二进制数
OUT DX, AL 通道0的方式字写入控制口
MOV DX,200h 通道0初值寄存器地址
MOV AX,3E8h 通道0计数初值
OUT DX,AL 初值低8位写入通道0
MOV AL, AH
OUT DX, AL 初值高8位写入通道0
MOV DX, 203H 8253控制口地址
MOV AL, 01110110b 通道1,方式3,写16位初值,二进制数
OUT DX, AL 通道1的方式字写入控制口
MOV AX,1F4h 通道1计数初值
OUT DX,AL 初值低8位写入通道1
MOV AL, AH
OUT DX, AL 初值高8位写入通道1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)