为啥要有这个芯片呢,这个芯片能够做些什么呢,我们先举几个例子来说明白8523的作用,如下几张图:
看了上面的几张图和;例子,至少我们可以知道8253芯片与时间有关系,比如:系统基准定时、动态存储器的刷新定时、扬声器音调及磁盘驱动的定时等,为了支持这些功能,硬件上有了8253,软件上有了定时/计数系统。
以下表格中内容仅观理解使用,纯纯的水货【哈哈哈,干活太多容易噎到,就着水喝,知识更容易消化】 我们这里用一个实例将抽象的概念变得具体一些:我们用定时煲饭的例子来说明8253各部件都做了些什么: 演员:人--->CPU ,电饭煲 --->8255芯片 我们用电饭煲煲饭,首先需要明确的是:煲饭还是煲汤,然后给电饭煲进行设置,比如:明天早上想喝一碗入口留香的xxx粥,但是又不想起的太早去做,所以我们想到了定时功能,入睡前(此时是22:00)将食材放入电饭煲中; 站在我们人的角度看:煲粥用时1小时,明天早上6.00起,所以要让电饭煲5点起来工作; 站在电饭煲的角度看:电饭煲需要在7个小时后启动,进行煲粥的工作,(注意:这里不是煲饭) 那电饭煲是不是要记住两件事,一件是7小时后,一件是煲粥,所以数据总线缓冲器记录了时间,7小时换算成秒,每过1秒就减1,直到减到0,ok,通过输出端OUT发送一条启动电饭煲的命令,控制寄存器:记录着煲粥工作这个任务,等电饭煲启动后,告诉电饭煲执行煲粥操作,而不是煲饭。 我们继续说,煲粥,粥也有好几种粥哇(作者专门去了厨房看了一眼电饭煲),比如:腰果松仁粥,这种粥和其他粥比起来要求就是一定要煮的软一些,所以在告诉电饭煲启动的命令中就包含了一些信息,通过这些信息电饭煲就就知道了该怎么工作了(这些信息很重要,比如:用煮腰果的温度煮绿豆,那不都煮成泥了吗,反之,用煮绿豆的温度,煮腰果,那能煮软?) 我们在来说一下上面,红色的部分:这里提到,每过1秒就减1,那么这个1秒怎么知道的呢?这就涉及到了时钟输入端(CLK),如下图,CLK波形,假设红色区域一个周期代表1秒,so,8253就是通过(CLK时钟信号)这么数来确定时间的。 其次,8253中有3个计数器,它们除了名字不一样,其他都一样,我们上面说过8253干活的是计数器,其他得到部件是打辅助的,那么具体让哪个计数器干活呢,所以CPU发送的控制字中除了包含定多长时间还有计数器的选择(也就是说告诉电饭煲要怎么煮粥,大火还是小火) |
上面我们对8253芯片大概做什么,大概怎么去做,简单介绍了一些,其中提到了控制字这个玩意,这个控制字我们可以理解成一个四字词语,短短四个字,字字有含义,需要很多字来说的话用四个字就能完美的表达真意。所以我们在这里的控制字,也是有很多含义,每个数字都代表了一段信息,如:控制器的选择、读写格式、工作方式选择、数值选择;
在说控制字之前,先来说一说8253的引脚及其功能,CPU发送的控制字通过数据总线缓冲器来接收,
引脚说完了,进入该节点的正题吧,如下图所示:
上面涉及到了波形,那么肯定会涉及到周期,提到周期,就和频率有关了,频率的单位是Hz、KHz、MHz、GHz,频率的倒数就是周期,所以:
1Hz = 1s |
1KHz = 1ms(毫秒) |
1MHz =1um(微秒) |
1GHz=1ns(纳秒) |
利用8253的计数器通道2产生频率为10000Hz的方波,设计数时钟脉冲的频率是10000Hz。则其初始化的过程为:
MOV AL 10110110B
//先传递控制字,使用计数器2,所以是10
//其次是先写低位再写高位,所以是11
//提到方波,所以是方式3 011
//最后采用二进制,所以是0
OUT COTR,AL //将控制字写入控制寄存器
MOV AX,1
//因为要求是产生10000Hz的方波,而时钟脉冲正好是10000Hz,所以这里的计数初始值为1
OUT CTN2,AL //先写计数初值低字节
MOV AL,AH
OUT CTR2,AL //再写计数初值高字节
这个高低字节没看懂的话,再看第二个例题
若选择通道0,工作在方式1,计数初值为2350H,按十进制计数,并设计8253端口地址为40H~43H,则其初始化过程为:
MOV AL,33H;控制字:计数器0,先低位后高位,方式1,十进制
OUT 43H,AL;写入控制字到8253的控制寄存器中
MOV AL,50H;
OUT 40H,AL;计数初值低字节
MOV AL,23H;
OUT 40H,AL;计数初值高字节
| 留言与评论(共有 0 条评论) “” |