打印

无法进入TMR0中断

[复制链接]
2517|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
juventus9554|  楼主 | 2021-9-9 23:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PIC16F1503

使用特权

评论回复
沙发
zhanghqi| | 2021-9-9 23:50 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
juventus9554|  楼主 | 2021-9-9 23:55 | 只看该作者
#include<pic.h>
unsigned int a;
unsigned int b;
unsigned int c;
unsigned int d;
unsigned int Touch_Count=0;
void main()
{
OSCCON=0X68; //内部4M晶振
TRISA2=0;   //RA2为输出
TRISA5=1;   //RA5为输入
TRISC1=0;   //RC1为输出
TRISC3=0;   //RC3为输出
TRISC5=0;   //RC5为输出
ANSA2=0;    //RA2为数字I/O
ANSC1=0;    //RC1为数字I/O
ANSC3=0;    //RC3为数字I/O
RC1=1;      //RC1输出高电平
RC5=1;      //RC5输出高电平
RC3=1;      //RC3输出高电平
RA2=1;      //RA2输出高电平
TMR0CS=0;   //使用内部时钟4/4=1M
TMR0IF=0;   //TMR0中断标志位清零
TMR0IE=1;    //TMR0中断开启
PSA=0;        //预分频器分给TMR0模块
PS0=1;        //1;256分频
PS1=1;        //1;256分频
PS2=1;        //1;256分频
TMR0=61;      //TMR0设初始值50mS
GIE=1;        //开启总中断

while(1)
{
;
}
}
void interrupt_TMR0()
{
if(TMR0IF==1)  //判断TMRO是否溢出
{
TMR0IF=0;      //TMRO标志位清零
Touch_Count++; //
TMR0=61;  //TMR0设初始值50mS
if(Touch_Count>20)
{
Touch_Count=0;
RC1=1;
RC5=1;
RC3=1;
RA2=~RA2;
}
}
}请教高手帮我看一下,谢谢!

使用特权

评论回复
地板
kangzj| | 2021-9-9 23:57 | 只看该作者

void interrupt_TMR0()
中断函数名是这样写的???

使用特权

评论回复
5
xxrs| | 2021-9-9 23:58 | 只看该作者
void interrupt_TMR0() 你改成 void interrupt TMR0()试一下?我想问下楼主你有在线调试吗?我在线调试一调试就停止Pickit3显示Target Halted

使用特权

评论回复
6
chenqianqian| | 2021-9-10 08:09 | 只看该作者
配置是不是不对?

使用特权

评论回复
7
juventus9554|  楼主 | 2021-9-11 18:53 | 只看该作者
还是不行

使用特权

评论回复
8
juventus9554|  楼主 | 2021-9-11 19:01 | 只看该作者
我按楼下说的写了也不行,麻烦你告诉我怎么写好么

使用特权

评论回复
9
xxrs| | 2021-9-11 19:11 | 只看该作者
我想问下为什么我调试时一run就Target Halted,不能在线调试了啊,不知怎么解决?

使用特权

评论回复
10
jiajs| | 2021-9-11 19:13 | 只看该作者
不知道,没遇到过这个问题,检测硬件接线吧

使用特权

评论回复
11
yszong| | 2021-9-11 19:16 | 只看该作者
你考虑一下看门狗

使用特权

评论回复
12
chuxh| | 2021-9-11 19:18 | 只看该作者
1503有在线调试功能吗?

使用特权

评论回复
13
dengdc| | 2021-9-11 19:20 | 只看该作者
CONFIG没有配置,然后最好吧中断函数按照楼上的建议写,中断函数放在main函数前

使用特权

评论回复
14
wyjie| | 2021-9-11 19:22 | 只看该作者
楼主啊,你把PEIE放哪去了?

使用特权

评论回复
15
dingy| | 2021-9-11 19:24 | 只看该作者
用的什么编译器?

MPLAB IDE X+XC8的话,最好用MCC生成程序,再自己修改。

使用特权

评论回复
16
supernan| | 2021-9-11 19:26 | 只看该作者

1\  启动定时器,需要先做初始化,例如(PIC16F887):
void Timer_Init0(void)
{        
        OPTION     = 0x03;//这是专门操作Timer0的寄存器,P32, 选1:16分频系数,P77也描述了这个寄存器,重复啦
        INTCON     = 0xe0;//p33,允许RB口的电平变化产生中断!主要是RB6的按键问题!
               
        T0IE = 0;  //1 = 允许 Timer0中断               
        TMR0       = 256-125;//125
        T0IF  = 0; //0=TMR0寄存器未发生溢出,即清除time0的溢出标志位
        
        OSCCON = 0X7c;//p64  //目的是为了把内部的震荡频率校准为8MHz 7E
        OSCTUNE = 0x00;//P68 //这样"秒表"才准! 201301125        
}

2、中断服务函数的语法,lz的写法完全不对!
void interrupt tmr0_tmr1(void)
      {
         }

使用特权

评论回复
17
chuxh| | 2021-9-11 19:29 | 只看该作者

我刚开始学PIC单片机,PEIE不是外设的中断允许位吗?

使用特权

评论回复
18
chuxh| | 2021-9-11 19:30 | 只看该作者

TMR0属于外设?

使用特权

评论回复
19
supernan| | 2021-9-11 19:37 | 只看该作者

你看得很仔细哦,根据数据手册中图7-1,TMR0, INT, IOC这三个不属于PEIE的管辖范围。

使用特权

评论回复
20
renyaq| | 2021-9-11 19:38 | 只看该作者
我们之前使用的K150烧录器里面找不到PIC16F1507这个型号,请问该怎么办?

使用特权

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

本版积分规则

900

主题

12190

帖子

3

粉丝