找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1316|回复: 9
收起左侧

单片机使用串口影响定时器 是什么原因?

[复制链接]
ID:261025 发表于 2022-12-6 18:45 | 显示全部楼层 |阅读模式
单片机12c5a60s2  晶振22.1184    定时器10毫秒   串口波特率9600  不使用串口定时器正常  10毫秒很准确显示时间正常    使用串口10毫秒就不准了  时间跑的飞起
定时器里多加了一个计数 对着秒表调试才调出基本准确的一秒  (图片中蓝色选中的部分是多加的计数  到#100的位置是1秒左右 )
怎么设置才能不影响定时器

单片机源程序如下:
InitTimer0:                                 ;  22.1184  10MS  
    MOV TMOD,#01H
    MOV TH0,#0B8H
    MOV TL0,#00H
   ; SETB EA
    SETB ET0
   ; SETB TR0
    RET        
InitUART:                                 ;22.1184   9600
    MOV TMOD,#20H
    MOV SCON,#50H
    MOV TH1,#0FAH
    MOV TL1,TH1
    MOV PCON,#00H
    SETB EA
    SETB ES
    SETB TR1
    RET
51hei截图20221206180234.jpg
回复

使用道具 举报

ID:883242 发表于 2022-12-6 23:02 | 显示全部楼层
不应该啊,T0优先级最高,你是不是改了IP寄存器了?
回复

使用道具 举报

ID:261025 发表于 2022-12-6 23:18 | 显示全部楼层
Hephaestus 发表于 2022-12-6 23:02
不应该啊,T0优先级最高,你是不是改了IP寄存器了?

不知道怎么改  我是用单片机小精灵生成的定时器和串口波特率  复制过来就用了
回复

使用道具 举报

ID:884147 发表于 2022-12-7 08:44 | 显示全部楼层
你的串口初始化重新设置了T0的工作模式为0,当然定时就不对了
回复

使用道具 举报

ID:308903 发表于 2022-12-7 08:49 | 显示全部楼层
InitTimer0:
MOV TMOD,#01H     //0000 0001
InitUART:
MOV TMOD,#20H     //0010 0000

你仔细看看,这2个TMOD的配置

如果你是同时使用的话,也就是说, 你在使用定时器1做串口的时候,吧定时器0给关了。

如果你想同时实现,应该吧TMOD合起来  : 0010 0001  = 》 0x21

同时,增加 优先级 IP寄存器的设置


回复

使用道具 举报

ID:879348 发表于 2022-12-7 09:07 | 显示全部楼层
不能直接操作TMOD,有些控制位在一个寄存器,C语言的时候要用&和|操作
回复

使用道具 举报

ID:1034262 发表于 2022-12-7 11:15 | 显示全部楼层
串口与定时器0无关的啊,怎么会影响?
你的程序有严重问题,先后赋值同一个寄存器TMOD,前面的操作就无效了。你应该用与/或操作共用的寄存器。
回复

使用道具 举报

ID:77589 发表于 2022-12-7 11:56 | 显示全部楼层
我觉得把Timer中断优先级设置最高,应该就没问题了。
回复

使用道具 举报

ID:123289 发表于 2022-12-7 15:27 | 显示全部楼层
帖出来的没有问题,问题出在未贴出来的串口上。
回复

使用道具 举报

ID:401564 发表于 2022-12-7 16:56 | 显示全部楼层
PSW是一定要进行现场保护的,CY标志位就在PSW里面
因为CJNE全影响CY位
计数这一块,个人感觉用DJNZ更好,代码少一点
中断中如果没有用到DPTR,就没有必要对数据指针进行现在保护了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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