① 單片機虛擬終端輸入與顯示不匹配
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;
}
}
}