PIC单片机编程,程序运行总是出错,可能是程序跑飞了,求大虾指点迷津。还想加个定时器,

PIC单片机编程,程序运行总是出错,可能是程序跑飞了,求大虾指点迷津。还想加个定时器,,第1张

不是跑飞的问题,其实是选择语句上的问题,回答者: 碱杯已经看出来了,他只是没指明掉

if(CGQ==0)

{

delay(100);

if(!CGQ); //注意这个分号,这里的意思是CGQ=0时候,空 *** 作次,继续执行后面的

{

alarm_silencer(); //该指令不管CGQ为何值,都会被执行

}

}

delay(1000);

}

另外,CGQ值对alarm_silencer();影响的逻辑关系有点乱,所以我没看alarm_silencer();,但发现了以下问题,希望对你有帮助

1中断服务不用判断,或加延迟判断,已经下降沿触发了,进入中断的时候INTF就已经是0了;

2延迟

void delay(uint x) //#define uint unsigned int定义过,最大可以到65355,原来的int知道32677

{

uint y;

for(x;x>0;x--) //注意这里是没有分号的,加分号时间上就错了

for(y=10000;y>0;y--);

}

一般PIC定时器都工作于同步模式,同步模式时单片机系统时钟和输入时钟是一致的。而定时器1异步模式一般用于休眠模式下唤醒单片机使用,这种模式在休眠模式下定时器继续运行,不需要经过同步检测,也就是说单片机系统时钟和输入时钟是不一致的,单片机系统可能不运行,但是定时器1通过异步模式可以运行来唤醒单片机。

一般情况下都是同步模式,只有休眠的时候设置成异步

你这那是后分频6啊,T2CON = 0X55,就是01010101,就是后分频为(1:11),打开定时器2,预分频为(1:4)

也就是说16M的时钟频率在输入到T2之前是16M/4=4M,1/4M=025微秒(即025微秒为一个指令周期)。而预分频是1:4,则定时器2在0254=1微秒的时间内自增一次TMR2。

则每90微秒内TMR2和PR2比较的结果相同并溢出一次。

再加上是后分频为11,则9011 = 990微秒 = 099毫秒。约等于1毫秒。

看清楚T2CON的位定义描述。

//__CONFIG(HS&WDTDIS&LVPDIS);//对熔丝位进行设置

这句改成:

//__CONFIG(INTOSCIO&WDTDIS&LVPDIS);//对熔丝位进行设置

在TRISA = 0x00这句之上插入

ANSELA=0x00;关闭PA口模拟功能

ADCON0= 0x00;关闭AD功能

ADCON1=0X03;

OSCCON=0x1C;选择4MHZ震荡

以上就是关于PIC单片机编程,程序运行总是出错,可能是程序跑飞了,求大虾指点迷津。还想加个定时器,全部的内容,包括:PIC单片机编程,程序运行总是出错,可能是程序跑飞了,求大虾指点迷津。还想加个定时器,、什么是pic单片机定时器1同步模式、pic用作PWM输出时定时器如何计算等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9352259.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存