还是PIC12F1572,某个io 输出脉冲信号。io置高,置低都是立即数给寄存器,电平竟然要16us才变化。用的内部时钟,根据手册,时钟频率可到32M。大概计算,io置高置低,执行时间应该在0.4us左右。再怎么延迟也不会16us。后来看到手册写的最小指令周期125ns。可能是时钟的配置没有到最大。 程序中只有CONFIG1,CONFIG2寄存器的配置。// CONFIG19 ~8 H; k4 I6 ^- o! X5 Q" V q# D
#pragma config FOSC = INTOSC // (INTOSC oscillator; I/O function on CLKIN pin)% f$ E1 b) X. q) Q
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT enabled)# o+ C# l3 w. G: d0 m
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)* F/ R* G5 U% F
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)% A( G9 f8 |) l ~1 A: `" d d
#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)$ t R. S: n& ^" F9 r5 X! J+ X) ?
! q1 D, I5 D+ a$ U% `% a: M% a
都是位操作。 把时钟频率配置位的操作加上,编译出错。 不习惯开发环境,go to definition 也go不了。干脆就看手册,把寄存器的名字复制过来。在main函数里赋值。配成最高频率。编译一下,竟然通过了。 下载运行。波形变窄啦。实际波形,高低电平跳变大概500ns。比较接近理论值了。