打印

串口发送(汇编)

[复制链接]
2909|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
likefpga|  楼主 | 2010-3-31 20:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ORG  0000H
LJMP MAIN
ORG  0023H
LJMP COM_INT
ORG 1000H
  MAIN  MOV  SP,#53Hv              ;设置堆栈指针
         MOV  78H,#20H     ;设置要发送的数据块的首、末地址
         MOV  77H,#00H   
         MOV  76H,#20H
         MOV  75H,#40H
         ACALL TRANS         ;调用发送子程序
         SJMP  $
TRANS:   MOV TMOD,#20H    ;设置定时器/计数器
              MOV TH1,#0F3H     ;设置计数器1初值
              MOV TL1,#0F3H
              MOV PCON,#80H    ;波特率加倍
              SETB  TR1         ;打开计数器1
              MOV SCON,#40H   ;设置串行口工作方式
              MOV IE,#00H        ;先关闭中断,利用查询方式发送地址侲
              CLR F0
              MOV SBUF,78H     ;发送首地址高8位
WAIT1    JNB TI,WAIT1
              CLR TI
              MOV SBUF,77H     ;发送首地址低8位
WAIT2    JNB TI,WAIT2
              CLR TI
              MOV SBUF,76H     ;发送末地址高8位
WAIT3   JNB TI,WAIT3
             CLR TI
             MOV  SBUF,75H     ;发送末地址低8位
WAIT4   JNB TI,WAIT4
             CLR TI
             MOV IE,#90H
             MOV DPH,78H
             MOV DPL,77H
             MOVX A,@DPTR
             MOV SBUF,A
WAIT     JNB  F0 WAIT
             RET
COM_INT:  CLR  TI          ;关发送中断标志位TI
                INC   DPTR       ;数据指针加1,准备发送下个数据
                MOV  A,DPH      ;判断当前被发送的数据的地址是不是末地址
                CJNE  A,76H,END1 ;不是末地址则跳转
                MOV  A,DPL      ;同上
                CJNE  A,75H,END1
                SETB  F0         ;数据发送完毕,置1标志位
                CLR   ES         ;关串行口中断
                CLR   EA         ;关中断
                RET              ;中断返回
END1:    MOVX  A,@DPTR    ;将要发送的数据送累加器,准备发送
              MOV   SBUF,A     ;发送数据
              RETI             ;中断返回
              END      
问题:
1.为什么子程序里要先发一遍首末地址的高低8位?
2. COM_INT中断中,INC DPTR语句后DPTR这个数据指针指向了哪里?
3.CJNE这两句如果不是末地址就都不是末地址,要是末地址就都是末地址?

相关帖子

沙发
草履虫| | 2010-4-1 19:39 | 只看该作者
1. 这个应该是测试程序, 仅为了测试而已。
2. DPTR 指向的是从2001H~203FH.
3. CJNE指的是:如果不是未地址,就继续发送。如果是,说明BUFFER(2000~203F)的数据已发送完了,然后关中断, 测试程序完成,主程序进入死循环。

使用特权

评论回复
板凳
xwj1987| | 2010-4-1 21:01 | 只看该作者
楼上正解

使用特权

评论回复
地板
likefpga|  楼主 | 2010-4-2 19:05 | 只看该作者
程序中
    MOV   SBUF 78H和下面的77H,76H,75H语句中传的是地址是#20H,    #00H,#20H ,#40H吗?

使用特权

评论回复
5
likefpga|  楼主 | 2010-4-3 18:08 | 只看该作者
自己顶

使用特权

评论回复
6
草履虫| | 2010-4-6 12:12 | 只看该作者
是的。自已测试一下。就OK了。

使用特权

评论回复
7
likefpga|  楼主 | 2010-4-14 20:23 | 只看该作者
问题:从这段程序来看,是不是地址0000H~003FH这个范围的地址所对应的数据具体内容是多少是未给出的?如果想给出怎么给法?期待明白人指导,谢谢!!

使用特权

评论回复
8
几米时代| | 2010-4-14 21:34 | 只看该作者
顶顶!

使用特权

评论回复
9
yidou| | 2010-4-14 22:15 | 只看该作者
看见汇编就有点心虚

使用特权

评论回复
10
xiaobai123456| | 2014-12-26 14:46 | 只看该作者
WAIT     JNB  F0 WAIT  请问一下是什么意思

使用特权

评论回复
11
xiaobai123456| | 2014-12-26 14:47 | 只看该作者
WAIT     JNB  F0 WAIT请问这个是什么意思

使用特权

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

本版积分规则

6

主题

34

帖子

0

粉丝