文档详情

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

发布:2016-11-03约字共15页下载文档
文本预览下载声明
第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--; /
显示全部
相似文档