以下程序如何改成汇编,谢谢!

[复制链接]
3266|10
 楼主| QBLAJI 发表于 2007-8-6 15:39 | 显示全部楼层 |阅读模式
;<br />;单片机C51串口中断接收和发送测试例程(含通信协议的实现)<br />;通信协议:第1字节,MSB为1,为第1字节标志,第2字节,MSB为0,为非第一字节标志,其余类推……,最<br />;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;后一个字节为前几个字节后7位的异或校验和。<br />;测试方法:可以将串口调试助手的发送框写上&nbsp;95&nbsp;10&nbsp;20&nbsp;25,并选上16进制发送,接收框选上16进制显示,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;如果每发送一次就接收到95&nbsp;10&nbsp;20&nbsp;25,说明测试成功。<br />&nbsp;;<br />;//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收<br />;//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的<br /><br /><br />#include&nbsp;&ltreg51.h&gt<br />#include&nbsp;&ltstring.h&gt<br /><br />#define&nbsp;INBUF_LEN&nbsp;4&nbsp;&nbsp;&nbsp;//数据长度<br /><br />unsigned&nbsp;char&nbsp;inbuf1[INBUF_LEN];<br />unsigned&nbsp;char&nbsp;checksum,count3;<br />bit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read_flag=0;<br /><br />void&nbsp;init_serialcomm(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;SCON&nbsp;&nbsp;=&nbsp;0x50;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SCON:&nbsp;serail&nbsp;mode&nbsp;1,&nbsp;8-bit&nbsp;UART,&nbsp;enable&nbsp;ucvr<br />&nbsp;&nbsp;&nbsp;&nbsp;TMOD&nbsp;|=&nbsp;0x20;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//TMOD:&nbsp;timer&nbsp;1,&nbsp;mode&nbsp;2,&nbsp;8-bit&nbsp;reload<br />&nbsp;&nbsp;&nbsp;&nbsp;PCON&nbsp;|=&nbsp;0x80;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//SMOD=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;TH1&nbsp;&nbsp;&nbsp;=&nbsp;0xF4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Baud:4800&nbsp;&nbsp;fosc=11.0592MHz<br />&nbsp;&nbsp;&nbsp;&nbsp;IE&nbsp;&nbsp;&nbsp;|=&nbsp;0x90;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Enable&nbsp;Serial&nbsp;Interrupt<br />&nbsp;&nbsp;&nbsp;&nbsp;TR1&nbsp;&nbsp;&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;timer&nbsp;1&nbsp;run<br />&nbsp;&nbsp;&nbsp;//&nbsp;TI=1;<br />}<br /><br />//;向串口发送一个字符<br />void&nbsp;send_char_com(unsigned&nbsp;char&nbsp;ch)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;SBUF=ch;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(TI==0);<br />&nbsp;&nbsp;&nbsp;&nbsp;TI=0;<br />}<br /><br />//;向串口发送一个字符串,strlen为该字符串长度<br />void&nbsp;send_string_com(unsigned&nbsp;char&nbsp;*str,unsigned&nbsp;int&nbsp;strlen)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;k=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send_char_com(*(str&nbsp;+&nbsp;k));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;while(k&nbsp;&lt&nbsp;strlen);<br />}<br /><br /><br />//;串口接收中断函数<br />void&nbsp;serial&nbsp;()&nbsp;interrupt&nbsp;4&nbsp;using&nbsp;3<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;if(RI)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;ch;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RI&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ch=SBUF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ch&gt127)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count3=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inbuf1[count3]=ch;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checksum=&nbsp;ch-128;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count3++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inbuf1[count3]=ch;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checksum&nbsp;^=&nbsp;ch;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;(count3==(INBUF_LEN-1))&nbsp;&&&nbsp;(!checksum)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read_flag=1;&nbsp;&nbsp;//如果串口接收的数据达到INBUF_LEN个,且校验没错,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//;就置位取数标志<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /><br />main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;init_serialcomm();&nbsp;&nbsp;//初始化串口<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(read_flag)&nbsp;&nbsp;//;如果取数标志已置位,就将读到的数从串口发出<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read_flag=0;&nbsp;//取数标志清0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send_string_com(inbuf1,INBUF_LEN);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}<br />
spwp 发表于 2007-8-6 17:04 | 显示全部楼层

???????????????????

  
太阳之母 发表于 2007-8-6 21:11 | 显示全部楼层

嘿嘿

名牌的屁帘卡裆西服,如何改成大褂和缅裆裤?<br />LZ有趣,怎么有这样的要求?
戴永 发表于 2007-8-6 22:43 | 显示全部楼层

????

  
udbit18 发表于 2007-8-7 17:19 | 显示全部楼层

我试一试

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;READ_FLAG&nbsp;&nbsp;BIT&nbsp;&nbsp;&nbsp;00H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LJMP&nbsp;&nbsp;&nbsp;&nbsp;START<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;23H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EA<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SETB&nbsp;&nbsp;&nbsp;&nbsp;READ_FLAG<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETI<br />START:&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;SCON,#50H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;TMOD,#20H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;PCON,#80H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;TH1,#F4H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;IE,#90H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SETB&nbsp;&nbsp;TR1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;R2,#04H&nbsp;&nbsp;;长度<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;R0,#30H&nbsp;&nbsp;;要发送的首地址<br />LP:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JNB&nbsp;&nbsp;&nbsp;READ_FLAG,$<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;READ_FLAG<br />SERIAL:&nbsp;LCALL&nbsp;&nbsp;&nbsp;SEND<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DJNZ&nbsp;&nbsp;&nbsp;&nbsp;R2,OUTSE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SETB&nbsp;&nbsp;&nbsp;&nbsp;EA<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LJMP&nbsp;&nbsp;&nbsp;&nbsp;LP<br />OUTSE:&nbsp;&nbsp;INC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LJMP&nbsp;&nbsp;&nbsp;&nbsp;SERIAL<br />SEND:&nbsp;&nbsp;&nbsp;PUSH&nbsp;&nbsp;&nbsp;&nbsp;ACC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,@R0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SBUF,A<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JNB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TI,$<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TI<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACC<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET<br />由于本人对C语言不够了解,可以有不对的地方,我去看一下资料,要是不对的地方,下次再改,懂的人可以指教一下吗??谢谢<br />&nbsp;&nbsp;&nbsp;&nbsp;
allround 发表于 2007-8-7 19:11 | 显示全部楼层

使用Keil输入C程序

编译即可看反汇编代码.
风... 发表于 2007-8-7 20:28 | 显示全部楼层

用楼上的方法即可,不过:

那不是反汇编代码!<br />两回事!
 楼主| QBLAJI 发表于 2007-8-9 10:54 | 显示全部楼层

udbit18 同志,汇编程序编译不对,符号未定义:F4H

  
王紫豪 发表于 2007-8-9 14:19 | 显示全部楼层

楼主这样的懒人都有,我何必还潜水?

  
zhugjbest 发表于 2007-8-9 14:53 | 显示全部楼层

有创意,狠

  
gooog 发表于 2007-8-10 08:58 | 显示全部楼层

让编译器给你编,快而且准确

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

本版积分规则

4

主题

5

帖子

1

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