A. 单片机虚拟终端输入与显示不匹配
virtual terminal 默认显示字符,如果单片机发送的是非显示字符,则虚拟终端不会显示,会导致用户认为通讯未通。运行程序,在虚拟终端窗口里面点击右键,在弹出菜单里面:选HEX DISPLAY MODE,则显示按十六进制显示,能显示所有字符。2.virtual terminal 默认情况下不显示回显字符,运行程序,在虚拟终端窗口里面点击右键,在弹出菜单里面:选Echo Typed Characters 显示回显字符3.virtual terminal 和模拟物理串口COMPIM不能同时使用,同时使用会发生相互影响。
二、Proteus 虚拟终端显示不正确,16进制没有显示出0x90,0x30,0x64
void main()部分,在while循环中不断调用下面的两行代码。send(0x90,0x30,0x64);send(0x80,0x30,0x40);void send(uchar cc,uchar kk,uchar vv){TR1=1; SBUF=cc;while(TI==0);TI=0;SBUF=kk;while(TI==0);TI=0;SBUF=vv;while(TI==0);TI=0;TR1=0; //发送函数}晶振和51单片机都是11.0592,MHZ的。到底哪出错?send函数是串口依次发送出0x90,0x30,0x64
三、怎么用proteus里的虚拟终端给单片机发送字符,在窗口里打字符没有反应啊
proteus仿真虚拟终端时,要注意虚拟终端与单片机RXD,TXD要交叉连接,单片机的晶振频率改为11.0592M。测试时,可以在P1口放两个BCD数码管显示接收的数据。
四、单片机proteus虚拟终端里只能显示符号?
proteus里的虚拟终端与电脑上的超级终端是一样的,只能显示ASCII字符,用单片机发送时,不能发送十六进制数,十六进制数小于20H是不显示的,从20H开始才能显示的,例如发送0x30~0x39,就是显示0~9这十个数字。要显示字母,要发送字符或字符串,例如,发单个字母,SBUF= A 才能显示字母A。如果是发一串字符串,应该先声明一个字符串再发送,例如,unsigned char str[ ]= HELLO 2020yea! 然后就可以发字符串了,才能显示出这个字符串。追问
但是显示出
B. 利用串口实现单片机与PC超级终端通信
标准串口参考程序如下:(来源周立功单片机公司)具有一般参考意义。
#include<reg51.h>
unsigned char UART_RX; //定义串口接收数据变量
unsigned char RX_flag; //定义穿行接收标记
/*********************************************************************************************
函数名:UART串口初始化函数
调 用:UART_init();
参 数:无
返回值:无
结 果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
备 注:振荡晶体为12MHz,PC串口端设置 [ 4800,8,无,1,无 ]
/**********************************************************************************************/
void UART_init (void){
EA = 1; //允许总中断(如不使用中断,可用//屏蔽)
ES = 1; //允许UART串口的中断
TMOD = 0x20; //定时器T/C1工作方式2
SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
TH1 = 0xF3; //定时器初值高8位设置
TL1 = 0xF3; //定时器初值低8位设置
PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400)
TR1 = 1; //定时器启动
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:UART串口接收中断处理函数
调 用:[SBUF收到数据后中断处理]
参 数:无
返回值:无
结 果:UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去)
备 注:过长的处理程序会影响后面数据的接收
/**********************************************************************************************/
void UART_R (void) interrupt 4 using 1{ //切换寄存器组到1
RI = 0; //令接收中断标志位为0(软件清零)
UART_RX = SBUF; //将接收到的数据送入变量 UART_data
RX_flag=1; //标记接收
//用户函数内容(用户可使用UART_data做数据处理)
//SBUF = UART_data; //将接收的数据发送回去(删除//即生效)
//while(TI == 0); //检查发送中断标志位
//TI = 0; //令发送中断标志位为0(软件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:UART串口发送函数
调 用:UART_T (?);
参 数:需要UART串口发送的数据(8位/1字节)
返回值:无
结 果:将参数中的数据发送给UART串口,确认发送完成后退出,采用非中断方式
备 注:
/**********************************************************************************************/
void UART_T (unsigned char UART_data){ //定义串口发送数据变量
ES=0; //禁止穿行中断
SBUF = UART_data; //将接收的数据发送回去
while(TI == 0); //检查发送中断标志位
TI = 0; //令发送中断标志位为0(软件清零)
ES=1; //打开穿行中断
}
/*********************************************************************************************
函数名:UART串口发送字符串函数
调 用:UART_S (?);
参 数:需要UART串口发送的数据(8位/1字节)
返回值:无
结 果:将参数中的数据发送给UART串口,确认发送完成后退出,采用非中断方式
备 注:
/**********************************************************************************************/
void UART_S(unsigned char *str)
{
while(1)
{
if(*str=='\0') break;
UART_T(*str++);
}
}
/*********************************************************************************************
函数名:主函数
调 用:main();
参 数:
返回值:无
结 果:
备 注:
/**********************************************************************************************/
void main()
{
unsigned char Buf_data[]={" welcome to MCU world. \n\r"};
UART_init();
UART_S(Buf_data);
while(1){
if(RX_flag==1)
{
UART_T(UART_RX);
RX_flag=0;
}
}
}
///////////////////////////////////////////////////////////////////
个人认为普通单片机在通信频率上及不上AVR单片机,更可能使用USB转串口工具进行开发,所以串口波特率不能过高,最好是2400或4800。过高只会导致乱码或丢失。而楼主的中断服务程序也不正确,设计缺乏经验,所以需要继续努力。
C. 51单片机怎么串口发送汉字给超级终端
51单片机,先后发送两个字节,即可发出一个汉字。
超级终端,收到后,自然,就能显示出来对应的汉字。
D. 如何使用widows自带的超级终端
在调试MCU系统时,我们常用widows自带的超级终端来做为显示。
通过点击开始→程序→附件→通讯中的超级终端,我们可以打开一个新的 终端。然后设置好名称,选择好端口(如COM1),波特率(即每秒位数), 数据位(通常选择8位),奇偶校验(一般选择无),停止位,数据流控制(
一般选择无),然后就可以开始使用超级终端了。用键盘直接在超级终端输入
字符,就会通过串口发送出去,在没有设置回显时,输入的是看不到的。 将串口的2脚(即数据接收端)跟3脚(即数据发送端)连接在一起,再敲 键盘,就会发现按下的键显示在上面了,这样可以用来检测串口是否工作正 常。将单片机的串口通过232电平转换后连接到PC的串口上,就可以通过 超级终端来显示信息和发送命令了。
超级终端是windows自带的一个串口调试工具,其使用较为简单,被广泛使用在串口设备的初级调试上。
下面介绍一下一般使用的步骤:
配置连接需要调试串口基本参数,其操作为: 1) 选择菜单“文件”下“属性”菜单项。
2) 配置调试设备所连接串口“连接时使用”
wk_ad_begin({pid : 21});wk_ad_after(21, function(){$('.ad-hidden').hide();}, function(){$('.ad-hidden').show();});
3) 按“配置”按钮进行配置选定串口信息
4) 依次选定每秒位数(波特率)等参数,一般情况下MODEM设置波特率后即可,其它位取默认设置。
5) 确定退出配置
6) 按工具条上“呼叫”按钮连接所调试设备
7) 输入英文字母AT然后回车,此时如果设置正确,则会返回英文字母OK
) 如果参数设置不正确,则提示无法连接,或者连接后无法输入AT字母,此时,请确认步骤2)中串口选择正确、请确认波特率设置正确。
9) 大部分GPRS MODEM出厂的时候其波特率已经设置为115200,但是也可能部分设置为9600或者其它。在MODEM支持的范围内,越高的波特率代表了越高的计算机传输数据到MODEM的能力。 常用的几个AT命令 1) AT
测试指令,返回OK表示串口设备正常 2) AT+CGMM
显示MODEM型号 3) AT+CGMR
显示MODEM软件版本号 4) AT+CGMI 显示MODEM生产厂家
5) AT+IPR=?/AT+IPR?/ AT+IPR=115200
前者查询MODEM支持的所有波特率,后者显示当前设定波特率,最后一条是设置MODEM波特率为115200。
E. 从超级终端和串口调试助手发送相同的信息到单片机,但超级终端和串口调试助手返回的信息却不一样
这两个软件原理不一样,单片机应该和超级终端比较匹配吧!
超级终端的原理
超级终端的原理是将用户输入随时发向串口(采用TCP协议时是发往网口,这里只说串口的情况),但并不显示输入。它显示的是从串口接收到的字符。所以,嵌入式系统的相应程序应该完成的任务便是:
1、将自己的启动信息、过程信息主动发到运行有超级终端的主机;
2、将接收到的字符返回到主机,同时发送需要显示的字符(如命令的响应等)到主机。
串口调试助手的原理
一个很好而小巧的串口调试助手,支持常用的300-115200bps波特率,能设置校验、数据位和停止位,能以ASCII码或十六进制接收或发送任何数据或字符(包括中文),可以任意设定自动发送周期,并能将接收数据保存成文本文件,能发送任意大小的文本文件。
当然了,还有其它版本的相同功能的工具,也都叫 串口调试助手例如:
超级终端一般用于ASCII收发,并你按一个键该字符立刻发送,同时不会显示回车键;串口调试助手在你写完命令后还应加一个回车字符,而键盘上没有回车字符,这样你就必须有二进制方式。