c 语言 如何设置串口波特率,串口自动波特率设置程序

来源:网上转载    作者:

在另外一套程序中并没有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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值