串口发送(汇编)

[复制链接]
3942|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吗?
 楼主| likefpga 发表于 2010-4-3 18:08 | 显示全部楼层
自己顶
草履虫 发表于 2010-4-6 12:12 | 显示全部楼层
是的。自已测试一下。就OK了。
 楼主| likefpga 发表于 2010-4-14 20:23 | 显示全部楼层
问题:从这段程序来看,是不是地址0000H~003FH这个范围的地址所对应的数据具体内容是多少是未给出的?如果想给出怎么给法?期待明白人指导,谢谢!!
几米时代 发表于 2010-4-14 21:34 | 显示全部楼层
顶顶!
yidou 发表于 2010-4-14 22:15 | 显示全部楼层
看见汇编就有点心虚
xiaobai123456 发表于 2014-12-26 14:46 | 显示全部楼层
WAIT     JNB  F0 WAIT  请问一下是什么意思
xiaobai123456 发表于 2014-12-26 14:47 | 显示全部楼层
WAIT     JNB  F0 WAIT请问这个是什么意思
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

34

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部