《C语言在测量与控制中的应用》02硬件中断程序设计095.pptVIP

《C语言在测量与控制中的应用》02硬件中断程序设计095.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8259A的命令字 初始化命令字 几个概念 普通全嵌套方式(默认方式):一中断正被处理时,只有更高优先级的事件可以打断当前的中断处理过程而被服务。 特殊全嵌套方式:一中断正被处理时,允许同级或更高优先级的事件可以打断当前的中断处理过程而被服务。 缓冲方式:在多片8259A级联的系统中,8259A通过总线驱动器和数据总线相连,这就是缓冲方式,非缓冲方式:单片8259A或少量8259A级联时,可以将8259A直接与数据总线相连,称为非缓冲方式。 8086微机8259A的初始化 主片: outportb(0x20, 0x11); outportb(0x21, 0x08); outportb(0x21, 0x04); outportb(0x21, 0x01); 从片: outportb(0xa0, 0x11); outportb(0xa1, 0x70); outportb(0xa1, 0x02); outportb(0xa1, 0x01); 操作命令字 几个概念 特殊屏蔽方式,即除了被IMR屏蔽的中断源外,8259A对任何级别的中断请求都能响应,即使对某些比正在处理的中断级别低的中断请求也能响应。特殊屏蔽是在中断处理程序中使用的,用了这种方式之后,尽管系统正在处理高级中断,但对外界来讲,只有同级中断被屏蔽,而允许其它任何级别的中断请求 对8259A A0=1的端口地址执行读操作,可读取IMR状态(随机可读); 对8259A A0=0的端口地址执行读操作,可读取IRR状态或ISR状态(先写OCW3,后读) 通道2 outportb(0x43,0xb6); 通道0的工作方式 通道0初始化为方式3 —方波频率发生器,OUT0端产生方波,方波的频率等于CLK0端输入脉冲频率除以计数初值。 T CLK0输入脉冲频率为 1.193MHz(1193182 Hz) 周期为 1/1.193MHz≈838ns 通道0 作为计数器,每838ns计数值减1,减到0时又自动恢复计数初值。这时OUT0输出的方波完成一个周期,方波的上升沿触发一次中断。 计数初值 方波的频率f2等于输入脉冲频率f1除以计数初值N f2=f1/N 方波的周期T2 =1/f2等于输入脉冲周期T1=1/f1乘以计数初值N T2=T1× N 计数初值N等于方波的周期T2(单位为秒)除以输入脉冲周期T1 N=T2/T1=T2/838ns 更精确的办法:N=T2*1193182; 通道0的初始化 MOV AL,36H OUT 43H,AL MOV AL,0 OUT 40H,AL OUT 40H,AL 控制字36H D7 D6 D5 D4 D3 D2 D1 D0 0 0 1 1 0 1 1 0 选0通道 先写低8位 再写高8位 方式3 二进制计数 0000000000000000 -) 1 1111111111111111 0-1=65535! 0经65536次减1后又减到0 方波完成一个周期,0相当最大的计数初值65536。 通道0的中断周期 通道0的计数初值相当于65536 方波的频率 1.193MHz/65536≈18.2Hz 方波的周期 838ns*65536?55ms 通道0每55ms申请一次中断,每秒18.2次 通道0的中断服务子程序TIMER-INT固化在BIOS中,有三个功能: 1.进行年、月、日、时、分、秒的计时。 2.软盘I/O时,确定软驱电机停止转动的时间。 3.发出一个1CH类软中断,可以调用一个用户程序。 思考题 1.若希望10ms中断一次,计数初值是多少? 2.若CLK0输入脉冲频率为2MHz,采用二进制计数和BCD码计数时最大的中断周期是多少? 3.若CLK0输入脉冲频率为4MHz,希望中断周期为10ms,写出初始化程序。 时钟中断程序举例 利用8254的通道0作为实时时钟定时,每10ms中断一次。编写第8类中断的中断服务程序每中断一次在CRT上显示一个8字。 根据新的中断周期对8254通道0初始化 写中断服务子程序 设置中断向量 计数初值 10ms/838ns?11933=0x2e9d Int(0.010*1193182)=11931=0x2e9b 程序清单 #include dos.h #include stdio.h void interrupt myint8(void); void main(void) { disable(); outportb(0x43,0x36);

文档评论(0)

1243595614 + 关注
实名认证
文档贡献者

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档