打印

18f4520如何输出1MHz方波

[复制链接]
1472|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
renyaq|  楼主 | 2021-4-7 22:37 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
下面是我自己写的代码,定时器0只计一个数输出方波仍然在200kHz多
#include <p18cxxx.h>
#include "k18.h"

void Time0Init(void);
void T0_ISR(void);

//void chk_isr(void);
#pragma interrupt chk_isr
void chk_isr(void)
{
if(INTCONbits.TMR0IF==1)
{
T0_ISR();
}

}
#pragma code My_Hiprio_int=0x08
void My_Hiprio_int(void)
{
_asm
GOTO chk_isr
_endasm
}
#pragma code




void main(void)
{
k18_init();/*HL-K18主板初始化*/
TRISD=0X00;//设置D口为输出
INTCONbits.GIE=1;
INTCONbits.PEIE=1;
OSCCON=0x70;
OSCTUNEbits.PLLEN=1;
Time0Init();
while(1){
}
}
void Time0Init(void)
{
INTCONbits.TMR0IE=1;
INTCONbits.TMR0IF=0;
T0CON=0x48;
TMR0L=0xFF;
T0CONbits.TMR0ON=1;
}

void T0_ISR(void)
{
TMR0L=0xFF;
INTCONbits.TMR0IF=0;
}

使用特权

评论回复
沙发
huangchui| | 2021-4-7 22:42 | 只看该作者
计算算过能不能实现吗?

使用特权

评论回复
板凳
renyaq|  楼主 | 2021-4-7 22:44 | 只看该作者
按道理肯定可以实现,时钟是内部振荡器8MHz的,每个计数周期0.125us,除非有什么我没考虑进去,新手还希望能请教

使用特权

评论回复
地板
wenfen| | 2021-4-7 22:46 | 只看该作者
你以为进中断出中断不需要时间?

使用特权

评论回复
5
renyaq|  楼主 | 2021-4-7 22:48 | 只看该作者
已经发现这个问题了,我现在不用中断,采用外接16M晶振HSPLL模式还是达不到1MHz。不知道您有好的办法吗,十分感谢您的回复。
#include <p18cxxx.h>
#include "k18.h"


void main(void)
{
k18_init();/*HL-K18主板初始化*/
TRISD=0X00;//设置D口为输出
INTCONbits.GIE=1;
INTCONbits.PEIE=1;
OSCCON=0x70;
OSCTUNEbits.PLLEN=1;
//Time0Init();
INTCONbits.TMR0IE=1;
INTCONbits.TMR0IF=0;
TMR0L=0xff;
T0CON=0xC8;
while(1){
    if(INTCONbits.TMR0IF==1)
       {
          PORTD=~PORTD;
          TMR0L=0xFF;
          INTCONbits.TMR0IF=0;
        }

}
}

使用特权

评论回复
6
chuxh| | 2021-4-7 22:50 | 只看该作者

while(1)
{
for(i=0;i<0xFFFFFFFE;i++)
{
PORTD ^= (1UL<<0);
__delay_us(1);
}
}
这样试试看

使用特权

评论回复
7
dingy| | 2021-4-7 22:53 | 只看该作者
PIC的指令周期(执行一条指令消耗的时间)是时钟周期的四倍,16M的时钟可以得到4M的指令速度,循环跳转指令也要消耗指令时间,所以,你自己想。

使用特权

评论回复
8
renyaq|  楼主 | 2021-4-7 22:54 | 只看该作者
十分感谢,已经完成了。

使用特权

评论回复
9
pangb| | 2021-4-7 22:56 | 只看该作者
怎么完成的,方便就说说

使用特权

评论回复
10
renyaq|  楼主 | 2021-4-7 22:58 | 只看该作者
我直接设置内部时钟8MHz,然后在循环里取反就行了,您的方法好像差不多。

使用特权

评论回复
11
jiajs| | 2021-4-7 23:00 | 只看该作者
主循环就做这一件事?

使用特权

评论回复
12
wangpe| | 2021-4-7 23:02 | 只看该作者
这个还是直接用PWM口最好,周期、占空比随便定义。如果没有相关接口的话还是用内部中断做好些,直接放1us中断里写一个反制就好,哦,似乎1us速度还不够。

使用特权

评论回复
13
yszong| | 2021-4-7 23:07 | 只看该作者
PIC单片机有一个CLKOUT脚,用4M运行频率时,直接就输出1M的方波了

使用特权

评论回复
14
llljh| | 2021-4-7 23:11 | 只看该作者
这样单片机就干不了其他事了

使用特权

评论回复
15
supernan| | 2021-4-7 23:13 | 只看该作者
所以问题在于你需要单片机干嘛,方波发生器就完了啊

使用特权

评论回复
16
heweibig| | 2021-4-7 23:17 | 只看该作者
把频率设为4M,然后把时钟输出便能!就可以得到1M的波了!

使用特权

评论回复
17
renyaq|  楼主 | 2021-4-7 23:19 | 只看该作者

唉,还是没有什么结果,算了,多谢大家啦

使用特权

评论回复
18
AINZGOWN| | 2021-4-13 11:25 | 只看该作者
把IO设置成PWM模式呢,直接输出1Mhz的PWM波,占空比还可控。

使用特权

评论回复
19
奔波儿熊| | 2021-4-14 23:51 | 只看该作者
要软件还是硬件实现啊?

使用特权

评论回复
20
skaler1| | 2021-4-15 08:55 | 只看该作者

请大神指导

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

700

主题

10138

帖子

4

粉丝