![]() |
發布時間: 2022-12-6 18:45
正文摘要:單片機12c5a60s2 晶振22.1184 定時器10毫秒 串口波特率9600 不使用串口定時器正常 10毫秒很準確顯示時間正常 使用串口10毫秒就不準了  ... |
PSW是一定要進行現場保護的,CY標志位就在PSW里面 因為CJNE全影響CY位 計數這一塊,個人感覺用DJNZ更好,代碼少一點 中斷中如果沒有用到DPTR,就沒有必要對數據指針進行現在保護了 |
帖出來的沒有問題,問題出在未貼出來的串口上。 |
我覺得把Timer中斷優先級設置最高,應該就沒問題了。 |
串口與定時器0無關的啊,怎么會影響? 你的程序有嚴重問題,先后賦值同一個寄存器TMOD,前面的操作就無效了。你應該用與/或操作共用的寄存器。 |
不能直接操作TMOD,有些控制位在一個寄存器,C語言的時候要用&和|操作 |
InitTimer0: MOV TMOD,#01H //0000 0001 InitUART: MOV TMOD,#20H //0010 0000 你仔細看看,這2個TMOD的配置 如果你是同時使用的話,也就是說, 你在使用定時器1做串口的時候,吧定時器0給關了。 如果你想同時實現,應該吧TMOD合起來 : 0010 0001 = 》 0x21 同時,增加 優先級 IP寄存器的設置 |
你的串口初始化重新設置了T0的工作模式為0,當然定時就不對了 |
Hephaestus 發表于 2022-12-6 23:02 不知道怎么改 我是用單片機小精靈生成的定時器和串口波特率 復制過來就用了 |
不應該啊,T0優先級最高,你是不是改了IP寄存器了? |