❶ 51單片機與PC串口通信程序,求指導 ! 具體要求如下:
功能如下:
1、程序燒進去,串口接收顯示一個菜單!《如圖》A、B、……分別代表一定的功能
例如:A項,代表修改ds1302的時間的數組
2、按照菜單的提示,如:發送A就進入了修改ds1302的時間函數,串口接收界面顯
示 A,像圖片那種,並顯示修改ds1302的操作方法,如從串口發送界面發送
0162115347就表示10年10月16日21時15分34秒星期7,
3、正如第二所說,馬上輸入1010162115347,就成功的修改了ds1302相關數據,
並返回change success!到串口界面!
4、設置一個功能就是返回主菜單界面。然後又可以就行第二、三步的操作!
5、通過串口,讀取單片機裡面相關的數據,如時鍾的數據
6、說明:可以不要ds1320相關的程序,可以用發光二極體亮來代表修改功能!
❷ 51單片機與PC的通信
1、PC端重新打開串口後數據發生變化,應該是PC端程序或者硬體的問題;
2、如果要實現收到指令後,開始發送,那麼單片機端應該有一個收串口數據的過程。指令可以自己定義,比如5個0。檢測到接受的數據中有匹配的指令後開始發送數據。
❸ 51單片機實戰:與計算機非同步串列通信
猴!今兒扯串口,相對於並行——一口氣全把數據扔過去,串列顯得更加穩重——一位一位來。
串列就是這樣,只需要一條數據線(全雙工和同步串列時兩條),一位一位的傳過去。為了讓大家在直到你是在給我傳數據而不是外面的噪音或者是胡說八道,所以串列數據的各位要組裝幀(看正文中的 幀格式 )。乍一看,這種方式跟並行比肯定慢的一腿。但實際上,多虧了它的穩定性,可以在波特率極高的情況下依然保持穩定,這是並行所辦不到的(傳的快了或距離遠了就張牙舞爪了),所以發展到現在,串口已經把並口甩走幾條街啦。
並口傳輸的例子: 《51單片機實戰:液晶顯示器のLCD1602》
除此之外,串列傳輸分同步和非同步。同步除了傳輸數據外,還要傳輸時鍾信號,以保持雙方同步。另一種,非同步,就沒這么麻煩了,也是本例中要講到的,各自走各自的時鍾就好,只要幀格式和波特率都商量好是一樣的就好。
電平之前在文章 《51單片機實戰:液晶顯示器のLCD1602》 中介紹過,那裡只說了TTL,本例中由於要和計算機打交道,所以多了一種電平:RS-232C
在單片機中是TTL,電腦那邊傳出和接收都是RS232,所以兩種電平需要作轉換。
當當當!它就是干這活的。
舉個栗子,比如單片機從T1IN輸入TTL電平,轉換好的RS232電平就從R1OUT輸出。其他的照貓畫虎,這里不詳細說這個東西,因為咱們在Proteus里幹活,用不著轉換(Proteus光環)。
在此描述串列傳輸數據速率。
正兒八經的說,波特率乃 碼元 的傳輸速率,即每秒傳輸的碼元個數(碼元可以是任意進制的),並不是什麼每秒傳輸的比特數,大家注意。
波特來源於一個人的名字: Jean-Maurice-Émile Baud ot ,因此簡寫為Baud,單位符號:Bd。波特率可簡寫成Bd/s。
在串口通信中,其碼元就是二進制信號,所以波特率的數值等於比特率數值,但你不能說波特率就是比特率啊!
單片機的串口通信有四種方式(各方式具體是干什麼的,別著急,在後面),其中方式0和方式2的波特率是固定的。方式1和方式3的波特率是可變的,其脈沖周期由定時器1溢出產生。
其中 f 是系統晶振頻率,T1是計時器1, SMOD 是PCON中的最高位(PCON見相關寄存器的第一個)。
可以從上述公式看出,波特率不可變是因為直接與系統晶振頻率相關(晶振頻率不可變,除非換晶振),而可變是因為直接與T1的溢出率相關(溢出率可以改變)。
溢出率
在之前定時器應用的例子( 《51單片機實戰:定時器與數碼管的應用》 )中,我們計算的是溢出周期,也就是多長時間會溢出一次。這次我們用到的溢出率其實是同一個東西,取倒數就可以了。
詳見: 《51單片機實戰:定時器與數碼管的應用》 - 知識點 - 定時器/計數器 - 初值
11.0592MHz
為什麼要用這么蹩腳的數字作晶振頻率哈,就是跟這里有關。如果你已經用上述公式計算過串口方式1下的12MHz和11.0592MHz在9600波特率下的定時器初值,你就會發現,前者得出一個小數,而後者是個整數。
我們可沒辦法用小數賦初值,所以你若用近似的整數作初值,就意味著會產生誤差。
若用其他的晶振和波特率的話,請自行按前面的公式計算。
串列傳輸按比特來,一個個比特組成一個幀,幀需要一定的格式才能被雙方識別這是一個幀信息。
電源管理 寄存器,用於管理單片機的電源部分。
位元組地址: 87H ,不能位定址, reg52.h 中已定義,單片機復位時全部清零。
上表中出現的「串口方式」見下表的SM0和SM1。
串口控制 寄存器,用於設定串口工作方式。
位元組地址: 98H ,可位定址, reg52.h 中已定義,單片機復位時全部清零。
上表中波特率可變的方式,都由定時器1的溢出率控制。
當單片機接收到字元 a 時,點亮一個LED燈。傳送方式:9600波特率,8數據位,無校驗位,1停止位。
本例中我就不寫電腦端程序了,直接用現成的。
注意,這裡面我沒有放轉換電平轉換晶元(MAX232),只有在Proteus里可以這么干,現實中焊板子還是要做電平轉換的,這里這個軟體給簡化了。
COMPIM
虛擬終端
右下角那個東西是虛擬終端(Virtual Terminal),他可以直接截獲串口傳來的消息然後顯示出來。很方便做這方面調試時使用。
路徑: 邊欄 → instruments → virtual terminal
如果在調試的時候不小心把它的終端窗口關了,再次打開路徑: 菜單 → debug - virtual terminal ,注意是在啟動調試的情況下。
大年初二,拜訪完姥姥家就該看看單片機怎麼玩,你說是吧!這兩天快馬加鞭了,下一站:一周目大BOSS。各位加油。
❹ 利用串口,51單片機與電腦間的通信怎麼做
用UART非同步串列通信方式
51串列口有4種工作方式,在串列口的4種工作方式中,方式0主要用於擴展並行I/O口,方式1、2、3則主要用於串列通信。
PC機的串列介面為RS232形式的介面,其高低電平的規定與單片機所規定的TTL電平不同,所以單片機上也必須有232介面,可直接選用232介面晶元例如MAX232,還要准備"串口調試助手"這一軟體。
MAX232是一個電平轉換晶元。單片機的TXD端接MAX232的11腳,RXD端接MAX232的12腳。電腦上RS232的2腳接MAX232的14腳,3腳接MAX232的13腳,RS232的5腳接地。
❺ 編程實現51單片機與PC的串口通信,要求波特率設置為9600,循環發送字元串「abc
#include "reg51.h"
void initUart(void)
{
TMOD|=0x20;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
void main(void)
{
initUart();
EA=1;
while(1)
{
send_byte('abc');
}
}
❻ PC與51單片機通信的時候,想讓PC串口只有TXD和RXD工作,應該怎樣設置
pc是232串口
最少3根線啊
一發一收
還有地
,單片機是ttl電平的串口,得加個max232的晶元才能跟pc通訊,設置上用vb很簡單,串口控制項,直接指定串口號,波特率,數據位,校驗,停止位就可以了。
❼ 51單片機與pc通信,波特率是2400倍增的可以准確的發送和收回數據,其他波特率都不能正確的發送和收回數據
串列通信的波特率一般都取2400的整數倍。
PC機上串口的波特率也是按這個取值的。
如下圖,這是超級終端的波特率取值。
而對於單片機,需要串口通信時,晶振頻率通常取11.0592MHz,或者2倍。取這個值的目的就是計算出的串口通信的波特率誤差幾乎為0。而取其它頻率就有誤差。同時,晶振取這個值,波特率也要取2400的整數倍,波特率誤差才幾乎為0。這兩個值有一個不滿足,實際的波特率都會有變誤差。因為,串口通信是兩者的非同步通信,如果兩者的波特率不相同,就無法正確通信的。
這就是串口通信波特率不能任何取值的原因。
❽ 51單片機和PC串口通信問題
這個不是通訊問題。
發送過來的實際編碼應該都是一樣的,但因為在單片機通訊中,中文占兩個字元(BYTE),英文和數字佔一個位元組,在英文和中文混排的時候,部分軟體的顯示功能對中文顯示不給力(其實這是在BOM和UNICODE等技術出現之前,中文系統的通病),尤其是當中文之前的英文為單數個的時候,經常容易顯示為亂碼。因此才有了各種多國語言規范,防止混排出現亂碼的問題。
簡單的說,就是編碼顯示問題,你的通訊接收應該都是正確的。
❾ 51單片機用串口跟pc通信進行收發數據
//代碼來自單片機小精靈v1.3
//波特率960011.0592晶振方式2
#include<reg51.h>
voidInitUART(void)
{
TMOD=0x20;
SCON=0x50;
TH1=0xFD;
TL1=TH1;
PCON=0x00;
EA=1;
ES=1;
TR1=1;
}
voidSendOneByte(unsignedcharc)
{
SBUF=c;
while(!TI);
TI=0;
}
voidmain(void)
{
InitUART();
}
voidUARTInterrupt(void)interrupt4
{
if(RI)
{
RI=0;
//addyourcodehere!
}
else
TI=0;
}
❿ 用51單片機與PC進行通信,通過串口助手進行調試
首先檢測你的硬體電路。
方法是,拔掉你的單片機,把rxd和txd腳短路。然後在串口調試助手裡面,選任意波特率發送任意字元,如果收到的是發送的內容,則能肯定max232和rs-232之間連接正確。
接下來就要檢查你的程序了
最容易出問題的就是波特率了。
如果你用12m的晶振,那麼,最好設置波特率為1200
或
2400。