项目中前辈以前用的是一块PIC12C508(4M内置时钟)在GPIO0管脚产生500KHz的5V方波
当时是用的是DIP-8的12C508
现在客户需要把这个频率提高很多
而且最好不改电路板设计,那就还得接着用这个八条管脚的底座、而且没有外置时钟
查了查microchip现在最快主频的8条腿单片机是PIC12F1822,内置时钟下能达到32MHz
对1822不太熟悉,不知道是不是和以前的12C508一样的接法;
怎么才能让1822达到最高速度,仍旧让RA0输出方波、能做到多少MHz呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一个指令周期就1uS了,
GOTO需要两条指令周期,
总共4条指令周期,
最快也就250KHz,
所以4M内部RC是不可能输出500K。
PIC12F1822就可以实现,
因为它的内部时钟最高可以达到32M,
也就是8M指令速度,最高速度可以达到2M,
16F182x系列还有个参考时钟输出,
设置这个可以输出最高和内部时钟1:1,
比如设置时钟为8M,输出设置为不分频就会有8M输出!
- #include<pic.h>
- // 内部RC振荡器,看门狗关,上电延时开,外部复位关,代码保护关,数据保护关,低电复位关,时钟输出开,时钟内外切换关,时钟监视器关
- __CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_OFF & CLKOUTEN_ON & IESO_OFF & FCMEN_OFF);
- #define OUT RA0
- void mcu_init()
- {
- OSCCON = 0x70; // 内部时钟频率为8M
- CLKRCON = 0xD4; // CLKR脚输出时钟,占空比为50%,CLKRCON=0xD0为8M,CLKRCON=0xD4为500KHz
- ANSELA = 0;
- C1ON = 0;
- TRISA = 0;
- PORTA = 0;
- }
- void main()
- {
- mcu_init();
- while(1) // OUT=500KHz,占空比为25%
- {
- OUT = 1;
- OUT = 0;
- }
- }
复制代码省电点的方案是,设置参考输出不分频,时钟设置为500KHz,- OSCCON = 0x38; // 内部时钟频率为8M
- CLKRCON = 0xD0; // CLKR脚输出时钟,占空比为内部时钟一致,CLKRCON=0xD0为不分频时钟输出500KHz
复制代码一周热门 更多>