① 单片机虚拟终端输入与显示不匹配
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! 然后就可以发字符串了,才能显示出这个字符串。追问
但是显示出
② 用C语言编程51单片机时候让程序返回到指定位置用什么语句
还是循环,需要循环几次用的i++
或者这样不就回去了吗?
while(1)
{
P0 = 0xFE;
for(i = 0;i < 60000;i++);
P0 = 0xFB;
for(j = 0;j < 30000;j++);
P0 = 0xFD;
}
③ 急啊,各位大侠帮忙啊,今天在调试郭天祥的十天学会单片机视频中的程序,最后有一个可以向单片机输入数据
试试这样,其它不用改。
voidmain()
{
TMOD=0x20;//设置定时器1为工作方式2
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
//REN=1;
//SM0=0;
//SM1=1;
EA=1;
ES=1;
……
④ 我用lpc900系列的单片机,怎么用一组如八位p0口,加2个位选,来控制两个共阳极的七段led,是从00-90来回显
p0做数据用,cs_1和cs_2做led的选择。共阳的就是输出低电平有效。然后,在程序里边做个计数器count,count从00-->90-->00循环加,每加到一个数,分别用count/10和count%10得到个位和十位的数字,比如count=90,那么个位就是0,十位就是9。然后就是分别先后把cs_1=0,p0的值为要显示的数的段码,然后cs_1=1;接着cs_2=0,p0的值为要显示的数的段码,然后cs_2=1;计数周期和两个数码管显示的时间间隔可以添加适当的延时。大概思路就是这样
⑤ 用串口调试助手给单片机发送一串字符串,单片机接受完之后向串口助手回显,出现了个神奇的问题,求助
发送函数中,这样写,防止TI还未来得及置为1,就一直在发送,这样写可防止上述情况
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit D0=P1^0;
uchar flag;
uchar a[30];
uint y, u,c;
/*发送子程序*/
void fasong(uchar dat)
{
ES=0;
SBUF=dat;
while(!TI);
TI=0;
ES=1;
}
/*延时子程序*/
void delay(uint n)
{
uint i,j;
for(i=0;i<n;i++)
{
for(j=0;j<250;j++);
}
}
/*主程序*/
void main()
{
SM0=0;//选择工作方式一
SM1=1;
TR1=1;
REN=1;
TMOD=0X20;//设置定时器1为工作方式2
TH1=0XFD;
TL1=0XFD;//设置波特率为9600
EA=1;//开CPU中断
ES=1;//开串行口中断
delay(1000);
D0=0;
while(1)
{
while(flag)
{
y=0;
while(a[y]!='\0')
{
fasong(a[y]);
a[y]='\0'; //清空字符,方便下次接收
y++;
}
y=0;
flag=0; }
}
}
void jsfs() interrupt 4
{
c=0;
u=1000;
ES=0;
while(u--) //一直接收 直到字符串接收完毕
{
while(RI)
{
a[c]=SBUF;
c++;
RI=0;
u=1000;
}
}
ES=1;
flag=1;
}
⑥ 本人有一块单片机开发板,通过上位机向单片机发送指令读写指令,单片机解析指令并产生回显。
注意一下双方波特率是否一致,约定的通讯协议是否一致
⑦ 51单片机如何用C程序中的_crol_和_cror_实现流水灯来回显示
for(i=0;i<8;i++)
{
P2=(1<<i);
delay();
}
for(i=0;i<8;i++)
{
P2=(1<<(7-i));
delay();
}
用个移位处理就行了 set(void) { 流水灯.c * 描述 : 该程序实现LED的流水灯显示。 该程序用于学习 LED流水本例中是调用的 intrins.h 中
程序利用循环移位函数_crol_和_cror形成来回滚动的效果 #include #include #define ... R17 220R //名称:花样流水灯//说明:16 只LED 分两段组按预设的多种花样变换显示
⑧ 求一个基于STC15F2K60S2单片机的秒表程序,4位数码管要求能回显5个计数
这是做实物吗?
那得有电路图的,否则怎么写程序?
没有实物板,也不能调试程序的,写完了,需要不断调试的,不可能写一遍就行的。
⑨ 用串口调试助手给单片机发送一串字符串,单片机接受完之后向串口助手回显,但出现勒问题,求大神帮忙
#include <reg52.h>
#include <intrins.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp,pget,pput,shu[16];
uint uart;
inits(void)
{ //波特率115200
T2MOD=0x01;
T2CON=0x30;
TH2=0xff;
TL2=0xfd;
RCAP2H=0xff;
RCAP2L=0xfd;
SCON|=0x50;
TR2=1;
EA=ES=1;
}
t1int() interrupt 3
{
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
uart++;
}
serial() interrupt 4
{
if(RI==1)
{
RI=0;uart=0;
shu[pput]=SBUF;
pput++;
pput&=0x0f;
}
}
main()
{
EA=ET1=TR1=1;
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
TMOD=0x10;
pput=pget=0;
inits();
while(1)
{
if(uart>100)
{
if(pput!=pget)
SBUF=shu[pget];
pget++;
pget&=0x0f;
}
}
}