PIC16f74 PWM最大频率20K我要用来发射红外载波为38K,怎么破....

2020-02-06 10:35发布

本帖最后由 zcan 于 2014-4-25 14:19 编辑

PIC16f74  PWM最大频率20K伙要用来发射红外载波为38K,怎么破.... :红外发射载波38K翻转IO状态最大也达不到 用定时器最快也只有16K多 ,估计跳到中断执行中断服务程序耗时严重 跑空程序直接空转IO翻转才能达到50K左右 别人写的程序可以 有什么方法论这种问题  刚用PIC做项目



代码如下: 晶体4M
#include <pic.h>
__CONFIG(0xFF32);
#define uchar unsigned char
#define uint  unsigned int

#define        LED        PORTD
char Counter = 0;                // 1S计数变量清零
/********定时器0初始化函数********/
void timer0_init()
{
        OPTION_REG=0b00001000;        //TMR0对内部时钟计数,预分频器给WDT,分频比为1:1
        INTCON=0b10100000;        //允许TMR0溢出中断
        TMR0=243;                        //TMR0赋初值,4M/4/13=76.923 K       
}
/********主函数********/
void main(void)
{       
        TRISD=0x00;                        //设PORTD为输出
        timer0_init();
        LED=0x00;                                       
          while(1);                        //原地等待
}
/********中断服务程序********/
void interrupt ISR(void)
{   
        if (T0IF==1)
        {       
                T0IF=0;                                //清TMR0溢出中断标志位
                TMR0=243;                        //TMR0赋初值,必须!

                RD7=~RD7;   //电平反转 76.923/2=38.461K
                           //但是示波器显示为16K !!怎么破
       
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
25条回答
zcan
1楼-- · 2020-02-09 01:58
wmm20031015 发表于 2014-4-28 10:16
你觉得呢?
PIC出入栈需要多少个指令?4M的时钟已经不够折腾了,

那没办法了 别人做的程序可以哇 也是4M  
xuanfong1
2楼-- · 2020-02-09 07:35
路过路过 顺便看看
wmm20031015
3楼-- · 2020-02-09 08:56
 精彩回答 2  元偷偷看……
Freeghost
4楼-- · 2020-02-09 13:16
我是使用硬件PWM 做的。  看了一下你的程序。 如果你把TMR0的初始值增大。 现在的问题你使用的是C语言。不知道你的中断中到底使用了多少指令?  反正一条指令1US 可以计算出时间。
kcfoo1
5楼-- · 2020-02-09 14:26
zcan 发表于 2014-4-28 09:51
PWM可以 但是我的脚不可以输出PWM 只能用定时器了 另外问下 我的程序有问题吗 ...

ls的意思是要你改下tmr0的赋值,好像pic的时钟是向下计数的,243太大了,4000/76.8=52左右
mon51
6楼-- · 2020-02-09 19:38
不要用PWM,用定时器。

一周热门 更多>