怎么用PIC12F1822产生最高频率的5V方波啊?

2020-02-07 09:41发布

项目中前辈以前用的是一块PIC12C508(4M内置时钟)在GPIO0管脚产生500KHz的5V方波
当时是用的是DIP-8的12C508

现在客户需要把这个频率提高很多

而且最好不改电路板设计,那就还得接着用这个八条管脚的底座、而且没有外置时钟

查了查microchip现在最快主频的8条腿单片机是PIC12F1822,内置时钟下能达到32MHz

对1822不太熟悉,不知道是不是和以前的12C508一样的接法;

怎么才能让1822达到最高速度,仍旧让RA0输出方波、能做到多少MHz呢?





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
25条回答
yangzichen
1楼-- · 2020-02-08 06:06
 精彩回答 2  元偷偷看……
nickwolfe
2楼-- · 2020-02-08 09:51
yangzichen 发表于 2012-9-6 20:06
这个真不失为一种好方法,估计也就只有汇编能做到了

问题是它有个跳转命令里面没办法BSF或BCF的啊

所以在满足周期的同时,会有一个周期里面“缺一块”。

一点也不严谨,也就用于蒙骗领导罢了。

俺现在接手这个,看到这样的写法都不敢说出来,只好从提高PIC的主频的角度入手,最好能把它那个.hex直接烧入PIC12F1822

这样有朝一日万一追究起来、这个“算法”要被诟病,那就不是俺的责任了.......

有没有用过1822的弟兄啊?
chengzepeng
3楼-- · 2020-02-08 10:52
本帖最后由 chengzepeng 于 2012-9-6 21:43 编辑
nickwolfe 发表于 2012-9-6 14:13
看了前辈的程序,你们不许乐.......

用BCF GPIO,0和BSF GPIO,0塞满程序空间,最后GOTO 回开头,基本就是50 ...


一个指令周期就1uS了,
GOTO需要两条指令周期,
总共4条指令周期,
最快也就250KHz,
所以4M内部RC是不可能输出500K。

PIC12F1822就可以实现,
因为它的内部时钟最高可以达到32M,
也就是8M指令速度,最高速度可以达到2M,
16F182x系列还有个参考时钟输出,
设置这个可以输出最高和内部时钟1:1,
比如设置时钟为8M,输出设置为不分频就会有8M输出!
  1. #include<pic.h>
  2. // 内部RC振荡器,看门狗关,上电延时开,外部复位关,代码保护关,数据保护关,低电复位关,时钟输出开,时钟内外切换关,时钟监视器关
  3. __CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF & CPD_OFF & BOREN_OFF & CLKOUTEN_ON & IESO_OFF & FCMEN_OFF);

  4. #define OUT RA0

  5. void mcu_init()
  6. {
  7.         OSCCON = 0x70;        // 内部时钟频率为8M
  8.         CLKRCON = 0xD4;        // CLKR脚输出时钟,占空比为50%,CLKRCON=0xD0为8M,CLKRCON=0xD4为500KHz
  9.         ANSELA = 0;
  10.         C1ON   = 0;
  11.         TRISA  = 0;
  12.         PORTA  = 0;       
  13. }



  14. void main()
  15. {
  16.         mcu_init();
  17.         while(1)                // OUT=500KHz,占空比为25%
  18.         {
  19.                 OUT = 1;
  20.                 OUT = 0;
  21.         }
  22. }
复制代码省电点的方案是,设置参考输出不分频,时钟设置为500KHz,
  1.         OSCCON = 0x38;        // 内部时钟频率为8M
  2.         CLKRCON = 0xD0;        // CLKR脚输出时钟,占空比为内部时钟一致,CLKRCON=0xD0为不分频时钟输出500KHz
复制代码
nickwolfe
4楼-- · 2020-02-08 15:05
〉〉16F182x系列还有个参考时钟输出,
〉〉设置这个可以输出最高和内部时钟1:1,
〉〉比如设置时钟为8M,输出设置为不分频就会有8M输出!

12F1822也有参考时钟输出阿

而且1822还有32MHz主频(打开PLL后,8x4=32MHz)

此时输出的参考时钟是8MHz还是32MHz呢?
yangzichen
5楼-- · 2020-02-08 18:48
nickwolfe 发表于 2012-9-6 20:17
问题是它有个跳转命令里面没办法BSF或BCF的啊

所以在满足周期的同时,会有一个周期里面“缺一块”。

客户用了不找你们经理反应吗?
估计真个主函数里面都是bsf和bcf了
nickwolfe
6楼-- · 2020-02-08 22:42
 精彩回答 2  元偷偷看……

一周热门 更多>