当前位置: 首页 > news >正文

网站推广的定义及方法网站安全维护

网站推广的定义及方法,网站安全维护,网站开发工具蜡笔小新,黄江镇做网站5.1 定时器与计数器简介 定时器是一种通过对内部时钟脉冲计数来测量时间间隔的模块。它的核心是一个递增或递减的寄存器#xff08;计数器值#xff09;。如果系统时钟为 1 MHz#xff0c;定时器每 1 μs 计数一次。 计数器是一种对外部事件#xff08;如脉冲信号#xff…5.1 定时器与计数器简介 定时器是一种通过对内部时钟脉冲计数来测量时间间隔的模块。它的核心是一个递增或递减的寄存器计数器值。如果系统时钟为 1 MHz定时器每 1 μs 计数一次。 计数器是一种对外部事件如脉冲信号进行计数的模块而不是基于固定时钟。外部引脚每收到一个脉冲如按键按下或传感器触发计数值加 1 或减 1。 LPC1100系列Cortex-M0微控制器有2个32位和2个16位可编程定时器/计数器都有捕获和匹配输出的功能。 捕获捕获功能用于记录外部信号变化时定时器的当前值常用于测量信号的频率、脉宽或相位差。当外部信号如引脚电平变化触发捕获事件时定时器的当前值会被自动保存到捕获寄存器。 匹配输出定时器的一种功能当定时器的计数值达到预设的匹配值Match Value时自动触发特定动作如翻转引脚电平、产生中断等。用户预先设置一个匹配值当定时器计数值等于该值时硬件会自动执行操作无需 CPU 干预。 5.2 定时器工作流程 对于定时器先设置预分频计数器的计数上限预分频计数器每计满一次定时器就加一定时器达到匹配就可触发相应事件。 设置 PR 分频值的值如 PR 99PC 从 0 开始计数。每来一个输入时钟脉冲PC 加 1。当 PC PR 时PC 清零并输出一个脉冲给定时器的主计数器。每接收到一个来自预分频器的脉冲定时器的主计数器TC加 1。 5.3 定时器/计数器寄存器          有四种定时器 TMR32B0、TMR32B1、TMR16B0 TMR16B1 功能类似就计的总数32位、16位的区别 5.3.1 定时器中断寄存器 TMR32/16BnIR 包含4个匹配中断和一个捕获中断标志位有中断相应位置位变成1没中断变0写1可以清零中断写零无效。 位对应名0 MR0中断 中断标志1MR1中断2MR2中断3MR3中断4 CAP0中断 31:5保留 5.3.2 定时器控制寄存器 TMR32/16BnTCR 位功能0 1使能0禁能 1         写1定时器/计数器和分频在PCLK下一个上升沿复位         复位状态直到该位重新写0才会改变 312保留 5.3.3 定时器/计数器当前计数值 TMR32/16BnTC 预分频计数器计数到上限时TC计数值加一TC到上限没复位则32位会计数到0xFFFFFFFF然后翻转到0x00000000没中断啥的一些情况然后继续去计数了。 5.3.4 预分频寄存器 TMR32/16BnPR 指定预分频计数器的最大计数值 PR为0每1个PCLK48MHz时钟一个周期TC计数加一 PR为1每2个PCLKTC计数加一 5.3.5 预分频计数器 TMR32/16BnPC 对输入时钟脉冲进行计数的计数值不用理会 5.3.6 匹配控制寄存器 TMR32/16BnMCR 位功能 1 产生对应效果 0 无该特性 0 MR0匹配时产生中断1MR0匹配时复位TC2MR0匹配时TC和PC计数都停止 TCR[0]置0定时器禁能了3MR1匹配时产生中断4MR1匹配时复位TC5MR1匹配时TC和PC计数都停止 TCR[0]置0定时器禁能了6MR2匹配时产生中断7MR2匹配时复位TC8MR2匹配时TC和PC计数都停止 TCR[0]置0定时器禁能了9MR3匹配时产生中断10MR3匹配时复位TC11MR3匹配时TC和PC计数都停止 TCR[0]置0定时器禁能了3112保留 5.3.7 匹配寄存器 TMR32/16BnMR0/1/2/3 自动与TC值相比较的相等触发对应效果不用理会 5.3.8 捕获寄存器 TMR32/16BnCCR 位功能 1 产生对应效果 0 无该特性 0 CAP0上升沿捕获使TC内容装入CR01CAP0下降沿捕获使TC内容装入CR02CAP0事件导致的装载产生中断313保留 5.3.9 捕获寄存器 TMR32/16BnCR0 引脚发生特定事件时存储TC内容只读 5.3.10 外部匹配寄存器 TMR32/16BnEMR 位功能0 EM0外部匹配0输出MAT0的状态 即TC与MR0匹配时的输出 1EM1外部匹配1输出MAT1的状态2EM2外部匹配0输出MAT2的状态3EM3外部匹配0输出MAT3的状态54 EMC0 00 无操作 01 输出低电平0 10 输出高电平1 11 输出电平翻转 76EMC1  以下同EMC098EMC21011EMC31512保留 5.3.11 计数控制寄存器 TMR32/16BnCTCR 用于定时器与计数器模式之间的选择 位值描述1000定时器模式TC在PCLK上升沿计数01计数器模式TC在选择的CAP输入的上升沿递增10计数器模式TC在选择的CAP输入的下降沿递增11计数器模式TC在选择的CAP输入的双边沿递增3200CAP0引脚其他保留貌似条件有限没有其他CAP引脚所以上边选择也是就选择CAP0314保留 5.3.12 PWM控制寄存器 TMR32/16BnPWMC 用于将匹配的输出设置为PWM输出 大致可整两个匹配分别控制占空比和周期 一个匹配寄存器调占空比出现匹配时PWM输出置为高电平匹配前是低电平 一个匹配作为PWM周期匹配时复位高电平清零 具体小细节见书P136页。 位功能0 1 MAT0的PWM模式使能 0 MAT0受EM0控制 1 1 MAT1的PWM模式使能 0 MAT1受EM1控制 2 1 MAT2的PWM模式使能 0 MAT2受EM2控制 3 1 MAT3的PWM模式使能 0 MAT3受EM3控制 324保留 5.4 呼吸灯 目标 1利用16位定时器1实现定时1s控制LPC1114微控制器的GPIO引脚PIO1_9状态反转可以用中断方式也可以用匹配输出功能此时LED灯Blinky闪烁频率为0.5Hz 2设置16位定时器1工作在PWM模式PIO1_9设置为PWM输出引脚利用另外一个定时器定时(例如32位定时器0设置每隔0.01s或者更小)增大或者减小16位定时器1输出PWM的占空比占空比改变的步长与32位定时器0的定时时间相配合确定呼吸频率实现PIO1_9上的LED灯渐亮渐灭的呼吸灯效果。 思路 主要是两部分内容第一部分直接SysTick也能实现但是使用定时器就是要熟悉一下定时器怎么用第二部分就是定时器的PWM占空比不断升高降低这个是使用两个定时器一个定时器实现翻转另一个定时器实现改变第一个定时器的占空比按时间依次增加或者减小即可。 这两部分内容可以直接使用按键切换相当于两种模式即闪烁模式和PWM呼吸灯模式将上章写的Button中断改一下就行了 Button.c #include Button.h #include TIMER.h int flag1 0, flag2 0; // 判断botton 和 wakeup 按键上一次状态//延时ms函数 // 太粗糙了而且要根据机器指令与时钟周期关系调整也就防抖延时用一下 __inline void delay_ms(uint32_t a) //约1ms延时函数 { uint32_t i;while( a -- ! 0){for(i 0; i5500; i);} }void WAKEUP_Init(void) {LPC_SYSCON - SYSAHBCLKCTRL | (1UL 6) | (1UL 16); // 使能GPIO时钟和IO时钟// PIO1_4LPC_IOCON-PIO1_4 ~(0x1F); // 清除之前的配置LPC_IOCON-PIO1_4 | 0x00; // 配置为GPIO功能LPC_GPIO1-DIR ~(1UL 4);// 设置GPIO方向为输入LPC_GPIO1-IS ~(0x1 4); // 清除第 4 位设置为边沿触发LPC_GPIO1-IBE ~(0x1 4); // 清除第 4 位设置为单边沿触发LPC_GPIO1-IEV ~(0x1 4); // 清除第 4 位设置为低电平触发LPC_GPIO1 - IE | (0x14); // 使能端口中断LPC_IOCON-PIO1_4 | (1UL 5); // 使能滞后模式LPC_GPIO1-IC | (1UL 4); // 清除中断标志位NVIC_EnableIRQ(EINT1_IRQn); // 使能GPIO1中断 }void Button_Init(void) {LPC_SYSCON - SYSAHBCLKCTRL | (1UL 6) | (1UL 16); // 使能GPIO时钟和IO时钟// PIO3_5LPC_IOCON-PIO3_5 ~(0x1F); // 清除之前的配置LPC_IOCON-PIO3_5 | 0x00; // 配置为GPIO功能LPC_GPIO3-DIR ~(1UL 5);// 设置GPIO方向为输入LPC_GPIO3-IS ~(0x1 5); // 清除第 5 位设置为边沿触发LPC_GPIO3-IBE ~(0x1 5); // 清除第 5 位设置为单边沿触发LPC_GPIO3-IEV ~(0x1 5); // 清除第 5 位设置为低电平触发LPC_GPIO3 - IE | (0x15); // 使能端口中断LPC_IOCON-PIO3_5 | (1UL 5); // 使能滞后模式LPC_GPIO3-IC | (1UL 5); //清除中断标志NVIC_EnableIRQ(EINT3_IRQn); }// GPIO3_5的中断服务函数处理BUTTON按键按下事件 void PIOINT3_IRQHandler(void) {if((LPC_GPIO3-MIS (1UL 5)) (1UL 5))// 检查是否是PIO3_5的中断{ delay_ms(20); // 消抖while((LPC_GPIO3-DATA (1UL 5)) 0);delay_ms(20);LPC_TMR16B1-PWMC ^ 1; //PWM状态翻转if(LPC_TMR16B1-PWMC 0x01) // 如果要进PWM 模式{NVIC_EnableIRQ(TIMER_32_0_IRQn);//使能32位定时器中断TMR16B1_PWM_Mode(); }else // 如果要进闪烁灯模式{NVIC_DisableIRQ(TIMER_32_0_IRQn);//禁32位定时器中断TMR16B1_Blinky_Mode();}LPC_GPIO3-IC | (1UL 5); // 清除中断标志} } // GPIO1_4的中断服务函数处理WAKEUP按键按下事件 void PIOINT1_IRQHandler(void) {if((LPC_GPIO1-MIS (1UL 4)) (1UL 4)) // 检查是否是PIO1_4的中断{delay_ms(20);while((LPC_GPIO1-DATA (1UL 4)) 0);delay_ms(20);LPC_GPIO1-IC | (1UL 4); // 清除中断标志} }TIMER.c #include TIMER.hint flag 1; // 递增递减标志 1递增 -1递减void TMR32B0_Init(void)//32位定时器0初始化 设置中断时间 MR0/SystemCoreClock *(PR 1) 0.01s {LPC_SYSCON-SYSAHBCLKCTRL | (1UL 9);//使能32位定时器0的时钟LPC_TMR32B0-IR 0x1F;//清除所有中断标志位LPC_TMR32B0-PR 0;//设置分频系数LPC_TMR32B0-MCR 3;//设置MR0匹配后复位TC并产生中断LPC_TMR32B0-MR0 SystemCoreClock / 100 ; // 计数值LPC_TMR32B0-TCR 0x01;//启动定时器NVIC_DisableIRQ(TIMER_32_0_IRQn);//开中断 }void TMR16B1_Init(void) {LPC_SYSCON-SYSAHBCLKCTRL | (1UL 8) | (1UL 16); // 16位定时器1时钟使能 | IO配置块时钟使能LPC_IOCON-PIO1_9 | 0x01; // MAT0匹配IO1_9 }void TMR16B1_PWM_Mode(void)// PWM呼吸灯模式 1s 占空比0 - 1 or 1 - 0 {LPC_TMR16B1-TCR 0x02;//定时器复位LPC_TMR16B1-PR 99; // 分频系数LPC_TMR16B1-PWMC 0x01;//设置MAT0为PWM输出LPC_TMR16B1-MCR 0x02 9; //设置MR3匹配后复位TCLPC_TMR16B1-MR3 SystemCoreClock / 10000; // PWM周期设置为0.01s设置中断时间LPC_TMR16B1-MR0 LPC_TMR16B1-MR3 / 100;//MAT0初始化输出亮度1%LPC_TMR16B1-TCR 0x01; // 启动定时器 }// 匹配输出翻转 void TMR16B1_Blinky_Mode(void) // 闪烁灯模式 1s翻转一次 { LPC_TMR16B1-TCR 0x02;//定时器复位LPC_TMR16B1-PR 999; // 分频系数LPC_TMR16B1-MCR 2; // 设置MR0匹配后复位TC不产生中断LPC_TMR16B1-MR0 SystemCoreClock / 1000; // 定时1sLPC_TMR16B1-PWMC 0x00;//设置MAT0不为PWM输出LPC_TMR16B1-EMR | (3UL 4);// MAT0外部匹配翻转LPC_TMR16B1-TCR 0x01; //定时器启动 }void TIMER32_0_IRQHandler(void)//32位定时器0中断子程序 {static int duty 0;if(LPC_TMR32B0-IR 0x01)//判断是否MR0中断{LPC_TMR32B0-IR 0x01; // 清除第一中断标志位duty 1 * flag; // 更新占空比if(duty 100) {flag -flag; // 递减 渐灭duty 100; // 防止越界}if(duty 0) {flag -flag; // 递增 渐亮duty 1; // 防止越界}LPC_TMR16B1-MR0 (uint32_t)(LPC_TMR16B1-MR3 * duty /100); // 设置占空比} }TIMER.h #ifndef _TIMER_H_ #define _TIMER_H_#include LPC11xx.hvoid TMR32B0_Init(void); void TMR16B1_Init(void); void TMR16B1_PWM_Mode(void); void TMR16B1_Blinky_Mode(void);#endifmain.c #include LPC11xx.h #include LED.h #include Button.h #include TIMER.hint main(void) {Button_Init(); // Button初始化TMR16B1_Init(); //初始化16位B1定时器TMR32B0_Init(); // 初始化32位B0定时器TMR16B1_Blinky_Mode(); // 初始闪烁灯模式while (1){} }实验效果就是烧录后按下复位键Blinky开始闪烁按下Button是PWM之后再按就会在两种模式之间切换。
http://www.hkea.cn/news/14337514/

