第五章 8051内部资源的C编程.ppt_第1页
第五章 8051内部资源的C编程.ppt_第2页
第五章 8051内部资源的C编程.ppt_第3页
第五章 8051内部资源的C编程.ppt_第4页
第五章 8051内部资源的C编程.ppt_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

教学基本要求 1 掌握中断应用的C编程方法 2 掌握定时器 计数器应用的C编程方法 3 熟悉串行口应用的C编程方法 教学重点 1 中断应用的C编程 2 定时器 计数器应用的C编程 教学难点 1 在Keil中如何调试各中断程序 第二部分8051内部资源的C编程 一 中断应用的C语言编程 C51编译器支持在C源程序中直接开发中断程序 中断服务程序是通过按规定语法格式定义的一个函数 中断服务程序的函数定义的语法格式如下 返回值函数名 参数 模式 重入 interruptm usingn nterruptm其中m是中断号 0到31 中断号告诉编译器中断程序的入口地址 中断号对应着IE寄存器中的使能位 下表给出了对应关系 在进入中断服务程序前的程序中使用一组工作寄存器 进入中断服务程序后 由 usingn 切换到另一组寄存器 中断返回后又恢复到原寄存器组 这样互相切换的两组寄存器中的内容彼此都没有被破坏 为中断程序指定工作寄存器组的缺点是 所有被中断调用的过程都必须使用同一个寄存器组 否则参数传递会发生错误 中断不允许用于外部函数 它对函数目标代码影响如下 当调用函数时 SFR中的ACC B DPH DPL和PSW入栈 如果不使用寄存器组切换 则甚至中断函数所需要的所有工作寄存器都入栈 函数退出前 所有的寄存器内容出栈 函数由8051的指令RETI终止 例 如图所示是利用优先权解码芯片 在单片机8031的一个外部中断INT1上扩展多个中断源的原理电路图 图中是以开关闭合来模拟中断请求信号 当有任一中断源产生中断请求 能给8031的INT1引脚送一个有效中断信号 由P1的低3位可得对应中断源的中断号 多个中断源的处理 在中断服务程序中仅设置标志 并保存I O口输入状态 C51编译器提供定义特定80C51系列成员的寄存器头文件 80C51头文件为reg51 h C51程序如下 includeunsignedcharstatus bitflag voidservice int1 interrupt2using2 INT1中断服务程序 用第2组工作寄存器 flag 1 设置标志 status p1 存输入口状态 voidmain void IP 0 x04 置INT1为高优先级中断 IE 0 x84 INT1开中断 CPU开中断 for if flag 有中断 switch status 根据中断源分支 case0 break 处理IN0 case1 break 处理IN1 case2 break 处理IN2 case3 break 处理IN3 default flag 0 处理完成清标志 例1 在XTAL频率是12MHZ的标准8051器件上 用TIME1 定时器 计数器1 产生10KHz定时器滴答中断 分析 采用TIME1的工作模式2 则 TMOD 20H 机器周期 12 fosc T 1 10KHZ 100 s 256 次数 1 s 100 sTH1 TL1 256 100采用中断方式 EA 1 ET1 1 二 定时器 计数器应用的C语言编程 includestaticunsignedlongoverflowcount 0 voidtime1 void interrupt3 overflowcount 溢出计数器加1 voidmain void TMOD TMOD 例2 设单片机的fosc 12MHz晶振 要求在P1 0脚上输出周期为2ms的方波 分析 周期为2ms的方波要求定时时间隔1ms 每次时间到P1 0取反 机器周期 12 fosc 1 s需计数次数 1000 12 fosc 1000 1 1000由于计数器是加1计数 为得到1000个计数之后的定时器溢出 必须给定时器置初值为65536 216 1000 1 用定时器0的方式1编程 采用查询方式 程序如下 includesbitP1 0 P1 0 voidmain void TMOD 0 x01 设置定时器1为控制方式1 TR0 1 启动T C0 for TH0 65536 1000 256 装载计数器初值 TL0 65536 1000 256 do while TF0 查询等待TF0置位 P1 0 P1 0 定时时间到P1 0反相 TF0 0 软件清TF0 2 用定时器0的方式1编程 采用中断方式 程序如下 includesbitP1 0 P1 0 voidtime void interrupt1using1 P1 0 P1 0 P1 0取反 TH0 65536 1000 256 重新装载计数初值 TL0 65536 1000 256 voidmain void TMOD 0 x01 T C0工作在定时器非门控制方式1 P1 0 0 TH0 65536 1000 256 预置计数初值 TL0 65536 1000 256 EA 1 CPU中断开放 ET0 1 T C0中断开放 TR0 1 启动T C0开始定时 do while 1 等待中断 例3 采用10MHz晶振 在P1 0脚上输出周期为2 5s 占空比20 的脉冲信号 分析 10MHz晶振 使用定时器最大定时几十毫秒 取10ms定时 周期2 5s需250次中断 占空比20 高电平应为50次中断 10ms定时 晶振fosc 10MHz 需定时器计数次数 10 103 10 12 8333给定时器置初值为65536 216 8333 include defineucharunsignedcharucharperiod 250 ucharhigh 50 timer0 interrupt1using1 T C0中断服务程序 TH0 65536 8333 256 重置计数值 TL0 65536 8333 256 if time high P1 0 高电平时间到变低 elseif time period 周期时间到变高 time 0 P1 1 main TMOD 0 x01 定时器0方式1 TH0 65536 8333 256 TL0 65536 8333 256 EA 1 开CPU中断 ET0 1 开T C0中断 TR0 1 启动T C0 do while 1 三 串行口应用的C语言编程 例 单片机串行口发送程序 每发送一串字符 MCS 51 后 延时一段时间重复发送 include defineucharunsignedchar defineuintunsignedintucharidatatrdata 10 M C S 5 1 0 x0d 0 x0a 0 x00 main uchari uintj TMOD 0 x20 TL1 0 xfd TH1 TL1 SCON 0 xd8 PCON 0 x00 TR1 1 while 1 i 0 while trdata i 0 x00 SBUF trdata i while TI 0 TI 0 i for j 0 j 12500 j

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论