|
使用Proteus仿真AT89C51的串口时,发送数据正常,可是怎么也接收不到数据吗,怎么回事!
[复制链接]
我使用串口虚拟软件虚拟了一对物理上连通的串口COM3, COM4,在Proteus里面的COMPIM里面使用的是COM3,在串口调试助手里面使用的是COM4.当单片机给PC的COM4发送数据时,串口调试助手上面正常接收并显示到接收文本框里。
但是,当使用串口调试助手向Proteus里面的虚拟部分发送数据时,Proteus里面没有任何反应,我在Proteus里面使用示波器测量了一下,当PC的串口调试助手向下发送数据时,示波器里面有波形的变化,单片机就是不做任何反应,这个是为什么呢!代码是Copy的网上的!
- #include
- #include "type_wb.h"
- #include "hd44780.h"
- #define BUFFERLEGTH 10
- //-----------------------------------------------------------------
- void UART_init(); //串口初始化函数
- void COM_send(void); //串口发送函数
- char str[20]="hello\r\n";
- //-------------------------------------------------------------------
- void main(void)
- {
- unsigned char i;
- UART_init(); //初始化串口
- Init_HD44780();
- LCD_puts( 0, 0, "ALL Init 1", 10 );
- for(i = 0;i < 10 ;i++)
- {
- COM_send(); //首先发送一次数据作为测试用
- }
- while(1);
- }
- //-------------------------------------------------------------
- //--------------------------------------------------------------------------------------------------
- // 函数名称: UART_init()串口初始化函数
- // 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
- // 串口接收中断允许,发送中断禁止
- //--------------------------------------------------------------------------------------------------
- void UART_init()
- {
- //初始化串行口和波特率发生器
- SCON =0x50; //选择串口工作方式1,打开接收允许
- TMOD =0x20; //定时器1工作在方式2,定时器0工作在方式1
- TH1 =0xfA; //实现波特率9600(系统时钟11.0592MHZ)
- PCON = 0x80;
- TR1 =1; //启动定时器T1
- ET1 =0;
- ES=1; //允许串行口中断
- PS=1; //设计串行口中断优先级
- EA =1; //单片机中断允许
- }
- //------------------------------------------------------------
- void COM_send(void)
- {
- unsigned char point = 0;
- for(point=0;point< 20;point++) //连续发送二十位数据 //把缓存区的数据都发送到串口
- {
- SBUF=str[point];
- while(!TI);
- TI=0;
- }
- }
- //--------------------------------------------------------------
- //--------------------------------------------------------------------------------------------------
- // 函数名称: com_interrup()串口接收中断处理函数
- // 函数功能: 接收包括起始位'S'在内的十位数据到数据缓冲区
- //--------------------------------------------------------------------------------------------------
- void com_interrupt(void) interrupt 4 using 3
- {
- unsigned char RECEIVR_buffer;
- if(RI) //处理接收中断
- {
- RI=0; //清除中断标志位
- RECEIVR_buffer=SBUF; //接收串口数据
- LCD_puts( 1, 0, "data arrive", 11 );
- if (RECEIVR_buffer == 's')
- {
- SCON =0x40; //接收不允许
- COM_send(); //发送数据
- SCON =0x50; //接收允许
- }
- }
- }
复制代码
|
|