![]() |
發布時間: 2017-11-15 09:41
正文摘要:要求實現的功能是上電后始終發送01數據,但是單片機必須接受過才能發送,程序不長,求指點迷津。 #include <reg51.h> #define uchar unsigned char void InitUART(void) { TMOD = 0x ... |
好難 好難好難 |
你用的晶振是多少啊? |
GG276192978 發表于 2017-11-15 11:34 你試試 #include <reg51.h> void InitUART(void) { TMOD=0x20;//定時器1方式2(8位重載) TH1=0xfd;//定時器1重載 波特率9600 TL1=0xfd;//定時器1重載 TR1=1; //開定時器1 SM0=0; //設置串口方式1(8位UART波特率可變) SM1=1; //設置串口方式1(8位UART波特率可變) } void SendOneByte(void) { SBUF = 0x01; while(!TI); TI = 0; } void main(void) { InitUART(); while(1) { SendOneByte(); } } |
你用的是12T?波特率是多少? 你自己完整的程序發上來看看 |
lucyxi 發表于 2017-11-15 20:50 你這個 是哪里的 ? 看這數據幀也不想是協議里面的,難道是自己定義的么? 還有那個起始位都是0103開始,應該有規律,只是沒有參考數據 |
數據 : 0103 0000000000000000 1f 0103 0100000000000000 11 0103 0200000000000000 03 0103 0300000000000000 0d 0103 0400000000000000 12 0103 0500000000000000 1c 0103 0600000000000000 0e 求大佬 告知 算法 |
不大明白![]() |
我把你的程序燒寫進去后, 結果 如下: 01 40 01 40 01 40 01 40 01 40 01 40 40 40 40............后面一直都發送40,這是什么問題呢 |
我用11.0592M的晶振,我自己把程序改了,但是在正確接收到數據之前,前面一直有幾組數據幀是錯誤的。我查了資料說是串擾,可是我用的開發板有沒有引入其他信號,怎么會有串擾這個問題呢,很納悶求解答? 再請教一個問題,比如說我想只發一次,這個函數一直在循環,具體我要怎么處理 |
要求只發送特定的值,很簡單嘛。 在你的程序中,去掉中斷功能,串口中斷是為了接收而準備的。 你的程序我改為這樣,你試試: #include <reg51.h> void InitUART(void) { TMOD = 0x20; SCON = 0x50; TH1 = 0xFD; TL1 = TH1; PCON = 0x00; TR1 = 1; } void SendOneByte(void) { SBUF = 0x01; while(!TI); TI = 0; } void main(void) { InitUART(); while(1) { SendOneByte(); } } 我沒有檢驗你的波特率,因為你沒有告訴我硬件是怎么樣的,如晶振頻率等 |