如何将这段汇编转成c语言程序 帮忙啦!
时间:2011-07-15
来源:互联网
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 ;初始化堆栈指针
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 ;初始化堆栈指针
作者: rxngzq 发布时间: 2011-07-15
1、支持楼主,楼主真强,这么扎眼的都了如指掌。
2、汇编可以直接对位进行操作,C语言一般都需要移位。
3、如果编译器有对应的向导模式,一般还是比较简单的。
用向导创建一个,然后查看其生成的代码,是比较快的使用途径。
4、许多编译器都能够完全支持汇编和C。
2、汇编可以直接对位进行操作,C语言一般都需要移位。
3、如果编译器有对应的向导模式,一般还是比较简单的。
用向导创建一个,然后查看其生成的代码,是比较快的使用途径。
4、许多编译器都能够完全支持汇编和C。
作者: noodle123 发布时间: 2011-07-15
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28