建立Proteus的单片机串口仿真平台.DOC

上传人:国*** 文档编号:975564 上传时间:2018-11-10 格式:DOC 页数:9 大小:304KB
下载 相关 举报
建立Proteus的单片机串口仿真平台.DOC_第1页
第1页 / 共9页
建立Proteus的单片机串口仿真平台.DOC_第2页
第2页 / 共9页
建立Proteus的单片机串口仿真平台.DOC_第3页
第3页 / 共9页
建立Proteus的单片机串口仿真平台.DOC_第4页
第4页 / 共9页
建立Proteus的单片机串口仿真平台.DOC_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、1建立 Proteus 的单片机串口仿真平台本文详细介绍如何建立 Proteus 和 PC 机串口通信软件之间,进行通信仿真的平台。这个平台由三个部分组成。它们是:Proteus 的单片机仿真电路,PC 机串口通信软件,连接前两部分的虚拟串口软件。1. Proteus 的单片机仿真电路为了尽量简单明了,仿真电路只包含单片机和 Proteus 的 COMPIM 两个器件。本文的单片机采用 AVR M16。运行 Proteus 的 ISIS。加入两个器件如下:类别:Microprocessor ICs器件:ATMEGA16库: AVR2描述:-类别:Miscellaneous器件:COMPIM库:

2、 ACTIVE描述:COM Port Physical Interface model仿真电路,如图 1图 1 Proteus 串口仿真实例电路这里需要说明两点:首先,不需要串口电平转换电路。例如:MAX232 等;其次,连线不必交叉。交叉任务交给虚拟串口去完成。串口功能:中断接收到一个字节(0255)无符号整数后,立即将收到的数据发送回去。所以,程序非常简单。重点在于建立仿真通信平台,因此不厌其烦地叙述建立平台的过程,以尽量避免初学者在某处卡住。2设置 ATMEGA16 的属性。单击 ATMEGA16 变红色,再单击,弹出编辑元件窗口,如图 2图 2 ATMEGA16 编辑元件窗口只要编辑红

3、框圈起来的参数:Program File 建议选择 .cof 文件,这样可以单步调试。当然,对本项目过于简单没什么可调试的。也可以选择.hex 文件。千万注意,当文件目录改版后,一定要重新选择文件路径!另一个参数 CKSEL Fuses 按图上的选择。注意:程序中,初始化串口时,波特率因子也得按主频 8M 来选择!设置 COMPIM 的属性。单击 COMPIM 变红色,再单击,弹出编辑元件窗口,如图 33图 3 COMPIM 编辑元件窗口按红框内的选择即可。当然可以改变。但是,必须记下这些参数。PC 机的串口通信软件的参数,除了串口号必须和(例如 CMO1)不同外,其它 4 项参数(波特率,数

4、据位数,停止位数,校验码)必须一致。单片机 ATMEGA16 的 ICC-AVR 程序,见附录 1。2. PC 机串口通信软件通信程序功能:发送一个字节(0255) ,等待原字节返回。如果收到返回字节,说明信道畅通,仿真串口平台建立成功。任何一种能实现上述的通信程序功能的通信软件,都可以使用。例如:“串口通信助手” 。不过为了建立过程的完整起见,还是用 VB 开发一个极其简单的串口通信程序。在 VB 环境下,建立一个新工程工程名:虚拟串口通信(VB_Serial.vbp)窗体名:frmSerial(frmSerial.frm)表 1 控件列表控件类 名 称 Caption Text CommP

5、ort SettingsLabel Label1(0) 发送:Label Label1(1) 接收:4Label lblSetting 2: 9600,N,8,1MSComm MSComm1 2 9600, ,N,8,1TextBox txtPortNo 2TextBox txtRcv RcvTextBox txtSend TabIndex=0 123CommandButton cmdPortNo 改变串口号窗体布局,如图 4图 4 VB 串口通信窗体布局图简单介绍一下操作。启动时,要求输入和 COMPIM 不同的串口号。如果焦点在txtSend,按 Enter 键,立即将 txtSend 上

6、的数据发送。假如信道畅通,txtRcv 显示返回值。其值和 txtSend 相同。任何时候改变 txtSend 的值,都会将改变后的值发送。如果信道畅通,txtRcv 值和 txtSend 的值始终保持一致。并且每发送一次,COMPIM 上的 RXD 和 TXD 指示灯都会闪一次红光。VB 程序代码,见附录 2。3. 虚拟串口软件网上有各种虚拟串口软件,这里采用 SerialNULL。下载并安装 SerialNULL。这部分很简单,这里不赘述了。启动 SerialNULL,得到界面,如图 5。5图 5 启动 SerialNULL 得到的界面在图 5 上,只有物理端口,没有虚拟端口。所以,必须添

