找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2336|回復(fù): 9
收起左側(cè)

單片機(jī)串口1接收和發(fā)送波特率不一樣?

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 2 黑幣 回復(fù)本帖可獲得 2 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
ID:1074735 發(fā)表于 2023-4-30 18:48 | 顯示全部樓層 |閱讀模式
請(qǐng)教用STC 12C系列單片機(jī),12T模式。怎么配置定時(shí)器?這個(gè)單片機(jī)時(shí)鐘是1T的。

STC-ISP看不懂啊。我需求是用一顆單片機(jī),串口1,進(jìn)來(lái)的數(shù)據(jù)接收用15200波特率,轉(zhuǎn)發(fā)數(shù)據(jù)波特率是2400,8位。

T1和T2這里我不知怎么配置。哎。

不知道應(yīng)該怎么配置T1和T2?


程序這樣
        mov        r6,#0
        djnz        r6,$
        djnz        r7,initd
        clr addrf        
        mov sp,#127
        clr a
        mov 20h,a
        mov 21h,a
        mov 22h,a
        mov 23h,a   
        CLR     IE0
        CLR     IE1
        MOV     TCON,#00H

        orl pcon,#80h           ;使能波特率倍速位SMOD
        mov scon,#50h           ;8位數(shù)據(jù),可變波特率
        mov tmod,#00100001b     ;工作模式2,8位計(jì)數(shù)器自動(dòng)重載初值
        ANL AUXR,#0BFH                ;定時(shí)器時(shí)鐘12T模式
        ANL AUXR,#0FEH                ;串口1選擇定時(shí)器1為波特率發(fā)生器
        ANL TMOD,#0FH                ;設(shè)置定時(shí)器模式
        ORL TMOD,#20H                ;設(shè)置定時(shí)器模式
        MOV TL1,#0FFH                ;設(shè)置定時(shí)初始值
        MOV TH1,#0FFH                ;設(shè)置定時(shí)重載值
        CLR        ET1                ;禁止定時(shí)器中斷
                                    
        MOV SCON,#50H                ;8位數(shù)據(jù),可變波特率
        ORL AUXR,#01H                ;串口1選擇定時(shí)器2為波特率發(fā)生器
        ANL AUXR,#0FBH                ;定時(shí)器時(shí)鐘12T模式
        MOV T2L,#040H                ;設(shè)置定時(shí)初始值
        MOV T2H,#0FFH                ;設(shè)置定時(shí)初始值
        ORL AUXR,#10H                ;定時(shí)器2開(kāi)始計(jì)時(shí)

        setb es ;中斷允許
        setb ea ;中斷總開(kāi)關(guān)


回復(fù)

使用道具 舉報(bào)

ID:404160 發(fā)表于 2023-5-1 19:53 | 顯示全部樓層
同一個(gè)串口不能實(shí)現(xiàn)你的要求。如要實(shí)現(xiàn)你說(shuō)的功能,可以用兩個(gè)串口實(shí)現(xiàn),如S1設(shè)定波特率115200,用于接收數(shù)據(jù);S2的波特率設(shè)定2400,用于發(fā)送數(shù)據(jù)
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2023-5-2 00:09 | 顯示全部樓層
你想要收發(fā)使用不同波特率,
要么,用兩個(gè)串口, (STC12C好像沒(méi)有)
要么,用傳統(tǒng)C51  通過(guò)配置 T2CON 寄存器來(lái)實(shí)現(xiàn) 一個(gè)串口 發(fā)送和接收使用不同的定時(shí)器,達(dá)到用不同的波特率收發(fā)的目的. (比如STC89C51)
要么,用軟件模擬串口,
要么,半雙工模式,平時(shí) 接收的波特率 等待收數(shù)據(jù), 發(fā)送的時(shí)候 修改定時(shí)器換波特率再發(fā)送,發(fā)送完成后再修改波特率等待數(shù)據(jù)傳入。
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2023-5-2 07:07 | 顯示全部樓層
單向串口接收轉(zhuǎn)發(fā)只要一個(gè)串口和一個(gè)定時(shí)器即可完成,設(shè)置定時(shí)器1波特率115200,用串口中斷等待接收。接收完成后關(guān)閉串口中斷,更改定時(shí)器1波特率為2400,經(jīng)短暫延時(shí)后轉(zhuǎn)發(fā)數(shù)據(jù)。發(fā)送完成后恢復(fù)波特率115200,開(kāi)串口中斷,繼續(xù)等待接收。連接方式如圖:
無(wú)標(biāo)題.jpg

回復(fù)

