搜索

18f4520如何输出1MHz方波

[复制链接]
75|19
 楼主 | 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;
}

使用特权

评论回复
| 2021-4-7 22:42 | 显示全部楼层
计算算过能不能实现吗?

使用特权

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

使用特权

评论回复
| 2021-4-7 22:46 | 显示全部楼层
你以为进中断出中断不需要时间?

使用特权

评论回复
 楼主 | 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;
        }

}
}

使用特权

评论回复
| 2021-4-7 22:50 | 显示全部楼层

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

使用特权

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

使用特权

评论回复
 楼主 | 2021-4-7 22:54 | 显示全部楼层
十分感谢,已经完成了。

使用特权

评论回复
| 2021-4-7 22:56 | 显示全部楼层
怎么完成的,方便就说说

使用特权

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

使用特权

评论回复
| 2021-4-7 23:00 | 显示全部楼层
主循环就做这一件事?

使用特权

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

使用特权

评论回复
| 2021-4-7 23:07 | 显示全部楼层
PIC单片机有一个CLKOUT脚,用4M运行频率时,直接就输出1M的方波了

使用特权

评论回复
| 2021-4-7 23:11 | 显示全部楼层
这样单片机就干不了其他事了

使用特权

评论回复
| 2021-4-7 23:13 | 显示全部楼层
所以问题在于你需要单片机干嘛,方波发生器就完了啊

使用特权

评论回复
| 2021-4-7 23:17 | 显示全部楼层
把频率设为4M,然后把时钟输出便能!就可以得到1M的波了!

使用特权

评论回复
 楼主 | 2021-4-7 23:19 | 显示全部楼层

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

使用特权

评论回复
| 2021-4-13 11:25 | 显示全部楼层
把IO设置成PWM模式呢,直接输出1Mhz的PWM波,占空比还可控。

使用特权

评论回复
| 2021-4-14 23:51 | 显示全部楼层
要软件还是硬件实现啊?

使用特权

评论回复
| 2021-4-15 08:55 | 显示全部楼层
软件仿真.png
请大神指导

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表