久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機串口1接收和發送波特率不一樣? [打印本頁]

作者: dbkdz    時間: 2023-4-30 18:48
標題: 單片機串口1接收和發送波特率不一樣?
請教用STC 12C系列單片機,12T模式。怎么配置定時器?這個單片機時鐘是1T的。

STC-ISP看不懂啊。我需求是用一顆單片機,串口1,進來的數據接收用15200波特率,轉發數據波特率是2400,8位。

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

不知道應該怎么配置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位數據,可變波特率
        mov tmod,#00100001b     ;工作模式2,8位計數器自動重載初值
        ANL AUXR,#0BFH                ;定時器時鐘12T模式
        ANL AUXR,#0FEH                ;串口1選擇定時器1為波特率發生器
        ANL TMOD,#0FH                ;設置定時器模式
        ORL TMOD,#20H                ;設置定時器模式
        MOV TL1,#0FFH                ;設置定時初始值
        MOV TH1,#0FFH                ;設置定時重載值
        CLR        ET1                ;禁止定時器中斷
                                    
        MOV SCON,#50H                ;8位數據,可變波特率
        ORL AUXR,#01H                ;串口1選擇定時器2為波特率發生器
        ANL AUXR,#0FBH                ;定時器時鐘12T模式
        MOV T2L,#040H                ;設置定時初始值
        MOV T2H,#0FFH                ;設置定時初始值
        ORL AUXR,#10H                ;定時器2開始計時

        setb es ;中斷允許
        setb ea ;中斷總開關



作者: 飛云居士    時間: 2023-5-1 19:53
同一個串口不能實現你的要求。如要實現你說的功能,可以用兩個串口實現,如S1設定波特率115200,用于接收數據;S2的波特率設定2400,用于發送數據
作者: 188610329    時間: 2023-5-2 00:09
你想要收發使用不同波特率,
要么,用兩個串口, (STC12C好像沒有)
要么,用傳統C51  通過配置 T2CON 寄存器來實現 一個串口 發送和接收使用不同的定時器,達到用不同的波特率收發的目的. (比如STC89C51)
要么,用軟件模擬串口,
要么,半雙工模式,平時 接收的波特率 等待收數據, 發送的時候 修改定時器換波特率再發送,發送完成后再修改波特率等待數據傳入。
作者: wulin    時間: 2023-5-2 07:07
單向串口接收轉發只要一個串口和一個定時器即可完成,設置定時器1波特率115200,用串口中斷等待接收。接收完成后關閉串口中斷,更改定時器1波特率為2400,經短暫延時后轉發數據。發送完成后恢復波特率115200,開串口中斷,繼續等待接收。連接方式如圖:



作者: wys91203    時間: 2023-5-2 09:42
定時器是硬件,定時時間和軟件運行時間沒關系,你別搞混了
作者: coody_sz    時間: 2023-5-2 14:34
樓主,你應該使用2個串口,一個115200,一個2400。如果只用一個串口,則要不斷的改變波特率。
作者: dbkdz    時間: 2023-6-16 18:02
188610329 發表于 2023-5-2 00:09
你想要收發使用不同波特率,
要么,用兩個串口, (STC12C好像沒有)
要么,用傳統C51  通過配置 T2CON  ...

您好,我現在就是用這種方法。進來9600,出去2400,單獨發8個字節一幀命令進來轉出去都正常。如果進來的命令不斷刷刷的9600波特率進來,轉換出去的命令是錯誤的。請問有何辦法?
作者: XLXUN    時間: 2023-6-16 18:15
定時器是硬件,定時時間和軟件運行時間沒關系
作者: coody_sz    時間: 2023-6-16 21:15
收發都用同一個波特率,怎么可能不同?
作者: 188610329    時間: 2023-6-18 14:18
本帖最后由 188610329 于 2023-6-18 16:02 編輯
dbkdz 發表于 2023-6-16 18:02
您好,我現在就是用這種方法。進來9600,出去2400,單獨發8個字節一幀命令進來轉出去都正常。如果進來的 ...

因為,你進來是9600  出去是2400, 所以,發出1個字節的時間, 可能會收到 4個字節的數據,這種情況下,是必須有緩沖池支持才行的。并且,如果會長時間收到大量數據,那么還需要 流控制,基于你收發連接不同的設備,軟件流xon xoff 是肯定不能用了,那么就要考慮硬件流控制了。先不說硬件流了,假定,你連續收到數據不會超過300字節,可以這么考慮:

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

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






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 男人阁久久 | 欧美黑人体内she精在线观看 | 天天天操天天天干 | 国产欧美一区二区精品久导航 | 亚洲视频免费观看 | 毛片a级毛片免费播放100 | 欧洲一区二区在线 | 偷拍自拍在线观看 | 日韩成人在线免费观看 | 国产www.| 第四色播日韩第一页 | 日韩伦理电影免费在线观看 | 一级毛片在线播放 | 欧美国产日韩一区二区三区 | 欧美日韩精品免费 | 麻豆hd| av一级久久| 国产最新视频在线 | 午夜成人在线视频 | 男人影音 | 精品粉嫩aⅴ一区二区三区四区 | 精品国产鲁一鲁一区二区张丽 | 中文字幕一区二区三区精彩视频 | 欧美日本高清 | 亚洲精品视频免费观看 | 欧美一区二区三区,视频 | 91精品国产777在线观看 | 雨宫琴音一区二区在线 | 欧美日韩视频在线播放 | 国产精品永久免费观看 | 精品香蕉一区二区三区 | 九九九久久国产免费 | 日韩在线免费 | 久久成人午夜 | 国产亚洲一区二区在线观看 | 一区二区在线 | 成人影院在线 | 武道仙尊动漫在线观看 | 九九热在线免费观看 | 91免费入口 | 我想看一级黄色毛片 |