我用PIC单片机的定时器让RA2输出113K的方波,使用的是内部4M时钟
TMR0是8位的,我现在先给TMR0赋值254 然后等待溢出中断,让RA2取反,可是输出只有21K,怎么回事呀?
刚学,请帮我看一下谢谢了、
#include<pic.h> //包含单片机内部资源预定义
//#include<pic16630.h> //包含 的头文件
__CONFIG(0x0194); //芯片配置字
#define uint unsigned int
#define uchar unsigned char
#define K113 RA2 //
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void init(void)
{
TRISA=0xF8; //1111 1000
OPTION=0x00; //0000 1111
INTCON=0XA0;
TMR0=0xfe;
}
void main() //主程序
{
init();
while(1)
{
RA1=1;
delay(500);
RA1=0;
delay(500);
}
}
void interrupt ISR(void) //中断服务函数只能有一个
{
if(T0IE && T0IF) //判断TMR0中断
{
TMR0=0xfe;
T0IF = 0; //消除TMR0中断标志
K113=!K113;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4M时钟时机器周期是1us。
中断响应的标准延迟是5个机器周期。
编译器非“正版”时可能有插入更多nop周期的问题。
一个方波的周期,要有两次中断响应。21k似乎是每24个机器周期就让波形反转一次。大约这个程序跑在这平台上一直在不断响应中断和中断返回之间折腾。
lz你的平台运行速度太低。在这样的速度下,你要打算获得你要的波形(只能粗略接近),就要关闭一切中断,每3个NOP反转一次你指定的输出端口。
read about "interrupt latency".
一周热门 更多>