定时器编程资料

上传人:n**** 文档编号:93220332 上传时间:2019-07-18 格式:PPT 页数:9 大小:120.50KB
返回 下载 相关 举报
定时器编程资料_第1页
第1页 / 共9页
定时器编程资料_第2页
第2页 / 共9页
定时器编程资料_第3页
第3页 / 共9页
定时器编程资料_第4页
第4页 / 共9页
定时器编程资料_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《定时器编程资料》由会员分享,可在线阅读,更多相关《定时器编程资料(9页珍藏版)》请在金锄头文库上搜索。

1、2019/7/18,通用发声程序,2019/7/18,可编程时间间隔定时器8253/8254,计数器0:用于控制系统时钟正常运转,端口地址为40H。 计数器1:用于存储器刷新 ,端口地址为41H。 计数器2:用于控制扬声器发声,端口地址为42H。 公用的控制寄存器:端口地址为43H,2019/7/18,计数器0的工作,系统时钟之所以能连续运转主要依靠定时器的通道1(计数器0)。 系统启动时设定其发出一个频率固定为18.2Hz的信号,这个信号直接送到系统中的“中断控制器”。每一个“Hz”都产生一个硬件中断,一般称这个硬中断为“IRQ0”,对应的中断类型号是08H。 也就是说,当计算机启动后,我们

2、的机器看上去十分平静,但实际上CPU非常忙碌。在定时器的控制下每隔55毫秒就要执行一个08H号中断,这个中断的主要工作就是连续地计数。 在内存“0040H:006CH”处有四个字节的存储空间专门用于保存计数值,CPU每执行一次08H中断,这四字节的计数值就被加1,不难算出这个计数值每增加1091后时间恰好过了1分钟,每增加65454后时间恰好过了1小时。系统内部的时钟之所以能准确走时,靠的就是08H中断和这四字节的计数值。因此我们要想精确的定时,必须依靠时钟计数值才行。,2019/7/18,1、设定控制字:将控制字写入控制寄存器43H ;将计数器0设定为模式3,先写低字节接着写高字节 ,BCD

3、码格式 MOV AL,00110111B OUT 43H,AL 2、设定计数初值:控制计数频率(F(OUT)=F(CLK)/N =1193181.6 /N) ;将计数器0的计数初值设定为65536,则计数频率为18.2Hz(基准时钟) MOV AX ,0 OUT 40H ,AL MOV AL ,AH OUT 40H ,AL,计数器0初始化,2019/7/18,8253/8254定时器作为发声源,计数器2 的G端与61H端口的bit0位相连,将61H端口的bit0位置成1,那么计数器2就被启动,此时将有一组信号从OUT端输出,信号的频率可以用程序控制(设初值);若61H端口bit0位为0,则定时

4、器被关闭,OUT端就会恒定为1。 系统将定时器产生的方波信号同8255的端口B相与来控制扬声器发声,因此当PB1=1时,才能控制扬声器的音调。在系统中8255的B口地址为61H。,图 控制扬声器发声原理图,2019/7/18,1、设定控制字:将控制字写入控制寄存器43H ;将计数器2设定为模式3,先读写低字后读写高字 ,二进制码格式 MOV AL,10110110B ;0b6h称为“幻数“ OUT 43H,AL 2、设定计数初值:控制发声频率(F(OUT)=F(CLK)/N =1193181.6 /N) ;将计数器2的计数初值设定为533H,则声音频率为896Hz(BEEP子程序) MOV A

5、X ,0533H OUT 42H ,AL MOV AL ,AH OUT 42H ,AL,计数器2初始化,2019/7/18,扬声器驱动,与门用在这里相当一个“可控开关”,如果将61H端口的bit0、bit1位都置成1,则相当于既打开了定时器又打开了开关,这时候定时器产生的声音信号就会送到放大器推动喇叭发声;称为 定时器触发方式 若将bit0位置0,则定时器关闭,此时OUT端为1,这时候如果连续改变bit1位的状态,也可以从喇叭中听到声音,这就是位触发方式;若将bit1位置0,则开关关闭,此时即使打开定时器也不能听到声音。 IN AL , 61H ;读状态 MOV AH , AL ;保存原状态,

6、push ax OR AL , 00000011B ;置bit0,bit为1 OUT 61H , AL . MOV AL , AH ;恢复原状态, pop ax OUT 61H , AL,2019/7/18,通用发声程序,soundf proc near push ax push bx push cx push dx push di mov al,0b6h ;初始化计数器2 控制扬声器 out 43h,al mov di,220 ;音频 mov dx,12h mov ax,348ch ;dx:ax=输入频率1.1931817MHz div di ;ax=计数初值 out 42h,al mov

7、al,ah out 42h,al in al,61h,mov ah,al or al, 3 ;打开扬声器 out 61h,al mov bx,1000 ;控制10秒响铃 wait1: mov cx,633 call waitf ;调用延时10ms dec bx jnz wait1 mov al,ah out 61h,al ;恢复原状态 pop di pop dx pop cx pop bx pop ax ret soundf endp,2019/7/18,利用硬件产生延迟的方法,与处理器无关,;-利用端口61h的PB4延时10ms子程序 waitf proc near push ax waitf1: in al,61h and al,10h cmp al,ah je waitf1 mov ah,al loop waitf1 pop ax ret waitf endp 见IBM-PC教材P391,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号