3楼的大佬已经完美的给了你解决方案了。 那段代码简直就是教程级别的解决方案。 无论是从资源占用,还是内存占用来讲,都是最简洁高效的。 |
一个定时器定时2.5微妙,连续工作,另一个定时器设定50MS,50ms到,关定时器,输出并计数2.5微妙脉冲,输出十个,停止输出,启动50MS定时器。。。。。。。。。 |
asmmcu 发表于 2021-1-6 08:55 有图说明的,就是每隔50ms发出10个连续占空比50%脉宽为2.5us脉冲 |
各位大侠有图 |
robinsonlin 发表于 2021-1-6 11:44 STC 1T单片机执行1个 _nop_() 用时3个时钟。与定时器采用12T模式没有任何关联。 |
自己整整!很好做出来!方法总比困难多!![]() |
wulin 发表于 2021-1-6 08:02 定时器用12T模式,进入定时器中断后, 一个 罗普 实际是多久啊? 有没有人实际测量过。 这里是继承用12T模式,还是用默认的1T模式? |
对于STC的单片机,如果你设2.5uS的定时器,你的单片机就几乎全部在执行中断了。 一般没有其他用途,就设10mS的定时器,在定时器中加累加标志,在第五次定时器中断时,清零累加标记,并用软件延迟来控制翻转端口输出。12Mh主频来算,4个_nop_(); 差不多占用1uS时长。 |
用stc15w408as单片机输出每隔50ms输出10个脉宽2.5us 你的问题不完整 每隔50ms,10个脉冲,脉宽2.5US,表达清淅。 问题是10个脉冲是不是平均分布在50ms 内?因为你没表达脉冲的周期以及是否连续的。 |
给你一个示例
|
第一步 设定一个2.5us的定时器 第二步 设定一个16位变量。定时器里面让变量增加。如果小于20000 则不输出脉冲。 如果变量大于20000并且小于20020。那么让IO口翻转。然后把变量清0,开始下一个周期。 20000*2.5us=50ms |
很简单啊 第一步 设置一个定时器 定时时间2.5us 第二步 用一个变量,如果变量小于20000则不输出。大于等于20001小于20020则IO口翻转。 20000*2.5us=50ms 《人人学会单片机》视频教程在原子哥网站全部投放。马上去看看吧。 |