打印
[51反汇编]

反汇编反出的51串口通讯“波特率自动校准技术”(无名氏作)

[复制链接]
3249|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2012-11-1 22:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
世上雷同的事太多了,当时我在此玩反汇编,并不知是什么软件!

反汇编反出的51串口通讯“波特率自动校准技术”(无名氏作)
HotPower 发表于 11/21/2003 1:20:50 PM 新手园地  

;-----------------------------------------------------------------------
;反汇编反出的51串口通讯“波特率自动校准技术”(无名氏作)
;-----------------------------------------------------------------------
;Disasm51 Version 3.02 Copyright (c) 2000,2003 Xi'an XXX Co. HotPower
;Binfile_name  :[Att51.bin]
;Binfile_length:[4153...1039H]
MAIN:
;-------波特率自动校准参数初始化-----------------------------
        CLR   A
    MOV   RCAP2H,A
    MOV   RCAP2L,A
    MOV   TL2,A;
    MOV   TH2,A;
    MOV   T2MOD,A
    MOV   T2CON,A
;-------串口在一定时间内有2个脉冲信号才能运行本程序---------
;开机必须撞大运!!!此君我服也!!!
;HotPower认为开机“密码”为F5H,不知此君能否给我“大奖”
;2个脉冲信号是否可认为:
;51开机串口(高电平1)
;结束起始位(低电平0)
;数据流10101111B(数据为F5H)停止位(高电平1)
;这样脉冲信号流为10101111111B
;我猜你在应用“波特率自动校准技术”!!!
;此君高人也,HotPower自叹不如!!!
;HotPower一直自称为“魔”,看来要“让位”了。。。
;但在“让位”前,我敢说此君的“散转技术”必我差点(别拍砖)
;看来此君的P89C51RX2的BootROM中的ISP精神领会的很深!!!
;HotPower这几天在此玩反汇编绝非“捣蛋”!!!
;我想给大家展示此君的“风采”
;-----------------------------------------------------------
;无首脉冲信号在此死机!!!
L00BB:    JB    RXD,$;等待串口低电平(首脉冲信号)
L00BE:    JNB   RXD,$;等待串口高电平(结束起始位D0=1)
;-------有首脉冲信号(起始位)才有资格撞大运--------------------
    SETB  TR2;打开定时器2,开始计时,现在测D0(1)
L00C3:    JNB   RXD,L00C9;测试次脉冲信号(D1=0)
    JNB   TF2,L00C3;等待定时时间到(无次脉冲信号)
L00C9:    JNB   RXD,$;等待串口高电平D2=1,测D1(0)
;-------D0D1已测完---------------------------------
L00CC:    JNB   RXD,L00D2;有次脉冲信号(D3=0)
    JNB   TF2,L00CC;等待定时时间到
;-------定时时间到,手气不好----------------------
;数据不能为0FFH,数据估计为F5H(11110101B)
L00D2:    JNB   RXD,$;等待串口高电平D4=1(8位数据和停止位)
;-------D4=D5=D6=D7=STOPBIT=1-------------------
    CLR   TR2;立即关闭定时器,用于校准波特率
    JB    TF2,MAIN;定时时间到,重新撞大运!!!
;-------多次撞上大运才能运行----------------------
;请看此君的“波特率自动校准技术”!!!
;-------------------------------------------------
    MOV   R7,TL2;保存实际测试的波特率低8位
    MOV   R6,TH2;保存实际测试的波特率高8位
;-------波特率自动校准技术------------------------
;从以下程序分析,此君的开机数据可能不是55H,是F5H吗?
;此君真是“做鬼也风流”呀!!!佩服!!!
;-------------------------------------------------
;2个脉冲信号必须除2,此君对吗???
;-------------------------------------------------
    MOV   A,R6
    CLR   C
    RRC   A;R6/2
    MOV   R4,A;暂存R4=R6/2
    MOV   A,R7
    RRC   A;R7/2+CY*80H
    ADD   A,R7
    MOV   R7,A;R7=R7+R7/2+(CY*80H)
    MOV   A,R4
    ADDC  A,R6
    MOV   R6,A;R6=R6+R6/2+CY
    MOV   A,R7
;-------调整误差------------------------------
    ADD   A,#010H;调整误差(关TR2有些晚)
    MOV   R7,A
    CLR   A
    ADDC  A,R6;加进位
    MOV   R6,A
;-------再次调整----------------------------
    MOV   A,R7
    MOV   R0,#005H;
