熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2023-6-4 20:16
正文摘要:不理解邏輯。 單片機(jī)是通過(guò)010101這種的高低電平模擬二級(jí)制記錄數(shù)據(jù)的,這里是接收數(shù)據(jù)部分,PIN_RXD引腳的高低電平這里是如何控制的? #include <reg52.h> sbit PIN_RXD = P3^0; sbit PIN_TXD = P3^1; ... |
wulin 發(fā)表于 2023-6-5 06:05
我的理解: 波特率就是傳輸二進(jìn)制的速率,這里選用的是1200,每秒傳送1200個(gè)比特位,1 / 1200 = 833 us,833us傳輸一個(gè)比特位。每次溢出后進(jìn)入中斷,代表已經(jīng)時(shí)間已經(jīng)達(dá)到一個(gè)碼元位,如果向下面理解那么傳輸?shù)谋忍夭粦?yīng)該是對(duì)的???? 接收代碼的理解: 1.當(dāng)遇到低電平RXB的時(shí)候,代表UART通信開(kāi)始接收,先把RING = 1 , 比特計(jì)數(shù)器RCNT = 4 , 比特?cái)?shù)RBIT = 9。 2.下次再進(jìn)入中斷,RCNT自動(dòng)減1,經(jīng)過(guò)4次中斷進(jìn)入后,直到RCNT = 0,然后賦值RCNT = 3,比特?cái)?shù)RBT減少一位,這時(shí)候認(rèn)為數(shù)據(jù)是有效的,把RXB電平的數(shù)據(jù)記錄到RDAT中。 3. 每個(gè)比特位都需要RCNT減3次后才把RXB的數(shù)據(jù)賦值給RDAT。同時(shí),把RBIT數(shù)據(jù)也減1,直到等于0就代表接收完畢,然后恢復(fù)RING = 0。 |
哈蘭德 發(fā)表于 2023-6-5 01:30 參考9樓給你的代碼,這是典型的3分波特率,每個(gè)位的間隔為3次中斷,收到起始信號(hào)時(shí)為4個(gè)時(shí)間中斷,就是從1.333的位置開(kāi)始接受。 |
【PIN_RXD引腳的高低電平這里是如何控制的?】 由發(fā)送方進(jìn)行控制。 控制的邏輯依據(jù)串行協(xié)議。 接收方由單片機(jī)內(nèi)部嵌入的UART硬件完成,當(dāng)然也會(huì)按照同樣的協(xié)議進(jìn)行解碼。 |
wulin 發(fā)表于 2023-6-5 06:05 TL1 = 0xE8; T0可以用嗎 |
大漠落日 發(fā)表于 2023-6-5 09:25 就是接收部分的 TL0 = 256 - ((256 - TH0)>>1); 不理解怎么改 |
有邏輯分析儀,厲害 |
用硬件接收,看你的狀態(tài),還沒(méi)有完全搞明白串口通信與接收的采樣位關(guān)系。先用硬件串口吧,軟件要實(shí)現(xiàn)一時(shí)半會(huì)你可能調(diào)試不出結(jié)果。 |
哈蘭德 發(fā)表于 2023-6-4 20:48 軟件模擬串口示例
|
188610329 發(fā)表于 2023-6-5 00:13 接收部分,是從每個(gè)比特位的中間部分接收的,不太理解如何從1.3-1.5接收 |
你接收程序有問(wèn)題, 接收到起始位后,要 錯(cuò)位 半個(gè)時(shí)間位才能 正確收到數(shù)據(jù),即要在收到起始位后,經(jīng)過(guò)1.3~ 1.5個(gè)位 的時(shí)間后 才開(kāi)始接收 第一位數(shù)據(jù)。所以,廣泛會(huì)用 3分波特率 或4分波特率方式。 |
我理解如下: PIN_RXD是接收數(shù)據(jù)的引腳,1就是高,0就是低。 以接收 1010 0101為例子舉例。 1 . 數(shù)據(jù)確定是從起始位開(kāi)始后,RxdBuf = 0; 2.1 RxdBuf = 0 , PIN_RXD這時(shí)候接收為高電平,RxdBuf |= 1000 0000 ===> RxdBuf = 1000 0000 2.2 PIN_RXD 接收低電平 ,RxdBuf = 0100 0000 (右移了一位) 2.3 PIN_Rxd接收高電平 , RxdBuff >>= 0010 0000 ==>1010 0000 2.4 PIN_Rxd低, RxdBuf ==> 0101 0000 2.5 Pin_Rxd為低 , RxdBuf ==> 0010 1000 2.6 Pin_Rxd高, Rxdbuf ===>1001 0100 2.7 Pin_Rxd低,RxdBuf ===> 0100 1010 2.8 Pin_Rxd高, RxdBuf ==> 1010 0101 3.發(fā)送停止位 |
沙發(fā),詳情見(jiàn)下面回復(fù) |
Powered by 單片機(jī)教程網(wǎng)