赞
踩
2022年4月21日更新
首先在这里跟各位网友们说声对不起,真的不好意思鸽了各位网友们那么久,PWM的实验是有完成的,但是那段时间在忙比赛也就没有更新,后面比赛忙完了人也开摆了哈哈,我想把PWM 的例程给放上来,你们跟着前面的定时器的基础,应该是能理解这份代码的(不是我不想更一篇,主要是已经挺久没搞合泰,已经忘了七七八八了,如果周末有时间的话,我会写一份的,就算给这个系列一个完结吧),后面会更新其他类型的博客,欢迎广大网友们关注!!!
链接:https://pan.baidu.com/s/1–h0iN11xW7FB8QRbl43ug
提取码:1111
–来自百度网盘超级会员V1的分享
这一篇记录的是我在定时器这一部分的理解,用的芯片是HT66F2390,开发工具是HT-3000及开发手册。预计实现的功能为精准定时1秒闪烁一次LED灯。为下一篇的PWM打一下基础。有错误的地方欢迎指正。首先什么是定时器呢?按照我个人的理解,单片机的定时器不是也叫计数器吗?所以单片机每隔一定的时间间隔就计数一次,等计数到我们设定的目标值时候,单片机的执行中断,执行我们设定的程序,比如最简单的点灯程序。(单片机都是从零开始计数,直到我们设定的那个初值)
提示:以下是本篇文章正文内容,下面案例可供参考
void time2_Init(void) //定时器2初始化
{
_stm2c0=0; //计数频率为8MHz/4=2MHz 即计数一次为0.5us
_stm2c1=0b11000001; //定时器2功能选择寄存器,选择为定时/计数器模式
_stm2al=0x20; //初值为20000,计数时间为10ms
_stm2ah=0x4e;
_stm2ae=1; //STM2 比较器 A 匹配中断控制位使能
_st2on=1; //开启定时器
_mf4e=1; //多功能中断使能
_emi=1; //开启总中断
}
我们先来一句一句的分析代码,第一和第二条语句涉及到定时器部分两个最重要的寄存器。
_emi=0; //关闭总中断
time2_count++;
if(time2_count==100)
{
time2_count=0;
LED1=!LED1; //LED1状态取反
}
_stm2af=0; //清除定时器中断标志位
_emi=1; //开启总中断
time2_count这个变量我一开始在程序的开头定义了,并在头文件那里声明用extern声明为全局变量。进入一次中断time2_count就+1,10ms进入一次,到100就是1秒,然后再清零,LED1再取反。
主函数没有什么东西,就是一些函数的初始化,和关闭看门狗而已
#include "HT66F2390.h" #include "delay.h" #include "uart.h" #include "LED.h" #include "time.h" void main() { int t=0; //用于计时 LED_Init(); //LED初始化 time2_Init(); //定时器2初始化 _wdtc=0b10101011; //关闭看门狗 while(1) { delay_ms(10); t++; if(t==100) { t=0; LED2=!LED2; //系统状态指示灯 } } }
下一篇是 PWM输出,程序文件私信问我拿就可以了。不直接上传了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。