迪文科技论坛

 找回密码
 立即注册
搜索
查看: 411|回复: 7

【提问】定时器和串口通信冲突

[复制链接]

20

主题

56

回帖

409

积分

中级会员

Rank: 3Rank: 3

积分
409
发表于 2022-12-13 14:59:22 | 显示全部楼层 |阅读模式
小白请教
我用官方的串口通信例程通信和时钟都可以了。但是用定时器2做个一个精确延时,用到延时函数的时候,就会影响通信。但是我用定时器0做精确延时,用到延时函数的时候定时器2就不工作了,串口通信和时钟就不工作了。

void Sys_Timer2_isr()        interrupt 5          //1MS
{
                TF2=0;//清除定时器2的中断标志位
                if(TimVal<255)TimVal++;
                            SysTick_RTC++;
               
                if(T_O2>0)T_O2--;
                if(Count_num1>0) Count_num1--;
                if(delay_tick)delay_tick--;
}

这个是定时器2做的一个delay_tick精确延时。用延时函数的时候串口通信就会受到影响。
回复

使用道具 举报

0

主题

1276

回帖

5456

积分

论坛元老

Rank: 8Rank: 8

积分
5456
发表于 2022-12-14 16:01:20 | 显示全部楼层
程序文件方便发上来看一下吗?
回复

使用道具 举报

0

主题

12

回帖

987

积分

高级会员

Rank: 4

积分
987
发表于 2022-12-14 16:02:02 | 显示全部楼层
在每个中断函数里面加上EA =0,EA=1.防止中断嵌套试试。
具体可以参考《T5L ASIC应用开发指南V11.pdf》中断优先级部分
“中断执行时间短,实时性已经非常高,不推荐用户使
用中断嵌套导致程序架构复杂,在每个中断服务程序执行时直接关闭中断(EA=0),退出时再开启中断(EA=1)。”
回复

使用道具 举报

20

主题

56

回帖

409

积分

中级会员

Rank: 3Rank: 3

积分
409
 楼主| 发表于 2022-12-15 08:26:08 | 显示全部楼层
integer_32 发表于 2022-12-14 16:01
程序文件方便发上来看一下吗?

程序就上楼上的程序
void sys_delay_ms(u16 ms)
{
        delay_tick = ms;
        while(delay_tick);
}
就是一个这样的延时函数,用着T2中断里面。但是每次我用延时函数的时候,串口通信和时钟就会冲突。
我又配置了一个t0,做延时,但是用的延时的时候,串口和时钟就不工作了。不知道我t0配置对了吗。
void timer0_init()
{
        //16位定时器工作模式
        TMOD &= 0xFC;
        TMOD |= 0x01;
        //定时周期为1ms
        TH0 = (u8)(T0_PERIOD_1MS>>8);
        TL0 = (u8)T0_PERIOD_1MS;
        ET0 = 1;//使能定时器0中断
        EA = 1;//使能总中断
        TR0 = 1;//启动定时器0
}
void timer0_isr()        interrupt 1
{
     
        TH0 = (u8)(T0_PERIOD_1MS>>8);
        TL0 = (u8)T0_PERIOD_1MS;
       

       
       

}



回复

使用道具 举报

20

主题

56

回帖

409

积分

中级会员

Rank: 3Rank: 3

积分
409
 楼主| 发表于 2022-12-15 08:27:46 | 显示全部楼层
tyrjj112100 发表于 2022-12-14 16:02
在每个中断函数里面加上EA =0,EA=1.防止中断嵌套试试。
具体可以参考《T5L ASIC应用开发指南V11.pdf》中断 ...

t2定时器是一直用来串口通信和时钟刷新的,要是关闭总中断,是不是串口和时钟就会停止一下。
回复

使用道具 举报

0

主题

1276

回帖

5456

积分

论坛元老

Rank: 8Rank: 8

积分
5456
发表于 2022-12-15 09:20:59 | 显示全部楼层
13396360806 发表于 2022-12-15 08:26
程序就上楼上的程序
void sys_delay_ms(u16 ms)
{

设置下Keil的优化等级为0试试
回复

使用道具 举报

20

主题

56

回帖

409

积分

中级会员

Rank: 3Rank: 3

积分
409
 楼主| 发表于 2022-12-15 17:12:30 | 显示全部楼层
好的  我试试  十分感谢
回复

使用道具 举报

20

主题

56

回帖

409

积分

中级会员

Rank: 3Rank: 3

积分
409
 楼主| 发表于 2022-12-15 17:14:57 | 显示全部楼层
integer_32 发表于 2022-12-15 09:20
设置下Keil的优化等级为0试试

好的,十分感谢 我试一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-7-10 10:52 , Processed in 0.027167 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表