使用道具 舉報(bào)

ID:116103 發(fā)表于 2023-5-2 09:42 | 顯示全部樓層
定時(shí)器是硬件,定時(shí)時(shí)間和軟件運(yùn)行時(shí)間沒(méi)關(guān)系,你別搞混了
回復(fù)

使用道具 舉報(bào)

ID:1034262 發(fā)表于 2023-5-2 14:34 | 顯示全部樓層
樓主,你應(yīng)該使用2個(gè)串口,一個(gè)115200,一個(gè)2400。如果只用一個(gè)串口,則要不斷的改變波特率。
回復(fù)

使用道具 舉報(bào)

ID:1074735 發(fā)表于 2023-6-16 18:02 | 顯示全部樓層
188610329 發(fā)表于 2023-5-2 00:09
你想要收發(fā)使用不同波特率,
要么,用兩個(gè)串口, (STC12C好像沒(méi)有)
要么,用傳統(tǒng)C51  通過(guò)配置 T2CON  ...

您好,我現(xiàn)在就是用這種方法。進(jìn)來(lái)9600,出去2400,單獨(dú)發(fā)8個(gè)字節(jié)一幀命令進(jìn)來(lái)轉(zhuǎn)出去都正常。如果進(jìn)來(lái)的命令不斷刷刷的9600波特率進(jìn)來(lái),轉(zhuǎn)換出去的命令是錯(cuò)誤的。請(qǐng)問(wèn)有何辦法?
回復(fù)

使用道具 舉報(bào)

ID:849635 發(fā)表于 2023-6-16 18:15 | 顯示全部樓層
定時(shí)器是硬件,定時(shí)時(shí)間和軟件運(yùn)行時(shí)間沒(méi)關(guān)系
回復(fù)

使用道具 舉報(bào)

ID:1034262 發(fā)表于 2023-6-16 21:15 | 顯示全部樓層
收發(fā)都用同一個(gè)波特率,怎么可能不同?
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2023-6-18 14:18 | 顯示全部樓層
本帖最后由 188610329 于 2023-6-18 16:02 編輯
dbkdz 發(fā)表于 2023-6-16 18:02
您好,我現(xiàn)在就是用這種方法。進(jìn)來(lái)9600,出去2400,單獨(dú)發(fā)8個(gè)字節(jié)一幀命令進(jìn)來(lái)轉(zhuǎn)出去都正常。如果進(jìn)來(lái)的 ...

因?yàn),你進(jìn)來(lái)是9600  出去是2400, 所以,發(fā)出1個(gè)字節(jié)的時(shí)間, 可能會(huì)收到 4個(gè)字節(jié)的數(shù)據(jù),這種情況下,是必須有緩沖池支持才行的。并且,如果會(huì)長(zhǎng)時(shí)間收到大量數(shù)據(jù),那么還需要 流控制,基于你收發(fā)連接不同的設(shè)備,軟件流xon xoff 是肯定不能用了,那么就要考慮硬件流控制了。先不說(shuō)硬件流了,假定,你連續(xù)收到數(shù)據(jù)不會(huì)超過(guò)300字節(jié),可以這么考慮:

XSEG AT 0000H
Uart_Buf:      DS    100H

Flag_Seg    Segment BIT
RSEG  Flag_Seg
TI_Busy:       DBIT  1

CSEG AT 0023H
PUSH   PSW
MOV    PSW,#08H
USING  1
PUSH   ACC
JNB   RI,TI_Roop
CLR   RI
MOV   A,SBUF
MOVX  @R1,A
INC    R1
TI_Roop:
JNB   TI,Check_Send
CLR   TI
CLR   TI_Busy
Check_Send:JB   TI_Busy,End_UartInt
MOV  A,R0
XRL   A,R1
JZ     End_UartInt
MOVX   A,@R0
MOV    SBUF,A
INC     R0
SETB   TI_Busy
End_UartInt:
POP  ACC
POP  PSW
RETI

主程序你自己寫(xiě)一下初始化串口的定時(shí)器,以及,把工作組1 的 R0,R1 初始化為0即可,其實(shí)如果你用了 STARTUP.A51 他默認(rèn)也是清0的。應(yīng)該就行了。這就全后臺(tái)完成轉(zhuǎn)發(fā)了,一般情況下應(yīng)該夠用了,如果你真的數(shù)據(jù)量很大,就必須要考慮硬件流控制來(lái)通知上位機(jī)忙,等待你轉(zhuǎn)發(fā)完成再發(fā)送后續(xù)數(shù)據(jù)了。

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表