打印

time0中断怎么输出不了方波

[复制链接]
2966|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fzh123|  楼主 | 2012-2-12 17:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想用time0中断,输出一个1k的方波,但是输出一直是低,帮忙看看哪儿出问题了。
#include <pic.h>       //调用头文件,可以去PICC软件下去查找PIC16F87XA单片机的头文件
__CONFIG(XT&WDTDIS&LVPDIS);    //定义配置字,晶振类型:XT,关闭开门狗,禁止低电压编程
#define clk RD0     //定义V0为RD0端口
void timer0init(void)
{
T0CS=0;                //TMR0工作于定时器方式
PSA=0;                 //TMR0分频
    PS2=0;
    PS1=0;
    PS0=1;
T0IF=0;                //清除TMR0中断标志
T0IE=1;                //TMR0中断允许
TMR0=0x09;             //赋初值,
GIE=1;
}  
void interrupt  ISR(void)
{
if(TMR0IF==1)         
   {
  TMR0=0x09;
  T0IF=0;
     clk=!clk;         //将clk取反,达到输出方波的目的   
}
}
void main(void)
{
   TRISD=0B00000000;        //RD设置为输出
PORTD=0B00000001;         
timer0init();           
   while(1)
   {   
      
   }
}
沙发
NE5532| | 2012-2-12 19:56 | 只看该作者
拿MPLAB的软仿真看,T0有没有在跑就知道了。

使用特权

评论回复
板凳
Ryanhsiung| | 2012-2-13 17:41 | 只看该作者
调试DEBUG一下!
1、程序可能根本没有启动
2、IO没有初始化对,注意若有模拟端口的,默认都是模拟端
3、T0可能没有设置对!!

使用特权

评论回复
地板
yewuyi| | 2012-2-14 08:49 | 只看该作者
1、确定MCU是否已经启动?
2、确定你的代码可以编译正确通过。
3、 clk=!clk; --》 clk=~clk;
4、检查RD0的定义
5、检查T0的寄存器配置
6、。。。。。。

使用特权

评论回复
5
21icszx| | 2012-2-18 21:21 | 只看该作者
void interrupt  ISR(void)
{
if(TMR0IF==1)         
   {
  TMR0=0x09;
  T0IF=0;
     clk=!clk;         //将clk取反,达到输出方波的目的   
}

使用特权

评论回复
6
fzh123|  楼主 | 2012-2-19 17:47 | 只看该作者
proteus和mplab联调,能出来方波。但是在板子上出不来,不知道为什么,晶振起振了。

使用特权

评论回复
7
NE5532| | 2012-2-19 17:53 | 只看该作者
proteus和mplab联调,能出来方波。但是在板子上出不来,不知道为什么,晶振起振了。
fzh123 发表于 2012-2-19 17:47


如果MPLAB里看到能进中断,那就检查端口设置对不对,是不是输出,模拟功能关闭没有?端口上有没有比较器的第二功能没有关闭?

使用特权

评论回复
8
fzh123|  楼主 | 2012-2-19 20:23 | 只看该作者
7# NE5532
没那么复杂吧,我看很多的例程上面都没有涉及这些啊。PIC单片机只有A口带模拟功能吧。对了,我把程序烧进去后,刚开始上示波器有正确的波形,然后就接了个电阻到地,啥玩意都没了。

使用特权

评论回复
9
NE5532| | 2012-2-19 20:39 | 只看该作者
7# NE5532  
没那么复杂吧,我看很多的例程上面都没有涉及这些啊。PIC单片机只有A口带模拟功能吧。对了,我把程序烧进去后,刚开始上示波器有正确的波形,然后就接了个电阻到地,啥玩意都没了。 ...
fzh123 发表于 2012-2-19 20:23


877已经是老掉牙的芯片了,后续的产品,很多模拟口都增加了或者根本就没有A口,或者不在A口,不能以877的老黄历办事,要吃亏的。

你接了个多大的电阻啊?

使用特权

评论回复
10
fzh123|  楼主 | 2012-2-19 21:21 | 只看该作者
877已经是老掉牙的芯片了,后续的产品,很多模拟口都增加了或者根本就没有A口,或者不在A口,不能以877的老黄历办事,要吃亏的。

你接了个多大的电阻啊? ...
NE5532 发表于 2012-2-19 20:39

330R的,就是正常的,应该不会有啥问题,就是不知道问题出在哪。

使用特权

评论回复
11
NE5532| | 2012-2-19 21:37 | 只看该作者
不算大,但是也不算小,怀疑端口是不是被烧了,你换个端口输出呢?

使用特权

评论回复
12
fzh123|  楼主 | 2012-2-20 08:20 | 只看该作者
11# NE5532
木有啊,换其他程序端口是正常的,但是我看不出来这个程序有啥问题啊。

使用特权

评论回复
13
NE5532| | 2012-2-20 13:00 | 只看该作者
那就是端口问题了三。

使用特权

评论回复
14
yewuyi| | 2012-2-20 14:53 | 只看该作者
对芯片进行烧写时,最好将BOD的配置位打开,否则MCU可能不能正确复位。

使用特权

评论回复
15
fzh123|  楼主 | 2012-2-20 20:51 | 只看该作者
14# yewuyi
用的是picc在线编程的,烧其他程序时,都没啥问题,就是这个,出不来信号。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

335

帖子

1

粉丝