虽然写这个博客主要目的是为了给我自己做一个思路记忆录,但是如果你恰好点了进来,那么先对你说一声欢迎。我并不是什么大触,只是一个菜菜的学生,如果您发现了什么错误或者您对于某些地方有更好的意见,非常欢迎您的斧正!
第1节——定时器和计数器的概念
计数/Counter:统计某对象的数量(典型的计数对象是脉冲)
定时/Timer:定时的本质是计数。当计数对象出现的“时间间隔”固定且已知,则
定时时间=计数数量×时间间隔
第2节——8253A的结构和工作原理
8253A的结构和基本特点
①有3个16位相互独立的计数器:T0, T1, T2
②每个计数器都可以按照二进制或二—十进制计数
③每个计数器可设置6种不同的工作方式
④每个计数器可以预置计数初值(时间常数)
⑤计数器的当前计数值可被CPU读出
8053A的外部引脚【24脚,+5V】
功能引脚(面向CPU的信号线) | 功能引脚(面向I/0的信号线) |
①数据总线D0~D7 三态输出/输入线:数据、命令和状态 | ⑥时钟信号CLK 计数的对象:每输入1个脉冲便计数1次。 CLK 0、CLK 1、CLK 2 |
②片选线(CS) 低电平有效。由地址译码的结果控制 | ⑦门控信号GATE 控制计数的启动、暂停、禁止 具体功能和工作方式有关 GATE0、GATE1、GATE2 |
③ 读信号(RD) 低电平有效。对8253A寄存器进行读操作 | ⑧计数器输出OUT 输出特定波形标识定时或计数完毕或计数过程 OUT0、OUT1、OUT2 |
④写信号(WR) 低电平有效。对8253A寄存器进行写操作 |
|
⑤地址线A1A0 接到系统地址总线的A1A0 A1A0用于选择8253A内部寄存器。 |
|
●8253A内部有6个模块
①3个独立的计数器 结构完全相同,完成计数过程 ②数据总线缓冲器 与CPU数据总线D0~D7相连 写入命令字 写入计数初值 读出计数初值或当前值 ③控制命令寄存器 接收控制命令,选择计数器及设定工作方式 ④读写逻辑 根据CPU读/写信号和地址信号选择数据传输方向和端口 |
计数器工作原理 |
通过控制命令结合GATE,以某种特定方式对CLK脉冲进行计数并在OUT端输出相应波形。 |
●计数初值C的确定
计数初值C决定了计数的次数或定时的长度
①单纯的计数:直接设定
②作为定时用,把时间L转成相应的计数C
假设时钟周期为TCLK (或频率fCLK)
C = L / TCLK = L * fCLK
例: 定时 5ms , 时钟1.19318MHz,
则 C = L * fCLK = 5*10-3 * 1.19318 * 106 = 5965
●8253A的端口选择和操作
端口选择:4个端口:T0,T1,T2,控制端口
CS 片选 | RD 读操作 | WD 写操作 | A1 地址线 | A0 地址线 | 选中的对象 | 操作 |
0 | 1 | 0 | 0 | 0 | T0 | 写入“计数初值” |
0 | 1 | 0 | 0 | 1 | T1 | 写入“计数初值” |
0 | 1 | 0 | 1 | 0 | T2 | 写入“计数初值” |
0 | 1 | 0 | 1 | 1 | 控制寄存器 | 写“工作方式控制字” |
0 | 0 | 1 | 0 | 0 | T0 | 读“当前计数值” |
0 | 0 | 1 | 0 | 1 | T1 | 读“当前计数值” |
0 | 0 | 1 | 1 | 0 | T2 | 读“当前计数值” |
0 | 0 | 1 | 1 | 1 | 三态 |
|
1 | × | × | × | × | 三态 |
|
0 | 1 | 1 | × | × | 三态 |
|
第3节——8253A的初始化和基本操作
●控制端口:工作方式控制字(选择计数器并设定工作方式)
①选择计数器:T0,T1或T2
②确定读写数据方式(8位或16位,字节位置和顺序)
③确定计数器的工作方式(方式0~5)
④确定计数的机制(二进制码或BCD码)
●T0或T1或T2端口:设定计数初值
写入计数初值:向选定的计数器写入计数初值
工作方式控制字(CW)
①选择计数器:T0,T1或T2
②确定读写数据方式(8位或16位,字节位置和顺序)
③确定计数器的工作方式(方式0~5)
④确定计数的机制(二进制码或BCD码)
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
SC1 | SC0 | RW1 | RW0 | M2 | M1 | M0 | BCD |
计数器选择 | 读写数据方式 | 工作方式 | 码制 | ||||
0 0 :T0 0 1 :T1 1 0 :T2 1 1 :不用 | 00:不用(锁存) 0 1 :低8位 1 0 :高8位 1 1 :先低后高 | 0 0 0 :方式0 0 0 1 :方式1 X 1 0 :方式2 X 1 1 :方式3 1 0 0 :方式4 1 0 1 :方式5 | 0 :二进制 1 :BCD |
●课堂作业1
工作方式控制字 芯片地址304(即304~307且控制端口307)
例: T1 ,方式0,二进制,计数初值BYTEH:BYTEL。
MOV DX, 307H ; 命令口,把16位数据307H送到DX寄存器
MOV AL, 01110000B ;工作方式控制字,把控制字0111000B送到AL寄存器
OUT DX, AL ;把AL中的控制字写入命令寄存器
MOV DX, 305H ; T1数据口,把305H送到DX寄存器
MOV AL, BYTEL ;计数初值低字节
OUT DX, AL
MOV AL, BYTEH ;计数初值高字节
OUT DX, AL
●8253A的基本操作:
①获取当前计数值:直接读取或锁存命令
②获得工作状态:获得状态字
③通过向控制端口写特定的字完成
●锁存命令:
●课堂作业2
锁存命令 芯片地址304(即304~307且控制端口307)
例:读出T2当前计数值(16位),并装入AX寄存器。
MOV DX, 307H ;命令口
MOV AL, 10000000B ;T2的锁存命令
OUT DX, AL ;写入命令寄存器
MOV DX, 306H ;T2数据口
IN AL, DX ;读T2的当前计数值的低8位
MOV BL , AL
IN AL, DX ;读T2的当前计数值的高8位
MOV AH, AL
MOV AL , BL
第4节——8253A的工作方式和应用
●工作方式:方式0~方式5
●工作方式的主要差异:
①OUT信号或波形
②计数的启动方式(软件启动、硬件启动(GATE))
③初值(/重新)装入的生效方式
●方式0:计数结束中断方式
基本特点:典型的事件计数用法
①写入工作方式控制字(CW, Control Word)
OUT开始变成高电平
②写计数初值C到初值寄存器
下一个CLK周期把C装入减1计数器。
GATE高电平时立即开始计数。
③计数期间OUT维持低电平。
④当减1计数器减到0时OUT变为高电平。
⑤当重新写入C后,立即开始新一轮计数
OUT再次变成低电平
计数期间,如果重写计数写计数值,立即重新开始计数。
⑥GATE:高电平:允许/继续计数 ;低电平:禁止计数
⑦OUT可作中断请求信号【特点:被响应后才变低】
例子:计数初值C=4
●方式1
同方式0很类似
①写入控制字CW后,OUT变高电平。
②写入计数初值C
③GATE上跳时,C装入减1计数器,开始计数,OUT变低。
④整个计数过程中OUT维持低电平,直到计数结束才变高。
OUT负脉冲宽度 = 计数初值 * CLK周期。
⑤如果计数过程中GATE出现上跳,则重新计数。
⑥计数过程中如果重写初值,则要等当前计数结束且GATE再次出现上升沿后,才能开始新的计数
●方式1的应用场合:
改变计数初值C可产生不同宽度的低电平,获取可变宽脉冲信号
实现脉宽调制
●方式2:周期性负脉冲输出,分频器
若计数初值为N,则OUT输出的频率为CLK的1/N。又称N分频器。
①写入控制字CW,OUT变成高电平。
②写入计数初值C。
③若GATE为高电平时,下一个CLK周期把C写入减1计数器,并开始计数。
④计数过程中OUT保持高电平,直到倒数第2个CLK。
⑤减一计数到1时,OUT输出1个负脉冲( 宽度为1个CLK周期)
⑥自动装入C, OUT再次变成高电平,开始新一轮计数。
注意:
方式2中启动动计数器的方法有两种
软件启动过程:装入计数初值
硬件启动过程:GATE上升沿
●方式2的应用场合:
OUT正脉冲宽度 =(计数初值 - 1)x CLK周期
OUT负脉冲宽度 = 1个CLK周期。
●方式3:周期性方波输出
①与方式2基本相同:自动装入计数初值C,循环计数
②不同之处:OUT输出占空比为1:1或近似1:1的方波
C为偶数时,OUT的高、低电平前后各一半。
C为奇数时:
前(N+1) / 2个CLK:OUT高电平
后(N -1) / 2个CLK:OUT低电平。
●特点:
①减1计数器每次计数减2。
②OUT输出方波信号
③计数器有软件启动和有硬件启动两种方式。
●方式4:单次负脉冲输出
计数过程和特点
由软件启动计数:写入计数初值C触发计数器开始工作:
①设定方式后,OUT为高电平;
②写入C后,在下一个CLK开始计数
③计数期间OUT保持高电平
④计数结束输出1个CLK的负脉冲,然后OUT恢复高电平。
⑤GATE作用
高电平:允许计数;
低电平:停止(不是暂停)计数
恢复高电平:重新开始新一轮的计数。
⑥重写新的计数初值
不影响当前计数过程,直到下一轮计数时才生效
●方式5:单次负脉冲输出
同方式4类似,单次负脉冲输出,硬件触发
GATE上升沿触发计数开始
①写入C后,不立即计数,而要由GATE上升沿启动计数。
②计数过程中OUT维持高电平
③计数到0后,OUT输出1个CLK的负脉冲后恢复高电平。
④在计数过程中,如GATE出现上升沿,立即开始新一轮计数
●6种工作方式的总结
●差异
①计数过程和计数结束时OUT电平的高低和持续时间(波形)
②单次计数或自动循环计数
③计数的启动方式:软件(写计数初值)或硬件(GATE)
●方式0和方式 1
①输出波形类似
②无自动重装C的能力
③启动计数的触发信号不一样
方式0:软件(写初值)
方式1:硬件(GATE上沿)
●方式2 (N分频器)和方式3 (方波发生器)
①计数初值自动重装,循环计数
②OUT频率:CLK的N分之一;
③方式2:计数时高电平,结束时1个CLK负脉冲
④方式3:前一半为高,后一半为低
●方式4 (单次负脉冲)和5方式(单次负脉冲)
①输出波形相同:单次负脉冲
②无自动重装能力
③启动计数方式不同:方式4:软件,方式5:硬件
●方式2 (N分频)和方式4与5
①方式2:周期性负脉冲
②方式4与5:单次负脉冲
所有有疑问的人,可以推荐一个老师给你们:
搜索“慕课”,然后去主页搜索“苏曙光”,这个老师真的真的优秀!讲课从不拖泥带水,精简干练,而且条理清晰,层次分明,超级严谨的!(我不是夸张,你可以当做我是个脑残粉)他目前还没有开设“微机原理”这门课,但是他开了一门《操作原理系统》。你点进去就可以加入学习了,然后去讨论区里去问他!!!