Ⅰ STC單片機串口通信問題!
只能說提醒,
你用的晶元是stc12系列的晶元,但是你的頭文件是reg51.h
你這樣編譯都能通過的嗎?
reg51.h裡面是標准51的寄存器,是只有1個串口的,
建議你去stc的官網把stc12系列的頭文件下載下來進行包含,如果你的程序沒錯的話,應該就可以用了
歡迎追問
Ⅱ stc單片機串口編程
連續發送多條字元串和一條字元串是一樣的。只不過是將多條字元串組合在一起發送而已。
Ⅲ STC單片機串口通信為什麼上電後會多發出一串位元組,後面的數據就一切正常了
STC單片機串口通信上電後會多發出一串位元組,後面的數據就一切正常了。
出現這種情況估計是你的單片機直接連到寫入器上了,由編程器直接供電,而單片機程序啟動階段沒有加延時。寫入器連接到USB口會有一個初始化過程,串口有數據輸出,被單片機誤接收了。
解決方法:
1、單片機程序啟動階段加1到2秒延時,躲過初始化數據。
2、單片機串口實行隊列接收,只有整個隊列符合特徵才發送。串口助手發送端按隊列發送。
3、單片機單獨供電。
Ⅳ STC單片機串口喚醒
低電平喚醒,高電平睡眠
也有周期性喚醒:
掉電模式可由外部中斷喚醒,如果將外部中斷信號由另外的CPU控制,則可以輕松實現定時喚醒動作。
例如:STC12C系列晶元的孫宏掉電定時喚醒,STC官方給伍橋了一個參考電路,是通過R、C充放電的原理來實現定時則橘冊的。 具體如下圖:
Ⅳ 什麼是STC單片機
STC系列單片機是宏晶科技生產的單時鍾/機器周期(1T)的單片機。
它是高速/低功耗/超強抗干擾的新一代8051單片機,指令代碼完全兼容傳統8051,但速度快8-12倍。內部集成MAX810專用復位電路,2路PWM,8路高速10位A/D轉換(250K/S),針對電機控制,強干擾場合。
這種工藝的存儲器用戶可以用電的方式瞬間擦除、改寫。而且STC系列單片機支持串口程序燒寫。顯而易見,這種單片機對開發設備的要求很低,開發時間也大大縮短。寫入單片機內的程序還可以進行加密。
(5)stc單片機串口擴展閱讀
單片機技術的開發
(1)CPU開發。
開發單片機中的CPU匯流排寬度,能夠有效完善單片機信息處理功能緩慢的問題,提高信息處理效率與速度,開發改進中央處理器的實際結構,能夠做到同時運行2-3個CPU,從而大大提高單片機的整體性能。
(2)程序開發。
嵌入式系統的合理應用得到了大力推廣,對程序進行開發時要求能夠自動執行各種指令,這樣可以快速准確地採集外部數據,提高單片機的應用效率。
(3)存儲器開發。
單片機的發展應著眼於內存,加強對基於傳統內存讀寫功能的新內存的探索,使其既能實現靜態讀寫又能實現動態讀寫,從而顯著提高存儲性能。
(4)計算機開發。
進一步優化和開發單機片應激即分析,並應用計算機系統,通過連接通信數據,實現數據傳遞。
Ⅵ STC單片機串口接收發送函數,我想讓單片機把程序中的字元串只發送一次。
你沒有利用串口中斷,未定義串口中斷處理函數,所以不應當開放 ES =1;
置 ES=0; 使之不產生串口中斷事件,但並不等於不會置串口發生標志 TI
程序有幾個可疑的位置 ,
1.你用uchar * 來指向uchar code* 這個可能念祥有問題
2.設ES = 1; 會在TI被置1時CPU控制權會跳到串口向量,但你未定義串口中斷函數
3.程序就算能薯高仔發送,也只在單片機開機那一小會,你看不到很正常,應當改成由開關按據觸發,按一次,發一回,這樣,你就可以有時間來數汪監測有沒有發生串口信號了。
Ⅶ stc8h單片機串口通訊數據不發送
stc8h單片機串口通訊數據不發送如果都配置檢測沒什麼問題,能夠正常的發送數據但是不能夠接收數據的話就要考慮是不是IO沒有配置好。將指指基RX的埠配置成設置I/O口為准雙向口模式,唯謹再次逗好進行嘗試。
Ⅷ STC單片機 串口通信 奇偶校驗
1、51單片機SCON=0xDA,工作在方式3.(方式2也可以)
串口 1 模式 3:
波特率是可變的,其它和模式2 相同
11 位數據通過TxD/P3.1 發送,通過RxD/P3.0 接收。一幀數據包含一個起始位(0),8 個數據位(低位在
先),一個可編程的第9 位,和一個停止位(1)。發送時,第9 位數據位來自特殊功能寄存器SCON 的
TB8 位.接收時,第9 位進入特殊功能寄存器SCON 的RB8 位。
SMOD
串口1波特率在模式3 = ( 2 / 32 ) x BRT獨立波特率發生器的溢出率
當SMOD = 0時,串口1波特率 = BRT 獨立波特率發生器的溢出率 / 32,
當SMOD = 1時,串口1波特率 = BRT 獨立波特率發生器的溢出率 / 16,
BRT獨立波特率發生器的溢出率 = Fosc/12/( 256 - BRT ),當BRTx12 = 0時,
BRT獨立波特率發生器的溢出率 = Fosc / ( 256 - BRT ),當BRTx12 = 1時
TB8:發送時校驗位,可以奇校驗或偶校驗(直接置0或1),然後再發送。
RB8:接收時校驗位,判斷接數據是否正確。
2、程序
/*****************************************
*串口1中斷
*****************************************/
void RXD_Int_Service() interrupt 4
{
uint8 ch;
if(RI)
{
RI=0;
Usart1.RxdDly=6; //超過0.3S清空計數
Usart1.RxdBuf[Usart1.RxdCnt]=ch;
Usart1.RxdCnt++;
if(Usart1.RxdCnt>=10)
{
Usart1.RxdTrue=1; //接收正確。
Usart1.RxdNum=Usart1.RxdCnt;
Usart1.RxdCnt=0;
}
}
if(TI)//防止發送中斷
{
TI=0;
}
}
void Timer0_InSevice() interrupt 1
{
TH0=0xdc; //定義50ms 正常值0xfe 0x0c ,修正值:0xfe 0x16;
TL0=0x00; //11.0592MHz晶振
if(Usart1.RxdDly)
{
Usart1.RxdDly--; //0.3S沒有接收到數據,清0計數。
if(Usart1.RxdDly==0)
{
Usart1.RxdCnt =0; //記數清0.
}
}
}
Ⅸ STC單片機串口接收程序
一組數據,共有多少位元組? 20 個?
根據位元組數,設定一個數組。
收到一個,存放一個。
收到 20 個後,判斷:
if (recbuf[16] == 'm' && recbuf[17] == 'b' && recbuf[18] == 'a' && recbuf[19] == 'r')
滿足條件,就把其前面的,變換成數:
//recbuf[1] = '.';
x = (recbuf[0] - 48) + (recbuf[2] - 48) * 0.1 + (recbuf[3] - 48) * 0.01;
//recbuf[4] = ' ' //recbuf[7] = '.'
n = (recbuf[5] - 48) * 10 + (recbuf[6] - 48) + (recbuf[8] - 48) * 0.1;
//recbuf[9] = ' ' //recbuf[13] = '.'
p = (recbuf[10] - 48) * 100 + (recbuf[11] - 48) * 10 + (recbuf[12] - 48)
+ (recbuf[14] - 48) * 0.1 + (recbuf[15] - 48) * 0.01;
Ⅹ stc單片機串口的問題,發麻廣大網友來幫幫忙
你研究的夠深入啊,我覺得御早悉這個是由硬體自動完成的,軟體方面只管按照規則執行就是了,硬體功能多,軟體方面寫起來就方便鎮乎,硬體功能弱,就得睜漏開銷軟體資源了。