如何将这段汇编转成c语言程序

rxngzq 2011-07-15 03:03:20
MAINPG:
ANL PCA0MD,#0xBF ;WDTE=0:禁止看门狗定时器
; MOV PCA0MD,#0x89 ;选择PCA计数器的时钟源=系统时钟;允许PCA计数器/定时器溢出中断
MOV PCA0CPL2,#0xFF ;看门狗定时器:32.1x12mS
;
ORL VDM0CN,#0x80 ;VDD监视器使能位
MOV RSTSRC,#0x06 ;允许时钟丢失检查;使能VDD监视器为复位源.
; RSTSRC = 0x04; // 检测到时钟丢失时允许系统复位
;
MOV OSCICN,#0x83 ;允许内部振荡器,频率=24.5MHz.不分频
osc_wait:
MOV A,OSCICN ;等待内部振荡器频率有效(IFRDY=1)
JNB ACC.6,osc_wait
;-------------------------------
CLR A
MOV REF0CN,#0x03 ;基准电压控制寄存器(1->BIASE,REFBE)
;
; MOV ADC0CF,#0x10 ;选择快速滤波器;内部VREF(2.5V)
MOV ADC0CF,A ;选择SINC3滤波器;内部VREF(2.5V)
;
MOV ADC0CN,#0x12 ;差分双极性方式(结果值为2的补码);PGA增益=4
;
MOV ADC0CLK,#0x09 ;调制器时钟MDCLK=2.4576 MHz;(采样速率=19.2 KHz)
;
MOV ADC0DECH,#0x01 ;抽取比=DECI[10:0]+1=384[0x180](必须是8的整数倍!)
MOV ADC0DECL,#0x7F ;ADC0转换周期=[384*128]/2.4576MHz=20mS(50Hz)
;
; MOV ADC0BUF,A ;禁止正负通道高低输入缓冲器。
; MOV ADC0BUF,#0xAA ;正负通道高输入缓冲器使能。
MOV ADC0BUF,#0x55 ;正负通道低输入缓冲器使能(ADin<5mVx100=0.5V)。
;
; MOV ADC0MUX,#0x08 ;单端输入方式:0x08->0x28->0x48
MOV ADC0MUX,#0x01 ;选择正负通道:0x01->0x23->0x45
MOV ADC0MD,#0x80 ;ADC0使能;空闲方式中。
;-------------------------------
MOV TMOD,#0x25 ;T1:波特率发生器;T0:计数器:每秒数波头
MOV SCON0,#0x10 ;RS485:8位,接收允许;方式1:波特率可编程的8位UART
MOV CKCON,A ;定时器0,1,2使用系统时钟/12(24.5MHz/12)
MOV TH1,#0x96 ;波特率=9600bps
MOV TL1,TH1
MOV TMR2CN,A
MOV TMR2RLH,#0x38 ;25.000163265mS
MOV TMR2RLL,#0x9E
;
MOV P0MDIN,#0x7F ;Port0:0:模拟;1:数字
MOV P1MDIN,#0xFF ;Port1:
MOV P0MDOUT,A ;Port0:0:漏极开路;1:推挽
MOV P1MDOUT,#0xF0 ;Port1:
MOV P0SKIP,#0xCF ;Port0:1:被交叉开关跳过
MOV P1SKIP,#0xFE ;Port1:
;
MOV XBR0,#0x01 ;使能UART:TX0,RX0->P0.4.5
MOV XBR1,#0x50 ;使能弱上拉,允许XBR,T0->P1.0
;
MOV FLSCL,A ;最小写入时间
MOV EMI0CN,A ;选择外部数据存储器低256位
;
MOV R0,#STACK
MOV SP,#STACK ;初始化堆栈指针
RAMCLR:
MOV @R0,A
DJNZ R0,RAMCLR
MOV R0,#BUF0
MOV R1,#BUFER
MOV R0_1,#RS_OUT
MOV R1_1,#RS_IN
MOV CNTSEC,#40 ;40*25mS=1s:采样频率信号
MOV CNTCMP0,#7
MOV CNTCMP1,#7
MOV CNTCMP2,#7
MOV CNTCMPA,#3
MOV FCTCMP,#3
MOV CNTKEY,#8
MOV KEYDAT,#0xFF
MOV AD_CNT,#11 ;每个AD通道连续采样10次
;
MOV ADC0MUX,#0x01 ;选择正负通道:0x01->0x23->0x45
ORL ADC0MD,#1 ;首先执行全内部校准(偏移和增益)
NOP
JB AD0CALC,$ ;=1:ADC0正在校准
CLR AD0INT
;
MOV CNTSPK,#120
CLR SPEAK
;
CLR SW_RS ;选择接收
SETB TR0
SETB TR1
SETB TR2 ;启动定时器2(触发ADC);定时器2外部时钟为系统时钟/12
SETB ET2 ;定时器2中断
SETB ES0
ORL EIE1,#8 ;1->EADC0
; SETB PT2 ;定时器2中断优先
SETB EA ;开全局中断
;
MOV ADC0MD,#0x80 ;ADC0空闲
MOV ADC0MUX,#0x01 ;选择正负通道:0x01->0x23->0x45
ORL ADC0MD,#2 ;启动单次转换
...全文
593 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
RLib 2011-08-02
  • 打赏
  • 举报
回复
用IDA反汇编然后反编译成C
zhangyafei13 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 knate 的回复:]
我晕,我还以为刚才没回复.
回复重复了.
[/Quote]


.....
knate 2011-07-22
  • 打赏
  • 举报
回复
我晕,我还以为刚才没回复.
回复重复了.
knate 2011-07-21
  • 打赏
  • 举报
回复
这个是芯片的初始化代码.

这有什么好改写的.
直接MOV 改 = 就是了.
这已经完成了95%了.
其他的基本都是等待.

而且注释都这么罗嗦了,
还改不了?
为了修改方便大不了添加几个宏就可以了.
MSOKD 2011-07-19
  • 打赏
  • 举报
回复
把其中的一段代码写成c很难的哦,没有前文后果

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