资源描述:
《汇编语言串口通信接收发送的程序题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、例2利用定时/计数器T0的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统时钟频率为12MHz。解:1、计算计数初值X:由于晶振为12MHz,所以机器周期Tcy为1ms。所以:N=t/Tcy=10×10-3/1×10-6=10000X=65536-10000=55536=D8F0H即应将D8H送入TH0中,F0H送入TL0中2、求T0的方式控制字TMOD:M1M0=01,GATE=0,C/T=0,可取方式控制字为01H;ORG0000HLJMPMAIN;跳转到主程序ORG000BH;T0的中
2、断入口地址LJMPDVT0;转向中断服务程序ORG0100HMAIN:MOVTMOD,#01H;置T0工作于方式1MOVTH0,#0D8H;装入计数初值MOVTL0,#0F0HSETBET0;T0开中断SETBEA;CPU开中断SETBTR0;启动T0SJMP$;等待中断DVT0:CPLP1.0;P1.0取反输出MOVTH0,#0D8H;重新装入计数值MOVTL0,#0F0HRETI;中断返回END•2、串行口方式1的发送和接收例7-4:89C51串行口按双工方式收发ASCII字符,最高位用来作奇偶校验位,采用奇校验方式,要求传送的波
3、特率为1200b/s。编写有关的通信程序。解:7位ASCII码加1位奇校验共8位数据,故可采用串行口方式1。89C51单片机的奇偶校验位P是当累加器A中1的数目为奇数时,P=1。如果直接把P的值放入ASCII码的最高位,恰好成了偶校验,与要求不符。因此,要把P的值取反以后放入ASCII码最高位,才是要求的奇校验。•2、串行口方式1的发送和接收•双工通信要求收、发能同时进行。收、发操作主要是在串行接口进行,CPU只是把数据从接收缓冲器读出和把数据写入发送缓冲器。数据传送用中断方式进行,响应中断以后,通过检测是RI置位还是TI置位来决定C
4、PU是进行发送操作还是接收操作。发送和接收都通过调用子程序来完成,设发送数据区的首地址为20H,接收数据区的首地址为40H,fosc为6MHz,通过查波特率初值(表7-2)可知定时器的初装值为F3H。定时器T1采用工作模式2,可以避免计数溢出后用软件重装定时初值的工作。•2、串行口方式1的发送和接收主程序MOVTMOD,#20H;定时器1设为模式2MOVTL1,#0F3H;定时器初值MOVTH1,#0F3H;8位重装值SETBTR1;启动定时器1MOVSCON,#50H;设置为方式1,;REN=1MOVR0,#20H;发送数据区首址M
5、OVR1,#40H;接收数据取首址ACALLSOUT;先输出一个字符SETBESSETBEASJMP$;等待中断•2、串行口方式1的发送和接收发送子程序SOUT:CLRTIMOVA,@R0;取发送数据到AMOVC,P;奇偶标识赋予CCPLC;奇校验MOVACC.7,CINCR0;修改发送数据指针MOVSBUF,A;发送ASCII码RET;返回•2、串行口方式1的发送和接收•例7-7:利用串行口和堆栈技术发送字符串常量。•上面两个例子中,发送和接收的都是一些变量数据,且存放在内部RAM单元中。现说明如何利用堆栈技术发送存放在程序存储器内
6、的字符串常量。•下面的例子中,这些字符串是发送给CRT终端的,以回车符(CR)和换行符(LF)开始,以换码符(ESC)为结尾。下面是程序片断:•2、串行口方式1的发送和接收CREQU0DH;ASCII回车符LFEQU0AH;ASCII换行符ESCEQU1BH;ASCII换码符……MOVTMOD,#20H;设置定时器T1为模式2MOVTL1,#0FDH;设波特率位9600b/s;(fosc=11.059MHz)MOVTH1,#0FDHSETBTR1;启动T1运行MOVSCON,#01000000B;设置串行口方式1ACALLXSTRIN
7、GDBCR,LFDB‘NU&BIAA’;字符串常量DBESCMOVB,#01H……•3、串行口方式2、方式3的发送和接收•串行口方式2与方式3基本一样(只是波特率设置不同),接收/发送11位信息:开始为l位起始位(0),中间8位数据位,数据位之后为1位程控位(由用户置SCON的TB8决定),最后是1位停止位(1)。只比方式l多了一位程控位。•3、串行口方式2、方式3的发送和接收例7-8:用第9个数据位作奇偶校验位,编制串行口方式2的发送程序。•解:设计一个发送程序,将片内RAM50H~5FH中的数据串行发送;串口设定为方式2,TB8作
8、奇偶校验位。在数据写入发送缓冲器之前,先将数据的奇偶位P写入TB8,这时,第9位数据作奇偶校验用。程序清单如下:TRT:MOVSCON,#80H;方式2设定MOVPCON,#80H;取波特率为fosc/32MOVR7,#