7、加虚拟端口。在控制面板的“添加虚拟端口”处,通过下拉操作选择两个端口。例如:COM1 和COM2(也可以任意选择其它物理端口) ,然后点击“添加端口”按钮。你会发现资源列表上的虚拟端口部分发生了变化:多出一对 COM1 和 COM2 组成的虚拟端口。如图 6 上红框所圈的部分。图 6 多出了一对 COM1 和 COM2 组成的虚拟端口COM1 和 COMPIM 的端口相同,COM2 和 VB-Serial 的端口相同。这样就将 COMPIM和 VB-Serial 的信道建立起来了。亦即 Proteus 的串口仿真平台建立起来了。注:端口包括串口,串口也是一种端口。所以,本文中端口和串口是一回事

8、。64. Proteus 串口仿真平台测试1)检查 COMPIM 和 VB-Serial 的通信参数串口单元 串口号 波特率 校验 数据位 停止位COMPIM COM1 9600 N 8 1VB-Serial COM2 9600 N 8 12)启动 SerialNULL 添加一对由 COM1 和 COM2 组成的虚拟串口;3)启动 Proteus 的串口仿真;4)启动 VB-Serial。在其上发送字节数据,观察信道是否通畅?如果畅通,COMPIM上的指示灯 RXD 和 TXD 会闪一闪红光。5. 测试结果报告附件 1 单片机 ATMEGA16 的 ICC-AVR 程序代码/ICC-AVR a

9、pplication builder : 2014-8-1 18:24:54/ Target : M16/ Crystal: 8.0000Mhz#include #include unsigned char num;void port_init(void);/UART0 initialize/ desired baud rate: 9600/ actual: baud rate:9615 (0.2%)/ char size: 8 bit/ parity: Disabledvoid uart0_init(void)UCSRB = 0x00; /disable while setting baud

10、 rateUCSRA = 0x02;UCSRC = BIT(URSEL) | 0x06;UBRRL = 0x67; /set baud rate loUBRRH = 0x00; /set baud rate hiUCSRB = 0x98;unsigned char USART_Receive( void )7/* 等待接收数据*/while ( !(UCSRA /* 从缓冲器中获取并返回数据 */return UDR;void transmit_byte(unsigned char data)while ( !(UCSRA /* wait for empty transmit buffer *

11、/UDR = data; /* start transmittion */#pragma interrupt_handler uart0_rx_isr:12void uart0_rx_isr(void)/uart has received a character in UDRnum= UDR; /* read the received data */ transmit_byte(num);/call this routine to initialize all peripheralsvoid init_devices(void)/stop errant interrupts until set

12、 upCLI(); /disable all interruptsport_init();uart0_init();MCUCR = 0x00;GICR = 0x00;TIMSK = 0x00; /timer interrupt sourcesSEI(); /re-enable interrupts/all peripherals are now initialized/void main(void)init_devices();/insert your functional code here.while(1);8附件 2 VB 程序代码Option ExplicitPrivate Sub c

13、mdPortNo_Click()On Error GoTo errHandlelblSetting = “If MSComm1.PortOpen Then MSComm1.PortOpen = FalseMSComm1.CommPort = txtPortNoMSComm1.PortOpen = TruelblSetting = MSComm1.CommPort & “: “ & MSComm1.SettingserrHandle:If Err = 8005 ThenlblSetting = “串口“ & MSComm1.CommPort & “已经被占用!“End IfEnd SubPriv

14、ate Sub Form_Load()On Error GoTo errHandleMSComm1.CommPort = InputBox(“PortNo=?“, “Enter PortNo“, “2“)MSComm1.PortOpen = TrueMSComm1.RThreshold = 1MSComm1.InputMode = comInputModeBinarylblSetting = MSComm1.CommPort & “: “ & MSComm1.SettingserrHandle:If Err = 8005 ThenlblSetting = “串口“ & MSComm1.Comm

15、Port & “已经被占用!“End IfEnd SubPrivate Sub MSComm1_OnComm()Dim in_byte() As ByteIf MSComm1.CommEvent = 2 Thenin_byte() = MSComm1.InputtxtRcv = in_byte(0)End IfEnd SubPrivate Sub txtSend_Change()Dim out_byte(0) As BytetxtSend = Abs(Val(txtSend) Mod 256)out_byte(0) = txtSend9MSComm1.Output = out_byte()End SubPrivate Sub txtSend_KeyPress(KeyAscii As Integer)If KeyAscii = 13 ThenDim out_byte(0) As BytetxtSend = Abs(Val(txtSend) Mod 256)out_byte(0) = txtSendMSComm1.Output = out_byte()End IfEnd Sub

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。