找回密码
 立即注册
楼主: wuzhengmin

有关DMA,山东大学陈桂友教授

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-20 16:33:31 | 显示全部楼层
先介绍一下流程图的理解:

截图202601201633281954.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-20 16:38:49 | 显示全部楼层
注意,MOV  SBUF   #57H

是通过移位寄存器发送,需要时间的

所以要利用中断,发送完一个完整的字节,会产生中断!

RI TI就是接受和发送完成中断标志

看看程序:



截图202601201638475621.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-20 17:14:14 | 显示全部楼层
第一个单片机只是发送,50或者40都可以:

截图202601201716165674.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-20 17:18:29 | 显示全部楼层
TMOD的设置:
截图202601201718275492.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-20 17:20:30 | 显示全部楼层
接着设置首地址

截图202601201720285497.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-20 18:20:45 | 显示全部楼层
对应的C语言:

截图202601201820433715.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-20 18:54:55 | 显示全部楼层
C语言的中断服务函数如下:

截图202601201854525671.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-20 19:11:29 | 显示全部楼层
那么乙机接受的流程是怎样的?

波特率肯定要和发送的甲机一模一样



截图202601201911264596.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-20 19:15:55 | 显示全部楼层
注意,接收方的波特率必须和发送方的波特率相同!

接受放REN=1

中断服务程序请中断肯定是请RI

截图202601201915536024.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:153
  • 最近打卡:2026-03-30 19:54:03
已绑定手机

22

主题

2426

回帖

3422

积分

论坛元老

积分
3422
发表于 2026-1-21 20:37:53 | 显示全部楼层
我手头没有陈老师的课程资料,程序要自己慢慢输入:


//  $include (../comm/AI8051U.INC)

           $INCLUDE (AI8051U.INC) ;包含AI8051U单片机的寄存器定义文件
           ADDRT EQU 1000H
       ORG  0000H

LJMP                   MAINT   ;跳至主程序入口
                        ORG  0023H
                        LJMP UART1_ISR     ;转至串行中断服务程序
         
MAINT:                 MOV SP, #80H       ;设置堆栈指针
                        MOV SCON, #50H     ;8位数据,可变波特率
                        ANL AUXR, #0FEH    ;串口1选择定时器1为波特率发生器
                        ANL TMOD, #0FH     ;设定定时器1为16位自动重装方式
                        MOV TL1, #0E8H     ;设定定时初值
                        MOV TH1, #0FFH     ;设定定时初值
                        CLR ET1            ;禁止定时器1中断
                        SETB TR1           ;启动定时器1
                        SETB ES            ;串行口开中断
                        SETB EA            ;开总中断

                        MOV DPTR,#ADDRT    ;ADDRT是首址,可以使用EQU定义
                        MOV R0,#00H        ;传送字节数初值
                        MOVX A,@DPTR       ;取第一个发送字节
                        MOV SBUF,A         ;启动串行口发送
                        SJMP $             ;等待中断

                        ;中断服务程序
UART1_ISR:  CLR TI             ;将中断标志清零
                        CJNE R0,#7FH,LOOPT ;判断128B是否发送完,若没完,则转LOOPT
                        CLR ES             ;全部发送完毕,禁止串行口中断
                        LJMP ENDT          ;转中断返回
                       
LOOPT:      INC R0             ;修改字节数指针                       
                        INC DPTR           ;修改地址指针,继续取下一发送数据
                        MOVX A,@DPTR       ;取发送数据
                       
                        MOV SBUF,A         ;启动串行口
                       
ENDT:       RETI               ;中断返回
                        END

回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-1 01:27 , Processed in 0.108898 second(s), 75 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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