打印

AT89S51

[复制链接]
1269|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 xiaobai123456 于 2014-12-26 16:12 编辑

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
      
WAIT     JNB  F0 WAIT  请问一下是什么意思  

相关帖子

沙发
huangxz| | 2014-12-26 17:10 | 只看该作者
看指令表,很明显的。

使用特权

评论回复
板凳
ayb_ice| | 2014-12-26 17:11 | 只看该作者
"WAIT     JNB  F0 WAIT  请问一下是什么意思 "

F0为零则跳转到WAIT标号处,结果还是判断F0,就是判断F0,直到F0为真则顺序执行,

应该是
WAIT:
     JNB  F0,WAIT
...

使用特权

评论回复
地板
ningling_21| | 2014-12-26 19:26 | 只看该作者
标号后连冒号都没有,肯定编译错误...

使用特权

评论回复
5
xiaobai123456|  楼主 | 2014-12-26 19:54 | 只看该作者
为什么要设置 JNB  F0 WAIT  直接等中断不行吗

使用特权

评论回复
6
xiaobai123456|  楼主 | 2014-12-26 20:20 | 只看该作者
ayb_ice 发表于 2014-12-26 17:11
"WAIT     JNB  F0 WAIT  请问一下是什么意思 "

F0为零则跳转到WAIT标号处,结果还是判断F0,就是判断F0 ...

cpu不是一边在WAIT     JNB  F0 WAIT不断查询,一边中断了进入中断处理程序,这也可以吗

使用特权

评论回复
7
ayb_ice| | 2014-12-27 10:59 | 只看该作者
xiaobai123456 发表于 2014-12-26 20:20
cpu不是一边在WAIT     JNB  F0 WAIT不断查询,一边中断了进入中断处理程序,这也可以吗 ...

进入中断是可以,中断返回后继续查询

使用特权

评论回复
8
xiaobai123456|  楼主 | 2014-12-27 11:17 | 只看该作者
ayb_ice 发表于 2014-12-27 10:59
进入中断是可以,中断返回后继续查询

我一直不懂为什么要查询F0

使用特权

评论回复
9
cjseng| | 2014-12-27 11:50 | 只看该作者
那你写成:
WAIT:SJMP WAIT好了

使用特权

评论回复
10
ayb_ice| | 2014-12-27 13:48 | 只看该作者
xiaobai123456 发表于 2014-12-27 11:17
我一直不懂为什么要查询F0

F0是个用户标志,当就绪好了就设置F0,然后查询到了就接着运行下面的程序

使用特权

评论回复
11
xiaobai123456|  楼主 | 2014-12-27 22:08 | 只看该作者
ayb_ice 发表于 2014-12-27 13:48
F0是个用户标志,当就绪好了就设置F0,然后查询到了就接着运行下面的程序 ...

他是在等待什么就绪好啊

使用特权

评论回复
12
xiaobai123456|  楼主 | 2014-12-27 22:09 | 只看该作者
cjseng 发表于 2014-12-27 11:50
那你写成:
WAIT:SJMP WAIT好了

那不是不用F0也可以可是书上很多都用F0

使用特权

评论回复
13
ayb_ice| | 2014-12-29 08:03 | 只看该作者
xiaobai123456 发表于 2014-12-27 22:08
他是在等待什么就绪好啊

SETB  F0         ;数据发送完毕,置1标志位

使用特权

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

本版积分规则

2

主题

9

帖子

0

粉丝