世上雷同的事太多了,当时我在此玩反汇编,并不知是什么软件!
反汇编反出的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
;至此检测到波特率并设置好本机波特率 |