串口中断并不进入中断子程序

wjguonet 2006-03-27 09:32:29
我在medwin2.39上调试时,发现我的串口中断我不能控制。程序中串口中断必须先设定时器。并启动定时器。当tf1为1时,不论串口是否有中断标志,程序均先进入定时中断子程序,再进入串口中断子程序。而如果不启动定时器,程序始终不进入串口中断子程序。即使我仅设串口中断为高级中断也不行。烦请解决
...全文
326 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunny2757 2006-04-21
  • 打赏
  • 举报
回复
1.没有看到你将串口中断设置为最高级(SETB PS)
2.mov p1,0f0h?
3.发送部分send中 jnb ti,$ 多余
wjguonet 2006-03-30
  • 打赏
  • 举报
回复
怎么没信了,呵呵
wjguonet 2006-03-28
  • 打赏
  • 举报
回复
;程序实现简单串口连接,程序在medwin2.39中调试
org 0000H
ajmp start
org 0023H ;串行中断入口
ajmp s
;-------------主程序-------------
org 0100h
start:
MOV SP,#60H
mov tmod,#20h ;设置定时器 T1 方式 2
mov pcon,#00h ;使 SMOD 为 0
mov tl1,#0e8h ;波特率为 1200b/s
mov th1,#0e8h
setb ea ;开全局中断
clr et1 ;关 T1 中断
setb es ;开串行中断
setb tr1 ;开 T1 定时
mov scon,#50h ;串行方式 1 ,允许接收
sjmp $

;-------------中断子程序-------------
s: mov c,ri
jc recive;RI 为 1 ,执行接收子程序
sjmp send ;否则,执行发送子程序
recive:mov A,sbuf
clr ri
cjne A,#52h,re ;是否接收到“ R ”
mov A,#59h ;是,发送“ Y ”
mov sbuf,A
sjmp endtr
re: mov @R1,A   ; r1 为接收数据存放地址
inc R1
mov p1,0f0h
sjmp endtr
RET
send:
mov a,@r0 ;发送数据, r0 为存放数据的地址
mov sbuf,a
jnb ti,$
clr ti
inc r0
endtr:reti ;中断返回
end

wjguonet 2006-03-27
  • 打赏
  • 举报
回复
在线等待
flowercity 2006-03-27
  • 打赏
  • 举报
回复
贴代码
我给你调试看看
wjguonet 2006-03-27
  • 打赏
  • 举报
回复
to wanyeye(助人者天助) :
串口中断工作在串口模式2下,好像不用定时器也行触发串口中断。

to flowercity(Love Program,Love Living)
1、依照书上的程序,定时器好像只用来产生波特率的,不会产生复用的情况吧。
2、中断优先设置没有问题,中断控制设置也没有问题。
3、tmod scon没有问题阿
flowercity 2006-03-27
  • 打赏
  • 举报
回复
定时器1是不是复用了?
中断寄存器设置有问题吗?
TMOD、TCON、SCON设置正确吗?
色郎中 2006-03-27
  • 打赏
  • 举报
回复
中断不要定时器么?

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