相关文章:

  • 视频网站中滑动列表怎么做的百川网站维护
  • 网站的不足之处网页制作教程答案
  • 快速建立平台网站开发网站模板设计vs简单的网站开发
  • wordpress多站点 主题制作网站 公司简介
  • 实验室网站制作ai绘画软件免费
  • 新塘做网站手机自助建站永久免费
  • 南充网站建设工作室成都锦江建设局网站
  • 怀远县建设局门户网站wordpress 归档
  • 网站建设佰首选金手指三腕表手表网站
  • 罗定网站建设淄博网站建设培训
  • 北京网站建设出名 乐云践新设计师网站外网
  • pc网站开发我的个人主页怎么制作
  • 织梦修改网站标题万网域名注册查询
  • 昆山住房城乡建设局网站查询企业信息服务平台官网
  • 做seo网站的公司哪家好怎么搭建自己的电影网站
  • 昆山网站建设首页网站建设知名
  • 做网站需要向客户了解什么字体设计艺术字
  • 天津先进网站建设指导网站建设案例基本流程
  • 网站稳定性枣庄网站建设电话
  • 专业型企业网站有哪些设计店面装修
  • 罗庄建设局网站广东网站建设公司报价表
  • 济南住宅与房地产信息网官方网站门户网站开发流程
  • 陕西专业网站建设哪家好口碑好的广州做网站
  • 南宁大型网站建设广告公司排名
  • 上海做网站哪家公司好网页制作居中代码
  • 南通建设网站公司沈阳做企业网站
  • 做视频的网站带模板广州免费公司注册
  • 网站备案需要具备什么条件北京商场营业时间
  • 电子商务网站建设读书笔记没网站可以做seo吗
  • 台州网站建设咨询wordpress获取当前页地址