打印
[PIC®/AVR®/dsPIC®产品]

请教18f4520如何输出1MHz方波

[复制链接]
1629|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Yogah|  楼主 | 2017-4-5 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
新手请教18f4520定时器如何输出1MHZ方波。下面是我自己写的代码,定时器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;
}
沙发
yklstudent| | 2017-4-5 11:36 | 只看该作者
计算算过能不能实现吗?

使用特权

评论回复
板凳
Yogah|  楼主 | 2017-4-5 14:34 | 只看该作者
yklstudent 发表于 2017-4-5 11:36
计算算过能不能实现吗?

按道理肯定可以实现,时钟是内部振荡器8MHz的,每个计数周期0.125us,除非有什么我没考虑进去,新手还希望能请教

使用特权

评论回复
地板
yklstudent| | 2017-4-5 15:42 | 只看该作者
Yogah 发表于 2017-4-5 14:34
按道理肯定可以实现,时钟是内部振荡器8MHz的,每个计数周期0.125us,除非有什么我没考虑进去,新手还希 ...

你以为进中断出中断不需要时间?

使用特权

评论回复
5
Yogah|  楼主 | 2017-4-5 16:14 | 只看该作者
yklstudent 发表于 2017-4-5 15:42
你以为进中断出中断不需要时间?

已经发现这个问题了,我现在不用中断,采用外接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
yklstudent| | 2017-4-5 18:09 | 只看该作者
while(1)
{
for(i=0;i<0xFFFFFFFE;i++)
{
PORTD ^= (1UL<<0);
__delay_us(1);
}
}
这样试试看

使用特权

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

使用特权

评论回复
8
Yogah|  楼主 | 2017-4-6 16:16 | 只看该作者

十分感谢,已经完成了。

使用特权

评论回复
9
Yogah|  楼主 | 2017-4-6 16:18 | 只看该作者
ocon 发表于 2017-4-6 04:53
PIC的指令周期(执行一条指令消耗的时间)是时钟周期的四倍,16M的时钟可以得到4M的指令速度,循环跳转指令 ...

十分感谢您的提示!

使用特权

评论回复
10
yklstudent| | 2017-4-6 16:19 | 只看该作者
Yogah 发表于 2017-4-6 16:16
十分感谢,已经完成了。

怎么完成的,方便就说说

使用特权

评论回复
11
Yogah|  楼主 | 2017-4-6 16:47 | 只看该作者
yklstudent 发表于 2017-4-6 16:19
怎么完成的,方便就说说

我直接设置内部时钟8MHz,然后在循环里取反就行了,您的方法好像差不多。

使用特权

评论回复
12
Latin_newday| | 2017-4-8 10:09 | 只看该作者
主循环就做这一件事?

使用特权

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

使用特权

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

使用特权

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

本版积分规则

2

主题

9

帖子

0

粉丝