打印
[51单片机]

串口中断程序里发送数据是怎么进入中断的?

[复制链接]
4416|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zjyyl|  楼主 | 2018-12-18 09:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2018-12-18 09:34 | 只看该作者
进入中断后再发送一个字节数据,退出中断后当然会再次进入中断

使用特权

评论回复
板凳
zjyyl|  楼主 | 2018-12-18 09:41 | 只看该作者
ayb_ice 发表于 2018-12-18 09:34
进入中断后再发送一个字节数据,退出中断后当然会再次进入中断

SERVE: CLR  TI
           PUSH PSW
          PUSH  A
          MOV  SBUF,@R0
WAIT:JNB TI,WAIT
         CLR  TI
        INC  R0
         DJNZ R4,ERTURN    ;R4为待发送的字节数
OVER:POP A
        POP PSW
       CLR  ES
        RETI
RETURN: POP A
             POP PSW
             RETI

使用特权

评论回复
地板
zjyyl|  楼主 | 2018-12-18 09:44 | 只看该作者
上面是中断发送程序,首先不懂的是,主程序没有mov sbuf 的指令,怎么进入发送中断,进入中断后,中断内部的mov  sbuf产生的TI为1已经被清零,发送一个字节后退出,如何再发送下面的字节?

使用特权

评论回复
5
ayb_ice| | 2018-12-18 10:37 | 只看该作者
zjyyl 发表于 2018-12-18 09:44
上面是中断发送程序,首先不懂的是,主程序没有mov sbuf 的指令,怎么进入发送中断,进入中断后,中断内部 ...

这个代码确实有问题,编译应该可能 有问题

POP A应该是编译不过的,要写成POP ACC

R0,R4什么的都没有初始化,另个不应该清除TI,否则无法再次进入中断

这应该不是正式代码吧,

使用特权

评论回复
6
zjyyl|  楼主 | 2018-12-18 11:04 | 只看该作者
ayb_ice 发表于 2018-12-18 10:37
这个代码确实有问题,编译应该可能 有问题

POP A应该是编译不过的,要写成POP ACC

这是一本参考书的程序,介绍多机通讯的,POP A没有问题,我经常这么用。R0R4无关紧要。我就是不知道怎么进入中断。

使用特权

评论回复
7
ayb_ice| | 2018-12-18 11:37 | 只看该作者
zjyyl 发表于 2018-12-18 11:04
这是一本参考书的程序,介绍多机通讯的,POP A没有问题,我经常这么用。R0R4无关紧要。我就是不知道怎么 ...

进入中断前一般会在主循环发个数据

使用特权

评论回复
8
zjyyl|  楼主 | 2018-12-18 14:58 | 只看该作者
ayb_ice 发表于 2018-12-18 11:37
进入中断前一般会在主循环发个数据

主程序是有发送数据,但是发送的时候串口中断是关闭的,并且发送完主程序已经把TI清零,然后打开串口中断。

使用特权

评论回复
9
ayb_ice| | 2018-12-18 16:29 | 只看该作者
zjyyl 发表于 2018-12-18 14:58
主程序是有发送数据,但是发送的时候串口中断是关闭的,并且发送完主程序已经把TI清零,然后打开串口中断 ...

如果是这样的话,说明程序有问题

使用特权

评论回复
10
ayb_ice| | 2018-12-18 16:34 | 只看该作者
zjyyl 发表于 2018-12-18 11:04
这是一本参考书的程序,介绍多机通讯的,POP A没有问题,我经常这么用。R0R4无关紧要。我就是不知道怎么 ...

POP A肯定不行的,你还经常用

无标题.png (40.19 KB )

无标题.png

使用特权

评论回复
11
zjyyl|  楼主 | 2018-12-19 08:46 | 只看该作者
ayb_ice 发表于 2018-12-18 16:34
POP A肯定不行的,你还经常用

不抬杠,用了十几年了  push a  pop a,没发现有什么问题

使用特权

评论回复
12
ayb_ice| | 2018-12-19 08:51 | 只看该作者
zjyyl 发表于 2018-12-19 08:46
不抬杠,用了十几年了  push a  pop a,没发现有什么问题

本来不想抬杆,
你还用十几年了,
这样的代码还用玩十几年吗

使用特权

评论回复
13
mcu51hi2c| | 2018-12-19 09:51 | 只看该作者
以我多年搞项目的经验告诉楼主,还是别在写汇编了,搞个串口也汇编,纯粹坑自己,去写C语言吧,直观一点,现在的单片机基本都有串口进中断的多次收发的C例程

使用特权

评论回复
14
fxhfxh| | 2018-12-19 15:18 | 只看该作者
PUSH A 汇编是不能通过的,应PUSH ACC

使用特权

评论回复
15
zjyyl|  楼主 | 2018-12-19 15:54 | 只看该作者
fxhfxh 发表于 2018-12-19 15:18
PUSH A 汇编是不能通过的,应PUSH ACC

我用的是伟福的编译软件,也用了十几年了,不想换。编译一直都能通过。不过以后我还是听你们的,改用ACC ,哈哈,谢谢

使用特权

评论回复
16
zjyyl|  楼主 | 2018-12-19 15:55 | 只看该作者
mcu51hi2c 发表于 2018-12-19 09:51
以我多年搞项目的经验告诉楼主,还是别在写汇编了,搞个串口也汇编,纯粹坑自己,去写C语言吧,直观一点, ...

唉,我要是会C我早不用汇编了,这不是不会吗

使用特权

评论回复
17
zjyyl|  楼主 | 2018-12-19 15:56 | 只看该作者
ayb_ice 发表于 2018-12-19 08:51
本来不想抬杆,
你还用十几年了,
这样的代码还用玩十几年吗

可是事实就是这样,真的一直这样用的,没有发现问题。不过以后我还是改了,哈哈。谢谢诸位指点。

使用特权

评论回复
18
gx_huang| | 2018-12-19 15:57 | 只看该作者
zjyyl 发表于 2018-12-18 09:44
上面是中断发送程序,首先不懂的是,主程序没有mov sbuf 的指令,怎么进入发送中断,进入中断后,中断内部 ...

主程序把需要发送的数据先放入缓冲数组,主程序TI=1,即可启动发送中断。
中断函数里,判断数据是否发送完毕,没有发送完毕,发送一个字节,直接退出即可。

使用特权

评论回复
19
ayb_ice| | 2018-12-19 16:21 | 只看该作者
zjyyl 发表于 2018-12-19 15:56
可是事实就是这样,真的一直这样用的,没有发现问题。不过以后我还是改了,哈哈。谢谢诸位指点。 ...

一个简单的串口代码,自己写个轻松搞定,有什么好研究的,真搞不懂

使用特权

评论回复
20
七颗咖啡豆| | 2018-12-20 15:05 | 只看该作者
与时俱进,C并不难

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

258

帖子

1

粉丝