|
1、理论上是不可以同时的,但由于串行通讯慢,实际上是可以做到的。 2、软件上做成一个只收一个只发,协议上双方也服从这个约定。 3、中断据服务程序,运行时间不能起过一个字节的拼装收发时间,否则“1、”的不可以同时就发生了。 实际应用中,这个做样是不可取的,一个串口收、发就够了。 采用两个串口,数据通讯量也只能提高一倍,而增加一倍的波特率也同样能达成目的。 当然波特率会受到限制时,而不得不通过增加串口数量来提升通讯数据量,但也不会采用一收一发,而是一收发、另一个也收发,这样更机动。 |
| 单片机资源有限巧妙分时是常用方法 |
无穷小量 发表于 2021-9-17 16:21 S1 的 REN 不用关,一直开着接受,不影响,S1 可以高优先级,S2 不用, 因为,对方机不知道你这个单片机的实际情况,所以,接受要给足够的优先度,而 S2 发送,可以迁就 其他程序,等到不忙的时候再发送, 最后,优先级只牵涉到 对 TI RI 的响应, 所以,S2 只要你数据 放到了 SBUF2 里面,不会因为 S1 接受数据被打断影响的。 |
188610329 发表于 2021-9-17 15:47 就是我用s1来接收,初始化的时候scon的REN=1,S2CON的REN = 0接收到指定字符,SCON 的TI和RI置0,之后SCON 的REN =0,S 2CON 的REN=1开始发送数据ES2=1 |
188610329 发表于 2021-9-17 15:47 用优先级控制可以吗请问 |
|
你嘴上说一个 收 一个发 实际上两个都只在 判断 RI 一般一个收,一个发,建议用 S1 来收 S2 来发, 只是负责发送的话,S2 只要 中断触发,不用做任何判断,就直接把 把 TI2 RI2 都置 0 , 就是中断进去就是直接 S2CON &= 0xfC; 然后标记 S2Busy = 0; S1 要写完整的判断 if(RI) 怎么怎么, if(TI) 怎么怎么, 两个结束 都要分别加上 RI =0; TI =0; 不然程序可能炮死,反正只要开了串口中断,就算啥也不干,也必须有 TI =0; RI =0; 不然就会出问题。 |
| 可以查看寄存器列表,寄存器里面有接收发送控制位,如果想关闭某一功能直接对应位置位0就可以。 |
| 好像单片机只能一个中断一个中断的运行,这种同时可能有问题的。 |