#include<pic16f7x.h>
unsigned int i=0,j=0,temp=0,t=0;
void tmint() //TMR0初始化程序,使TMR0工作于定时器方式
{
T0CS = 0; //TMR0时钟源选择,内部指令周期时钟
PSA = 1; //TMR0不分频,分配给WDT
T0IF = 0; //清除TMR0的中断标志
T0IE = 1; //TMR0中断允许
}
main()
{
GIE = 1 ; // 関总中断
PEIE = 0 ; // 関外設中斷
ADCON1 = 0x07 ; // A口全部配置為數字端口
TRISA = 0x00 ; // A端口6路輸出
tmint() ;
while(1)
{
if(t==1)
{
t=0;
temp=~temp;
PORTA = temp;
}
}
}
void interrupt MR0 ()
{
if(T0IF==1)
{
TMR0 = 0X08; //对TMR0写入一个调整值。因为与入TMR0后接着的
//两个周期能增量,中断需要别3个周期的响应时间,
//自动进行现场保护要消耗周期
T0IF = 0;
i=i+1;
if(i==10000)
{
i=0;
t=1;
}
}
}
请问,此方法是否正确,我在用SIM仿真时是PORTA口在680ms跳变一次。我把程序下到硬件里面,去点亮一个发光管,但没有反应。
请高手指点!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
-----------------------------------------------------------------------
我不解你写的程序有以下:
在定时器初始化应该设定TMR0的值吧,还有定时器的启动位呢?PEIE为什么置0?这样能进入中断服务程序里面吗?
设定数字端口不是用ADCON1吧,ANSEL和ANSELH吧。
还有就是你的LED是连在PORTA哪个脚呢?看你的程序应该是RA0,如果是其他的肯定有问题。temp=~temp,只能是1位。
我是按我用的PIC18来分析这个程序的。
希望对你有帮助,不当之处还望之处,相互进步。
---------------------------------------
按理说我的LED接在哪个脚都是可以跳变的啊!我用SIM仿真时,是0x00与0x3f的跳变化啊!
ADCON1配制 (原文件名:ADCON1配制.jpg)
-----------------------------------------
回复 【9楼】 portx 腾飞
........似乎没有看见__CONFIG(XXX);函数,确认下晶振配置位是否正常
---------------------
__CONFIG(XXX);我用软件里面配制的可以吗?
一周热门 更多>