‘壹’ 如何把单片机机器语言转化为c语言
机器语言可以反汇编为汇编语言,但是这种反汇编得到的汇编语言指令,与原来的指令已经完全不同,根本没法看懂,所以,目前为止,还无法实现这个功能。
这也是对的,如果用软件就可以将目标代码还原回原来的指令,那程序员的就没有知识产权可言了,别人的辛勤劳动这么容易转换,那就太不公平了。
‘贰’ 单片机C51,将汇编语言转换为C语言
#include<reg52.h>
#defineu8unsignedchar
#defineu16unsignedint
#defineBufSize0x10
u8buf[BufSize];
u8js=0;
voidmain(){
SCON=0x80;
PCON=0x80;
EA=1;
ES=1;
ACC=buf[0];
TB8=P;
SBUF=ACC;
while(1);
}
voidTRANI()interrupt4
{
TI=0;
js++;
if(js==BufSize){
ES=0;
}
else{
ACC=buf[js];
TB8=P;
SBUF=ACC;
}
}
顺便优化汇编代码
BUF EQU 0X50
ORG 0000H
JMP MAIN
ORG 0023H
JMP TRANI
MAIN:
MOV SCON,#0X80;
MOV PCON,#0X80
SETB EA
SETB ES
MOV R0,#BUF
MOV A,@R0
MOV C,P
MOV TB8,C
MOV SBUF,A
JMP $
TRANI:
PUSH PSW
PUSH ACC
INC R0
CJNE R0,#BUF+0x10,NEXT
JMP TEND
NEXT: MOV A,@R0
MOV C,P
MOV TB8,C
MOV SBUF,A
TEND:
POP ACC
POP PSW
RETI
‘叁’ 单片机汇编语言转换C语言
大致如此:
TMOD = 0x02;
while(1) {
P10 = 0;
TH0 = 0x6A;
TL0 = 0x6A;
TR0 = 1;
while(TF0==0);
P10 = 1;
TR0 = 0;
TH0 = 0xE7;
TL0 = 0xE7;
TR0 = 1;
while(TF0==0);
}
‘肆’ at89c51单片机 如何用c语言编程啊
随着单片机硬件性能的提高,编写应用程序更着重于程序本身的效率。
Franklin或KEII.C51交叉编译器是专为51系列单片机设计的一种高效的C语言编译器,用其开发的应用程序易于维护,可移植性好,是目前较流行的51系列单片机的开发工具。
一、C51语言程序设计的基本技巧
首先,C51语言程序设计要尽可能采用结构化的设计方法。可将整个程序按功能分成若干个模块,不同的模块完成不同的功能。对于不同的功能模块,分别指定相应的入口参数和出口参数,而经常使用的一些程序最好编成函数,这样既不会引起整个程序管理的混乱,还可使程序的可读性、移植性增强。
C51语言的主程序结构:
#include
main0{while(1);}
这是最小的C程序,包括头部文件和程序主体。头部文件为引用的外部资源文件,包括硬件信息和外部模块提供的可使用的函数和变量的说明。
语句定义后,就可以在C语言程序中像汇编一样使用这些硬件设备。
在C5l中常用项目来管理,项目一般分为C文件块和头部文件块,常把不同的功能写在不同的C文件中,依靠项目的管理,最后把所有文件连接起来,这样就可以得到烧录的HEX文件或BIN文件。没有在头部文件中列出的文件,可以算是该C文件的内部函数和变量,外部C不能使用。另外,在程序设计过程中要充分利用C51语言的预处理命令。
对于一些常用的常数,如TRUE、FAlSE、PI,以及各种特殊功能寄存器,或程序中一些重要的依据外界条件可变的常量,可采用宏定义(#de-fine)或集中起来放在一个头文件中进行定义,再采用文件包含命令(#in-elude)将其加入到程序中,这样当需要修改某个参量时,只需修改相应的包含文件或宏定义,而不必对使用它们的每个程序文件都进行修改,有利于文件的维护和更新。
举例:利用宏定义和条件编译,源程序不作任何修改就可适用于不同时钟频率的单片机系统,并可根据情况的不同取不同的delay值,完成不同的目的。程序如下:
#define flag 1#ifdef flag==l#define fose 6Mdelay=10;#elif flag==0#define fose 8Mdelay=12;#else#define fosc 12Mdelay=20;#endiFMain0{ for(I=O;l
‘伍’ 单片机编程可以用c语言吗
当然可以,去问老师,都会的,在学校里用汇编编单片机的程序只是为了让你练习汇编语言而已,单片机编程本来就是用c语言编的。
‘陆’ 这个单片机汇编换成C语言应怎么写
#include<reg52.h>//52系列单片机头文件
#define
P1
ledall
//此处没用到
sbit
led1=P1^0;
void
delay(unsigned
int
t)
{
while(t--);
}
void
main()
{
led1=0;
while(1)
{
led1=~led1//取反
delay(1000);//括号中数加大则闪烁变慢
}
/*若要控制所有的
把上面6行去掉用下面的*/
/*
P1=0xaa;//隔一个亮
while(1)
{
P1=~P1;//~按位取反,间隔闪烁
delay(1000);
}
*/
}
若要做流水灯,加个#include<intrins.h>关于循环等
的头文件
_crol_(P1,1);//P1左循环1位,配合延时和for循环语句循环8次可实现流水灯
_cror_(P1,1);//此句是右循环1位的
‘柒’ 如何把单片机机器语言转化为c语言
机器语言可以反汇编为汇编语言,但是这种反汇编得到的汇编语言指令,与原来的指令已经完全不同,根本没法看懂,所以,目前为止,还无法实现这个功能。
这也是对的,如果用软件就可以将目标代码还原回原来的指令,那程序员的就没有知识产权可言了,别人的辛勤劳动这么容易转换,那就太不公平了。
‘捌’ 如何将单片机HEX文件转换成C语言或汇编
1、.hex是二进文件。.asm是汇编文件。是C编译器产生的。
如果谁把汇编语言还原成C,几乎不太可能,
如有这时间功夫,C程序自已都可早早重新编好了。
2、可以用反向工程hex2c:
开始—>运行—>输入CMD
找到hex2c.exe所在文件夹路径
输入 hex2c <hex文件名称.hex> <生成c文件名称.c>