首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 其他开发语言 >

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

2012-02-10 
如何将这段汇编转成c语言程序帮忙啦(跪求)******************************主程序**********************

如何将这段汇编转成c语言程序 帮忙啦(跪求)
******************************
;主 程 序
;*******************************
MAINPG:
ANLPCA0MD,#0xBF;WDTE=0:禁止看门狗定时器
;MOVPCA0MD,#0x89;选择PCA计数器的时钟源=系统时钟;允许PCA计数器/定时器溢出中断
MOVPCA0CPL2,#0xFF;看门狗定时器:32.1x12mS
;
ORLVDM0CN,#0x80;VDD监视器使能位
MOVRSTSRC,#0x06;允许时钟丢失检查;使能VDD监视器为复位源.
; RSTSRC = 0x04;// 检测到时钟丢失时允许系统复位
;
MOVOSCICN,#0x83;允许内部振荡器,频率=24.5MHz.不分频
osc_wait:
MOVA,OSCICN;等待内部振荡器频率有效(IFRDY=1)
JNBACC.6,osc_wait
;-------------------------------
CLRA
MOVREF0CN,#0x03;基准电压控制寄存器(1->BIASE,REFBE)
;
;MOVADC0CF,#0x10;选择快速滤波器;内部VREF(2.5V)
MOVADC0CF,A;选择SINC3滤波器;内部VREF(2.5V)
;
MOVADC0CN,#0x12;差分双极性方式(结果值为2的补码);PGA增益=4
;
MOVADC0CLK,#0x09;调制器时钟MDCLK=2.4576 MHz;(采样速率=19.2 KHz)
;
MOVADC0DECH,#0x01;抽取比=DECI[10:0]+1=384[0x180](必须是8的整数倍!)
MOVADC0DECL,#0x7F;ADC0转换周期=[384*128]/2.4576MHz=20mS(50Hz)
;
;MOVADC0BUF,A;禁止正负通道高低输入缓冲器。
;MOVADC0BUF,#0xAA;正负通道高输入缓冲器使能。
MOVADC0BUF,#0x55;正负通道低输入缓冲器使能(ADin<5mVx100=0.5V)。
;
;MOVADC0MUX,#0x08;单端输入方式:0x08->0x28->0x48
MOVADC0MUX,#0x01;选择正负通道:0x01->0x23->0x45
MOVADC0MD,#0x80;ADC0使能;空闲方式中。
;-------------------------------
;定时器0计数器:每秒数波头(5KHz-15KHz)
;定时器1波特率发生器:BaudRate=2^(SMOD0) x fT1 /32=fT1/16
;定时器225mS定时,每秒采样频率一次
;-------------------------------
MOVTMOD,#0x25;T1:波特率发生器;T0:计数器:每秒数波头
MOVSCON0,#0x10;RS485:8位,接收允许;方式1:波特率可编程的8位UART
MOVCKCON,A;定时器0,1,2使用系统时钟/12(24.5MHz/12)
MOVTH1,#0x96;波特率=9600bps
MOVTL1,TH1
MOVTMR2CN,A
MOVTMR2RLH,#0x38;25.000163265mS
MOVTMR2RLL,#0x9E
;
MOVP0MDIN,#0x7F;Port0:0:模拟;1:数字
MOVP1MDIN,#0xFF;Port1:
MOVP0MDOUT,A;Port0:0:漏极开路;1:推挽
MOVP1MDOUT,#0xF0;Port1:
MOVP0SKIP,#0xCF;Port0:1:被交叉开关跳过
MOVP1SKIP,#0xFE;Port1:
;
MOVXBR0,#0x01;使能UART:TX0,RX0->P0.4.5
MOVXBR1,#0x50;使能弱上拉,允许XBR,T0->P1.0
;
MOVFLSCL,A;最小写入时间
MOVEMI0CN,A;选择外部数据存储器低256位
;
MOVR0,#STACK
MOVSP,#STACK;初始化堆栈指针
RAMCLR:
MOV@R0,A
DJNZR0,RAMCLR
MOVR0,#BUF0
MOVR1,#BUFER
MOVR0_1,#RS_OUT
MOVR1_1,#RS_IN
MOVCNTSEC,#40;40*25mS=1s:采样频率信号
MOVCNTCMP0,#7
MOVCNTCMP1,#7
MOVCNTCMP2,#7
MOVCNTCMPA,#3
MOVFCTCMP,#3
MOVCNTKEY,#8
MOVKEYDAT,#0xFF
MOVAD_CNT,#11;每个AD通道连续采样10次
;
MOVADC0MUX,#0x01;选择正负通道:0x01->0x23->0x45
ORLADC0MD,#1;首先执行全内部校准(偏移和增益)
NOP
JBAD0CALC,$;=1:ADC0正在校准
CLRAD0INT
;
MOVCNTSPK,#120
CLRSPEAK
;
CLRSW_RS;选择接收
SETBTR0
SETBTR1
SETBTR2;启动定时器2(触发ADC);定时器2外部时钟为系统时钟/12
SETBET2;定时器2中断
SETBES0
ORLEIE1,#8;1->EADC0
;SETBPT2;定时器2中断优先
SETBEA;开全局中断
;
MOVADC0MD,#0x80;ADC0空闲
MOVADC0MUX,#0x01;选择正负通道:0x01->0x23->0x45
ORLADC0MD,#2;启动单次转换

[解决办法]
估计没人会帮你写的

热点排行