《索奥科技中心》第三次培训.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
索奥科技中心 第三讲 本讲将主要以复习为主,补充讲外部中断 复习普通输入输出端口(I/O口)的使用 写操作:数据方向寄存器 – DDRx 数据寄存器 – PORTx 读操作:端口输入引脚– PINx。 复习数码管的使用 写程序 #include mega16.h #include delay.h flash unsigned char led_7[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void main(void) { char i = 0; DDRA = 0XFF; PORTA = 0X00; DDRB = 0XFF; PORTB = 0XFF; while (1) { PORTA = led_7[i]; PORTB = ~(1 i); delay_ms(500); if(i++== 8) i = 0; }; } 课堂练习 用数码管动态扫描显示( 十分钟): 复习按键 按键原理 按键若不按下,则该端口为高电平,若按下去则该端口变为低电平。单片机可以检测到这种端口的电平的变化,从而做出一些处理。 事实上,按键只是非常简单的普通I/O口的应用,在其最基本的原理里加一些C语言的基本语句就可以实现比较复杂的功能。 课堂练习(五分钟) 不按按键,单数led灯亮, 按下按键,双数led灯亮. 提示:检测按键使用I/O口输入功能,led灯亮使用输出功能,方向寄存器DDRX如何配置? 如何检测按键?if( … ); #include mega16.h void main(void) { DDRA=0XFF; DDRB=0X00; while(1){ if(~PINB.0) PORTA=0 else PORTA=0 } } 原理就是这样,很简单 按键还可以搭配数码管,就是上节课的比较复杂的程序,见实验按键。 为了消除误差,使程序更标准化,我们一般形成固定套路 //判断一次完整的按键 void READ_KEY(void) { if(PIND.2!=1) { delay_ms(20); if(PIND.2!=1) { while(PIND.2!=1); //此处可添加所需功能代码 }} } 其功能是一样的,都是按一次按键加一。 但观察其中的死循环: 按键的实验中,死循环里一直在查询按键,一直在忙 在中断的程序中,死循环里什么都不做,在那空转 仅用到中断0与中断1只需配置两个寄存器 外部中断 外部中断就是由外部原因引起的中断,即外部中断源引起的中断。(此处为按键引起的电平变化) ATMega16有INT0、INT1和INT2是3个外部中断源,分别由芯片外部引脚PD2、PD3、PB2上的电平的变化或状态作为中断触发信号,有了自己固有的端口。 INT0、INT1、INT2的中断触发方式取决于用户程序对MCU控制寄存器MCUCR以及MCU控制与状态寄存器MCUCSR的设定。其中,INT0和INT1支持4种中断触发方式,INT2支持2种。 中断的一般步骤 补充:置位:该位置1 清零:该位清零 1.按键中断(外部中断): 前提:全局中断使能、外部中断使能 按键按下?外部中断标志位置位?主程序中断,执行外部中断服务子程序(进子程序先清外部中断标志位)?返回主程序 2.一般中断: 前提:全局中断使能、所用中断使能 事件发生(中断源提出中断请求)?所用中断标志位置位?主程序中断,执行所用中断服务子程序(进子程序先清所用中断标志位) ?返回主程序 含有中断的程序写法之 主程序结构 1.I/O端口(管脚)初始化: (1)方向(是输入还是输出?) (2)若为输出则初始输出值为多少。 2.中断所在模块的初始化 方法:依次配置该模块的各个寄存器 内容大体包括:设置中断源(设置触发方式)、局部中断使能。 3.全局中断使能 #asm(“sei”) 4. 死循环:循环输出/查询输入,或不含任何内容(只等待中断发生) 我们来写程序 实现以下功能: 用INT1代替INT0实现用外部中断控制数码管实现一样的功能 中断函数的写法 mega16.h中对中断向量号的宏定义 中断函数的写法 interrupt [中断向量号] void 函数名(void) 其中中断向量号查技术文档

文档评论(0)

***** + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档