OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3030|回复: 1

普通 纯IO单片机 模拟UART 全双工 9600或以下

[复制链接]

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6661
金钱
6661
注册时间
2016-5-29
在线时间
909 小时
发表于 2019-11-14 13:58:19 | 显示全部楼层 |阅读模式
直接上代码

;中断服务程序
ORG 0H
NOP
RST
ORG 8H
ISR()
{
  COPYA = A
  SWAPR COPYA,1
  COPYS = STATUS
  IF PBIF
  {
   INTF = 0XFD
   PORTA = PORTA
   TMR0 = TMR0_INIT_VAL104
  }
  IF T1IF
  {
   INTF = 0XF7
   TICK = 1
   IF UART_BIT_N
   {
    IF UART_BIT_N = 10
    {
     TX = 0
    }
    ELSE
    IF UART_BIT_N = 1
    {
     TX = 1
    }
    ELSE
    {
     UART_TD >>>
     TX = FC
    }
    IF UART_BIT_N --
    {
     UART_BUF_N ++
     IF UART_BUF_N < UART_SEND_LEN
     {
      MOVIA TX_BUF; ----------   A = BUF#UART_BUF_N
      ADDAR UART_BUF_N,0
      MOVAR FSR
      BANK1 = 1
      MOVR INDF,0
      BANK1 = 0
      UART_TD = A
      UART_BIT_N = 10
     }
    }
   }
  }
  IF T0IF
  {
   INTF = 0XFE
   TMR0 = TMR0_INIT_VAL
   IF RX_BUF_N < 9
   {
    FC = RX
    UART_RD >>>
   }
   RX_BUF_N ++
   IF RX_BUF_N = 1
   IF RX
   {
    RX_BUF_N = 0
   }
   ELSE
   IF RX_BUF_N = 10
   {
    RX_BUF_N = 0
    IF RX
    {
     MOVIA RX_BUF
     ADDAR RXN , 0
     MOVAR FSR
     A = UART_RD
     BANK1 = 1
     INDF = A
     BANK1 = 0
     RXN ++
     RXN & 0X0F
     RXTIME = 10
    }
   }
  }
  STATUS = COPYS
  SWAPR COPYA,0
  RETIE
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

26

主题

1538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6376
金钱
6376
注册时间
2015-8-25
在线时间
1004 小时
发表于 2019-11-29 09:02:35 | 显示全部楼层
迷你板我试过IO模拟uart收发可以做到57600及以下的波特率不出错,115200就错码较多了
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 13:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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