L00F3:    XCH   A,R6;保存ACC,取R6
    CLR   C
    RRC   A;R6=R6/2
    XCH   A,R6;恢复ACC,取R6=R6/2
    RRC   A;RRC (R7)
    DJNZ  R0,L00F3
    MOV   R7,A
;-------完成波特率自动校准运算-------------
;由于51的T2是+1定时器,故结果必须取反
;R6:R7=-R6:R7
;------------------------------------------
    CLR   C
    CLR   A
    SUBB  A,R7;A=-R7(递增定时器)
    MOV   RCAP2L,A;得到自动校准后的波特率
    MOV   TL2,A;得到自动校准后的波特率
    CLR   A
    SUBB  A,R6;A=-R6(递增定时器)
    MOV   RCAP2H,A;得到自动校准后的波特率
    MOV   TH2,A;得到自动校准后的波特率
;--------------------------------------------
    MOV   T2CON,#034H;RCLK=TCLK=1,TR2=1
    MOV   SCON,#05AH;8位数据
;---------------------------------------------------
L010E:    CLR   RI
L0110:    JNB   RI,$;等待接收数据
    MOV   A,SBUF;取8位串行数据
    CJNE  A,#011H,L010E;接收不到11H进入死循环
;-------胜利大逃亡!哈哈哈哈------------------------
    LJMP  L0546
;---------------------------------------------------
;此君是何方高人???连波特率自动校准也忘不了搞鬼!
;这鬼确实搞大了!连串口数据通讯的波特率也加了密!!!
;这个密真是“杀人不见血”呀!!!!!!!!!!!!!
;----------------------------------------------------






在mon51下面的install.a51里就有啊!!
BIQIN135 发表于 2003-11-25 11:39 新手园地 ←返回版面



今天在51单片机世界**查找到了(http://www.mcu51.com/search.asp):

**编号:731----加入日期:2003-10-2
mon51的自动检测波特率方式,任意波特率都可以测出并设置好。里面是它的汇编代码:(丁
丁)

看来HotPower是个“抄袭家”了???请看下文


;检测波特率,方法是被检测者向串口发送几个“0x11”
;接收方自动将本机波特率设置成与发送方一致。
LF003:  CLR    A
        MOV    0CBH, A
LF006:  MOV    0CAH, A
        MOV    0CCH, A
LF00A:  MOV    0CDH, A
        MOV    0C9H, A
        MOV    0c8h, A
LF010:  JB     P3.0, LF010
LF013:  JNB    P3.0, LF013
        SETB   0c8h.2
LF018:  JNB    P3.0, LF01E
        JNB    0c8h.7, LF018
LF01E:  JNB    P3.0, LF01E
LF021:  JNB    P3.0, LF027
        JNB    0c8h.7, LF021
LF027:  JNB    P3.0, LF027
        CLR    0c8h.2
        JB     0c8h.7, LF003
        MOV    R7, 0CCH
        MOV    R6, 0CDH
        MOV    A, R6
        CLR    C
        RRC    A
        MOV    R4, A
        MOV    A, R7
        RRC    A
        ADD    A, R7
        MOV    R7, A
        MOV    A, R4
        ADDC   A, R6
        MOV    R6, A
        MOV    A, R7
        ADD    A, #10H
        MOV    R7, A
        CLR    A
        ADDC   A, R6
        MOV    R6, A
        MOV    A, R7
        MOV    R0, #05H
LF048:  XCH    A, R6
        CLR    C
        RRC    A
        XCH    A, R6
        RRC    A
        DJNZ   R0, LF048
        MOV    R7, A
        CLR    C
        CLR    A
        SUBB   A, R7
        MOV    0CAH, A
        MOV    0CCH, A
        CLR    A
        SUBB   A, R6
        MOV    0CBH, A
        MOV    0CDH, A
        MOV    0c8h, #34H
        MOV    SCON, #5AH
LF063:  CLR    RI
LF065:  JNB    RI, LF065
        MOV    A, SBUF
        CJNE   A, #11H, LF063
        ;至此检测到波特率并设置好本机波特率

相关帖子

沙发
MJM_WSY| | 2013-10-26 21:33 | 只看该作者
这个要是C写的就好了!

使用特权

评论回复
板凳
HORSE7812| | 2015-4-27 15:50 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:[url=http://www.21ic.com/tools/HotWC3_V1.23.html]

1460

主题

21619

帖子

506

粉丝