单片机 > 单片机程序设计 > 详情

串口自动波特率设置程序

发布时间:2024-10-17 发布时间:
|

在另外一套程序中并没有ISP功能,要实现程序的更新功能,要了解芯片的IAP调用,这一点在芯片的资料上也有介绍,然后就是接收上位机的程序,一般是通过串口,下面介绍一下P89C51RD2的串口自动波特率设置,程序源码主要摘录于《 单片机 与嵌入式系统》,现在贴出完整的源码:

        ;==============================
        ;初始化串口,自适应波特率;上位机
        ;发送两个字符'U',如果接收到一个
        ;字符'U',那么初始化成功
        ;==============================
SERIAL_INIT:
        MOV     TMOD,#02H ;T1工作模式2,定时器
        MOV     T2CON,#30H ;T2工作为串行口波特率发生器
        CLR     A
        MOV     TL2,A
        MOV     TH2,A         ;TH2=0000H
        JNB     P3.0,$       ;若P3.0=0 则等待直到其变为1
        JB       P3.0,$     ;若P3.0=1 则等待直到下降沿到来
        SETB     TR2         ;启动T2定时器
        JNB     P3.0,$       ;若P3.0=0 则等待直到上升沿到来
        CLR     TR2

        ;计算波特率
        MOV     A,TL2
        SWAP   A
        ANL     A,#0FH       ;取TL2高四位
        MOV     R0,A
        MOV     A,TH2
        SWAP   A
        ANL     A,#0F0H     ;取TH2低四位
        ORL     A,R0
        MOV     R0,A         ;组合后送入R0
        MOV     A,TH2
        SWAP   A
        ANL     A,#0FH       ;取TH2高四位
        MOV     R1,A
        MOV     A,R0   ;以上程序实现T2中数据除以16送R1和R0保存
        CPL A         ;低位取反
        MOV     TL2,A
        MOV     RCAP2L,A
        MOV     A,R1
        CPL A         ;高位取反
        MOV     TH2,A
        MOV     RCAP2H,A
        ;校验波特率
        SETB     TR2
        MOV     SCON,#52H   ;串行口方式1,TI=1
RREV0:   ACALL   REV_SEND0 ;接收一个字符"U"
        CJNE     A,#55H,RREV0     ;判断A="U"?
        RET           ;如果收到字符"U",则串口初始化完成

        ;==============================
        ;接收一个数据并返回给上位机
        ;==============================
REV_SEND0:
        JNB     RI, $
        CLR     RI
        MOV     A,SBUF       ;接收数据
        JNB     TI,$
        CLR     TI
        MOV     SBUF,A       ;发送数据
        RET


关键字:串口  自动波特率  设置程序 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR下载线存在问题