CAN节点应用程序设计详解.ppt

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CAN节点应用程序设计详解.ppt

第5章 CAN节点应用程序设计 本章导读 应用程序(eg.MCU = P89V51) CAN收发器 eg.CTM8251 CAN控制器 eg.SJA1000 CAN硬件驱动 CAN应用层 协议驱动 功能电路 Eg.LED/KEY 功能电路 驱动 CAN节点结构 第2章 第3章 第4章 本章 本章以前面开发的CAN应用层协议驱动程序为基础,通过一个CAN节点应用程序设计的实例,来展示应用层协议在CAN节点上的具体应用。 功能电路驱动 蜂鸣器 驱动电路 按键 输入电路 LED灯 显示电路 蜂鸣器驱动 按键驱动 LED驱动 蜂鸣器驱动 目的:驱动蜂鸣器发出声音。 无源蜂鸣器:如何发声? 方法:使无源蜂鸣器不断振荡发出声音。 发声时间 由发声频率决定 T 定时时间 定时时间到,电平取反 取反次数 = 发声时间×发声频率 程序实现 程序实现:通过MCU的定 时器中断来控制振荡频率。 蜂鸣器驱动程序 四个函数来实现: void buzzerInit(void) { …… } void buzzerQuiet(void) { …… } void ISR_Timer1(void) interrupt TF1_VECTOR { …… } void buzzerSound(unsigned int uiFreq,unsigned int uiTime) { …… } // 控制蜂鸣器不发声 // Timer中断服务函数 // Buzzer初始化 // 发出指定频率的声音 蜂鸣器驱动程序 四个函数来实现: void buzzerQuiet(void) { …… } void ISR_Timer1(void) interrupt TF1_VECTOR { …… } void buzzerInit(void) { …… } void buzzerSound(unsigned int uiFreq,unsigned int uiTime) { …… } // 控制蜂鸣器不发声 // Timer中断服务函数 // Buzzer初始化 // 发出指定频率的声音 void buzzerInit(void) { BuzzCnt = 0; TR1 = 0; // 关闭定时器1 TF1 = 0; // 清除定时器1中断标志 TMOD = ~T0_MASK; // 清除旧设置(#define T0_MASK 0x0F) TMOD |= 0x01; // 设置新模式:16位定时模式 BUZZ = 1; // 置高蜂鸣器控制引脚为高电平 ET1 = 1; // 使能定时器中断1 EA = 1; // 设置中断允许 } // Buzzer初始化 蜂鸣器驱动程序 四个函数来实现: void buzzerQuiet(void) { TR1 = 0; // 关闭定时器1 TF1 = 0; // 清除定时器中断标志 BUZZ = 1; // 置高蜂鸣器的控制引脚电平 } // 控制蜂鸣器不发声 蜂鸣器驱动程序 四个函数来实现: void ISR_Timer1(void) interrupt TF1_VECTOR { if(BuzzCnt) { // 允许蜂鸣器发声 TR1 = 0; // 关闭定时器1 TL1 = TL1_Load; // 设置定时器的计数值低8位 TH1 = TH1_Load; // 设置定时器的计数值高8位 TR1 = 1; // 启动定时器 BUZZ = !BUZZ; // 蜂鸣器控制电平取反 BuzzCnt--; /

文档评论(0)

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

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

1亿VIP精品文档

相关文档