专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 其他开发语言

怎么将这段汇编转成c语言程序 帮忙啦(跪求)

发布时间:2011-06-30 07:30:53 文章来源:www.iduyao.cn 采编人员:星星草
如何将这段汇编转成c语言程序 帮忙啦(跪求)
******************************
; 主 程 序
;*******************************
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使能;空闲方式中。
;-------------------------------
;定时器0 计数器:每秒数波头(5KHz-15KHz)
;定时器1 波特率发生器:BaudRate=2^(SMOD0) x fT1 /32=fT1/16
;定时器2 25mS定时,每秒采样频率一次
;-------------------------------
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 ;启动单次转换

------解决方案--------------------
估计没人会帮你写的
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: