[C语言] 瑞萨单片机 timer不准

[复制链接]
 楼主| lxtiger 发表于 2018-3-22 17:42 | 显示全部楼层 |阅读模式
本帖最后由 lxtiger 于 2018-3-22 17:44 编辑

使用瑞萨单片机R7F0C014B,开启定时器功能,定时器为1ms,控制1s周期开断,但是定时器不准,每隔4个周期会有个脉冲输出,不知道哪里出的问题?
main.c
#include "r_cg_macrodriver.h"
#include "r_cg_cgc.h"
#include "r_cg_port.h"
#include "r_cg_timer.h"
#include "r_cg_wdt.h"
#include "r_cg_userdefine.h"

void R_MAIN_UserInit(void);
uint16_t m=0;

void main(void)
{
    R_MAIN_UserInit();
    while (1U)
    {
     if(m==500)
                {
                m = 0;
                P1.7 = ~P1.7;
                }   
    }
}


timer中断
__interrupt static void r_tau0_channel1_interrupt(void)
{
        m++;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
xyz549040622 发表于 2018-3-22 19:00 来自手机 | 显示全部楼层
奇怪怎么会突变呢?严谨的写法,io的翻转都放到中断中,应该就不会了。因为你中断和主函数都会改变m的值。
Lbsonggz 发表于 2018-3-22 21:33 | 显示全部楼层
m 定义前加volatile ,while (1)中除翻转语句外基本上挪入定时中断中,到500后丢个标志位出来,主程序判断执行。while 和定时中断抢时间片呢,
ayb_ice 发表于 2018-3-23 08:37 | 显示全部楼层
一看这代码就明白了,还是多怀疑自己吧
ayb_ice 发表于 2018-3-23 08:57 | 显示全部楼层
ayb_ice 发表于 2018-3-23 08:37
一看这代码就明白了,还是多怀疑自己吧

char bFlag = 0;

void main(void)
{
        R_MAIN_UserInit();
        while (1U)
        {
                if(bFlag)
                {                        bFlag = 0;
                        P1.7 = ~P1.7;
                }   
        }
}


timer中断
__interrupt static void r_tau0_channel1_interrupt(void)
{
        if (++m >= 500)
                {
                        m = 0;
                        bFlag = 1;
                }
}
 楼主| lxtiger 发表于 2018-3-23 09:00 | 显示全部楼层
xyz549040622 发表于 2018-3-22 19:00
奇怪怎么会突变呢?严谨的写法,io的翻转都放到中断中,应该就不会了。因为你中断和主函数都会改变m的值。 ...

void main(void)
{
    DI();
        R_Systeminit();
        EI();
    while (1U)
    {
     
    }
}

__interrupt static void r_tau0_channel0_interrupt(void)
{
        m++;
        if(m==500)
                {
                m = 0;
                P1.7 = ~P1.7;
                }   
}
 楼主| lxtiger 发表于 2018-3-23 09:05 | 显示全部楼层
ayb_ice 发表于 2018-3-23 08:57
char bFlag = 0;

void main(void)

按照你的方法修改程序还是会有间断。
ayb_ice 发表于 2018-3-23 09:09 | 显示全部楼层
lxtiger 发表于 2018-3-23 09:05
按照你的方法修改程序还是会有间断。

试试
P1.7 = !P1.7;

实际代码还有其它程序吗
 楼主| lxtiger 发表于 2018-3-23 09:15 | 显示全部楼层
ayb_ice 发表于 2018-3-23 09:09
试试
P1.7 = !P1.7;

我自己先看看定时器的配置吧,谢谢~
m564522634 发表于 2018-3-23 10:02 | 显示全部楼层
xyz549040622 发表于 2018-3-22 19:00
奇怪怎么会突变呢?严谨的写法,io的翻转都放到中断中,应该就不会了。因为你中断和主函数都会改变m的值。 ...

应该不是那个问题,我感觉 是有什么周期性的干扰传过来了
m564522634 发表于 2018-3-23 10:03 | 显示全部楼层
你试着在硬件中断里翻转IO口感觉 是其他的问题造成的
小鱼儿1045 发表于 2018-3-23 13:40 | 显示全部楼层
你的是用CS+ 自动生成的程序吧,多看看你的r_cg_timer.h,我怀疑是你的定时器初始化配置有问题,瑞萨的单片机经常用,感觉挺好用的
ashley0077 发表于 2018-4-4 16:42 | 显示全部楼层
断开仿真器,直接运行板子试试
zqx1000 发表于 2018-4-10 07:10 | 显示全部楼层
断开仿真器,直接运行板子试试
sum123456 发表于 2018-4-11 13:49 | 显示全部楼层

实际代码还有其它程序吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:懂得选择;学会放弃;耐得住寂寞;经得起诱惑 邮箱:lxtiger@163.com QQ :858322522

14

主题

255

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部