![]() |
發布時間: 2019-7-21 22:36
正文摘要:我是看郭天祥的視頻學習的,今天學了串口調試,利用串口助手輸入來控制LED,并返回輸入的值,但是當我輸入16進制7F時,單片機開發板上的LED不亮,并且輸出也不是7F,一直是FF或者BF,請問一下這是什么原因???&nbs ... |
論壇好像沒幾個人一樣,都是幾個人問答; |
采用波特率的計算方式 |
串口的波特率是不是依賴于它串行移位的CLK? 如果是,這個CLK又是誰產生的呢? |
/************************************************************************************** * 串口通信實驗 * 實現現象:下載程序后打開串口調試助手,將波特率設置為9600,選擇發送的數據就可以顯示 在串口助手上。晶振為11.0592MHz 注意事項:無。 ***************************************************************************************/ #include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器 typedef unsigned int u16; //對數據類型進行聲明定義 typedef unsigned char u8; /******************************************************************************* * 函數名 :UsartInit() * 函數功能 :設置串口 * 輸入 : 無 * 輸出 : 無 *******************************************************************************/ void UsartInit() { SCON=0X50; //設置為工作方式1 TMOD=0X20; //設置計數器工作方式2 PCON=0X80; //波特率加倍 TH1=0XFa; //計數器初始值設置,注意波特率是9600的 TL1=0XFa; ES=1; //打開接收中斷 EA=1; //打開總中斷 TR1=1; //打開計數器 } /******************************************************************************* * 函 數 名 : main * 函數功能 : 主函數 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void main() { UsartInit(); // 串口初始化 while(1); } /******************************************************************************* * 函數名 : Usart() interrupt 4 * 函數功能 : 串口通信中斷函數 * 輸入 : 無 * 輸出 : 無 *******************************************************************************/ void Usart() interrupt 4 { u8 receiveData; receiveData=SBUF;//出去接收到的數據 RI = 0;//清除接收中斷標志位 SBUF=receiveData;//將接收到的數據放入到發送寄存器 while(!TI); //等待發送數據完成 TI=0; //清除發送完成標志位 } 你參考一下,注意編譯軟件的晶振和開發板的晶振一致。祝你成功 |
yzwzfyz 發表于 2019-7-22 08:14 利用視頻里講解的計算公式:(2的SMOD次方/32)*(T1的溢出率) |
你的程序里面有串口的設置嗎? 波特率設置呢? |
程序中波特率是如何計算出來的呢? |