基于单片机的labview信号发生器课设内容摘要:

{ SBUF=0xff。 while(!TI)。 delayms(10)。 TI=0。 } for(i=0xff。 i0。 i) { SBUF=0x00。 delayms(10)。 while(!TI)。 TI=0。 } ES=1。 flag=0。 } void juchi() //锯齿波 { for(i=0xff。 i0。 i) { SBUF=i。 while(!TI)。 TI=0。 } ES=1。 flag=0。 } void sin() //正弦波 { for(i=0。 i255。 i++) { SBUF=SinTab[i]。 while(!TI)。 TI=0。 ES=1。 flag=0。 } } void init() { TMOD=0x20。 //设置定时器工作方式 TH1=0xfd。 TL1=0xfd。 //启动定时器 TR1=1。 REN=1。 //允许串行接入 SM0=0。 SM1=1。 EA=1。 //开全局中断允许位 ES=1。 //开串口中断允许位 } void main() { init()。 while(1) { if(flag==1) //说明已收到数据 { ES=0。 //关串口中断允许位 if(S0==0) { delayms(10)。 //按键消抖 if(S0==0) m++。 if(m2) m=0。 while(!S0)。 //松手检测 } switch(m) //选择波形 { case 0: fangbo()。 //方波 break。 case 1: juchi()。 //锯齿波 break。 case 2: sin()。 //正弦波 break。 default:sin()。 } } } } void ser() interrupt 4 { RI=0。 flag=1。 } ( 2)硬件模块设计 一.电路连接详解 图 1 串行通信实验电路图 下面就对图 1 所示电路进行详细说明: 可以看到,在电路图中,有 TXD 和 RXD 两个接收和发送指示状态灯,此外用了一个叫 MAX3232 的芯片,那它是用来实现什么的呢。 首先我们要知道计算机上的串口是具 RS232 标准的串行接口,而 RS232 的标准中定义了其电气特性:高电平“ 1”信号电压的范围为 15V~3V,低电平“ 0” 信号电压的范围为 +3V~+15V。 可能有些读者会问,它为什么要以这样的电气特性呢。 这是因为高低电平用相反的电压表示,至少有 6V 的压差,非常好的提高了数据传输的可靠性。 由于单片机的管脚电平为 TTL,单片机与 RS232 标准的串行口进行通信时,首先要解决的便是电平转换的问题。 一般来说,可以选择一些专业的 集成电路 芯片,如图中的 MAX3232。 MAX3232 芯片内部集成了电压倍增 电路,单电源供电即可完成电平转换,而且工作电压宽, 3V~ 间均能正常工作。 其典型应用如图中所示,其外围所接的电容对传输速率有影响,在试验套件中采用的是 F。 值得一提的是 MAX3232 芯片拥有两对电平转换线路,图中只用了一路,因此浪费了另一路,在一些场合可以将两路并联以获得较强的驱动抗干扰能力。 此外,我们有必要了解图中与计算机相连的 DB9 型 RS232 的引脚结构(见图 2)。 图 2 DB9 连接器接口图 其各管脚定义如下(见表 4)。 表 4 DB9 型接口管脚定义 与单片机串口相关的寄存器 SBUF 寄存器:它是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据,可通过指令对 SBUF 的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。 从而控制外部两条独立的收发信号线 RXD( )、 TXD( ),同时发送、接收数据,实现全双工。 串行口控制寄存器 SCON(见表 1)。 表 1 SCON 寄存器 表中各位(从左至右为从高位到低位)含义如下。 SM0 和 SM1 :串行口工作方式控制位, 其定义如表 2 所示。 表 2 串行口工作方式控制位 其中, fOSC 为单片机的时钟频率;波特率指串行口每秒钟发送(或接收)的位数。 SM2 :多机通信控制位。 该仅用于方式 2 和方式 3 的多机通信。 其中发送机 SM2 = 1(需要程序控制设置)。 接收机的串行口工作于方式 2 或 3, SM2=1 时,只有当接收到第 9 位数据( RB8)为 1 时,才把接收到的前 8 位数据送入SBUF,且置位 RI 发出中断申请引发串行接收中断,否则会将接受到。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。