利用PC的RS232口控制LED灯

2013-10-29 14:27:00
  • 相关元件pdf下载:fs323 max232 gub232 通过本实验学习pc机串口与avr单片机串口之间相互通讯的基本硬件接口电路和软件编程方法,并且达到使用pc机来控制led的简单应用。pc机串口大家都不会陌生了吧!我们可以使用串口电

相关元件pdf下载:fs323 max232 gub232 通过本实验学习pc机串口与avr单片机串口之间相互通讯的基本硬件接口电路和软件编程方法,并且达到使用pc机来控制led的简单应用。pc机串口大家都不会陌生了吧!我们可以使用串口电缆直接连接两台pc机的串口,实现两台pc机的串口通讯。但是pc机和单片机的通讯却不能够用电缆直接进行连接,原因是pc机rs232串口的电平标准和单片机的ttl电平不一致,因此单片机和pc机之间的串口通讯必须要有一个rs232/ttl电平转换电路。通常这个电路都选择专用的rs232接口电平转换集成电路进行设计,如max232、hin232等。本实验采用nih232cp芯片来完成串口接口电路,nih232和max232可以直接互换。当然,我们也可以使用分立元件来搭建rs232电平转换电路以供我们实验使用,下图给出了一个常见电路,只要器件完好,电路焊接完毕后即可正常工作,经实际使用,效果良好。 avr单片机串口程序的编写atmega8单片机的串口具支持多种数据帧结构、有三个完全独立的中断(接收完成、发送完成、发送数据寄存器空)等特点,同时也支持多机通讯模式。本实验就以atmega8为例来介绍avr单片机串口的编程。单片机串口在使用前必须对其进行初始化。初始化内容如下:1.串口接收器和发送器的使能设置:首先我们要根据需要,使能m8串口的接收器或者发射器,这样i/o口(pd1:txd,pd2:rxd)才能为usart工作。2.串口中断工作方式的设置:如果需要串口工作于中断方式,则要根据需要设置usart的中断设置,如果工作于查询方式,那么中断设置就没有必要了。本实验中串口设置为响应接收完成中断,即接收器接收到一个完整的数据帧后,将触发一次接收完成中断。3.波特率设置:也就是设置串口的数据传输速率,两个串口之间要正常通讯就必须要保证波特率相同。本实验设置的波特率为9600,系统使用内置8mhz时钟源,可以直接查表(《atmega8原理及应用手册》129页)得到ubrr=51。4.数据帧结构设置:本实验设置为8位数据位+1位停止位。因此,本实验的串口初始化程序如下:void uart_init(void){ucsrb = bit(rxcie)| bit(rxen) |bit(txen); //允许串口发送和接收,并响应接收完成中断ubrr = 51; //设置串口波特率为9600 ucsrc = bit(ursel)|bit(ucsz1)|bit(ucsz0); //帧结构为8位数据+1位stop位}如果你对avr单片机串口的设置还不是太熟悉的话,也可以使用icc编译器中的应用向导直接生成串口的相关代码。操作方法如下:1.在icc中新建一个文件;2.点击tools菜单中的application builder子菜单,将弹出以下界面,然后根据需要选择cpu为m8,晶振频率为8mhz。3.点击上面界面中的uart菜单,出现下面界面。然后按下图选项选择使能接收和发送、波特率9600、数据位8位、接收完成中断。 4.点击ok后,在刚才新建的文件中即生成了完整代码,其中串口初始化的代码如下://uart0 initialize// desired baud rate: 9600// actual: baud rate:9615 (0.2%)// size: 8 bit// parity: disabledvoid uart0_init(void){ucsrb = 0x00; //disable while setting baud rateucsra = 0x00;ucsrc = bit(ursel) | 0x06;ubrrl = 0x33; //set baud rate loubrrh = 0x00; //set baud rate hiucsrb = 0x98;}大家看看使用icc自动生成的代码和我们自己编写的代码中ucsrc、ubrr、ucsrb是不是一样的呢?通讯协议及命令(2004-10-29)为了保证单片机和pc机的正常可靠的通讯,避免系统出现误动作,我们需要制订一个简单的通讯协议,同时还要定义能够让pc和单片机理解的命令。这里我们简单定义如下:1.pc机发送的继电器控制指令采用4个字符组成的字符串格式“s”+s1s0+“p”,如“s00p”。其中s和p字符用于数据的简单校验,也就是说当单片机收到的串口数据中如果第一位是“s”第四位是“p”,则单片机接收到的命令有效,否则指令无效。s1是单片机地址识别,如果单片机接收到的s1字符等于自己的地址码,则单片机执行命令,否则无效。通过这个字符我们就可以通过一个pc机串口和多个单片机进行通讯,这种通讯方式的设置我们会在后面阐述。s0对应继电器编码,指定相应继电器的吸合或者释放,如果s0=“a”,则该板的所有继电器全部吸合,如果是“b”则全部释放。2.单片机返回给pc机的指令也同样采用4个字符串格式s2s1s0+“t”,如“000t”。其中“t”为校验码。s2为单片机地址码,s1、s0对应继电器编码。返回指令用于pc机判断单片机是否执行了发出的指令。s1s0的二进制数据中,每一位对应一个继电器的状态,如果为1表示继电器吸合,为0表示继电器释放。3.通讯检测。当后台程序启动后,pc机先发送“s00t”命令,如果pc机在6秒以内能够收到单片机返回的继电器状态(该状态是读取控制继电器的i/o口的电平获得的),则pc机判断通讯正常,可以正常使用,否则pc机提示串口通讯不正常。此后,pc机还会每隔5秒钟自动请求一次继电器状态,并且按键对继电器进行操作以后,控制板也会主动向pc机发送状态字。4.软件升级指令。当需要升级单片机软件时,pc机发送该指令让单片机进入boot load程序区,准备更新软件版本。该指令格式为“su”+s0+“p”,s0为单片机地址码。当单片机进入boot区后,向pc机发送s0+“upd”指令,s0为单片机地址码,通知pc机软件升级已经准备好。然后pc机关闭串口,提示您打开isp下载软件进行升级。5.单片机复位指令。当单片机在线升级完成以后,pc机可以通过发送复位指令让单片机复位重新进入应用程序区。atmega8的iap应用我们将在后面进行阐述。后台pc程序及使用介绍后台程序使用vb6.0编写,其中利用vb的mscomm控件完成pc和单片机的通讯。界面如下:4.点击ok后,在刚才新建的文件中即生成了完整代码,其中串口初始化的代码如下://uart0 initialize// desired baud rate: 9600// actual: baud rate:9615 (0.2%)// size: 8 bit// parity: disabledvoid uart0_init(void){ucsrb = 0x00; //disable while setting baud rateucsra = 0x00;ucsrc = bit(ursel) | 0x06;ubrrl = 0x33; //set baud rate loubrrh = 0x00; //set baud rate hiucsrb = 0x98;}大家看看使用icc自动生成的代码和我们自己编写的代码中ucsrc、ubrr、ucsrb是不是一样的呢?通讯协议及命令(2004-10-29)为了保证单片机和pc机的正常可靠的通讯,避免系统出现误动作,我们需要制订一个简单的通讯协议,同时还要定义能够让pc和单片机理解的命令。这里我们简单定义如下:1.pc机发送的继电器控制指令采用4个字符组成的字符串格式“s”+s1s0+“p”,如“s00p”。其中s和p字符用于数据的简单校验,也就是说当单片机收到的串口数据中如果第一位是“s”第四位是“p”,则单片机接收到的命令有效,否则指令无效。s1是单片机地址识别,如果单片机接收到的s1字符等于自己的地址码,则单片机执行命令,否则无效。通过这个字符我们就可以通过一个pc机串口和多个单片机进行通讯,这种通讯方式的设置我们会在后面阐述。s0对应继电器编码,指定相应继电器的吸合或者释放,如果s0=“a”,则该板的所有继电器全部吸合,如果是“b”则全部释放。2.单片机返回给pc机的指令也同样采用4个字符串格式s2s1s0+“t”,如“000t”。其中“t”为校验码。s2为单片机地址码,s1、s0对应继电器编码。返回指令用于pc机判断单片机是否执行了发出的指令。s1s0的二进制数据中,每一位对应一个继电器的状态,如果为1表示继电器吸合,为0表示继电器释放。3.通讯检测。当后台程序启动后,pc机先发送“s00t”命令,如果pc机在6秒以内能够收到单片机返回的继电器状态(该状态是读取控制继电器的i/o口的电平获得的),则pc机判断通讯正常,可以正常使用,否则pc机提示串口通讯不正常。此后,pc机还会每隔5秒钟自动请求一次继电器状态,并且按键对继电器进行操作以后,控制板也会主动向pc机发送状态字。4.软件升级指令。当需要升级单片机软件时,pc机发送该指令让单片机进入boot load程序区,准备更新软件版本。该指令格式为“su”+s0+“p”,s0为单片机地址码。当单片机进入boot区后,向pc机发送s0+“upd”指令,s0为单片机地址码,通知pc机软件升级已经准备好。然后pc机关闭串口,提示您打开isp下载软件进行升级。5.单片机复位指令。当单片机在线升级完成以后,pc机可以通过发送复位指令让单片机复位重新进入应用程序区。atmega8的iap应用我们将在后面进行阐述。后台pc程序及使用介绍后台程序使用vb6.0编写,其中利用vb的mscomm控件完成pc和单片机的通讯。界面如下:界面中的每一个小按钮控制实验板上的每一个led和继电器。如果串口通讯正常的话,按一下,实验板上对应的led将点亮继电器吸合,再按一下,led又被关闭继电器释放。而全开按则控制实验板上所有的led和继电器开或者关。下面的pc指令框是显示pc机发出的每一个控制指令,而返回结果框将显示实验板返回的执行结果。最下面的软件升级按钮是执行实验板的在线升级控制。如果需要对单片机进行软件升级,我们这里就没有必要再使用isp下载程序了。点击软件升级,单片机获得升级指令后将会返回升级准备好的命令,程序就会自动关闭串口,然后提示你使用sl的下载软件下载程序。当软件升级完毕后,cpu是不会自动进入应用程序区的,这是你可以复位单片机或者点击前台复位按键让cup自动复位进入应用程序区。实际应用在本实验的实际应用中,增加了继电器控制电路和键盘电路。既可以通过pc机来控制也可以用过按键来控制电器的开关线路:gdfgdff.pdf应用程序:fsfe.rarboot程序:dsadas.rarnih232cp资料下载max232cpe资料下载