标题: 有没有大神会把c语言转成汇编语言 [打印本页]

作者: zcgh6633    时间: 2015-7-5 20:39
标题: 有没有大神会把c语言转成汇编语言
/***************************头文件***********************/
#include <reg51.h>
/************************数据类型宏定义******************/
#define uchar unsigned char
#define uint unsigned int
#define lcd P0     //液晶数据口
/***********************声明控制引脚*********************/
sbit rs=P3^0;  //LCD1602控制端口
sbit en=P3^1;
sbit jh=P3^2;  // 继电器控制端
sbit k1=P1^0; //按键
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
/**************************数组定义********************/
uchar code table0[]="Modle: Automatic";    //用于LCD1602显示
uchar code table1[]="T1=12min T2=20s ";
uchar table2[]="Automatic";
uchar table3[]="Manual   ";
uchar table4[]="00";
uchar table5[]="00";
uchar table6[]="                ";
/**********************s声明全局变量*******************/
uchar _50ms,t1=15,t2=30; //每50ms加一次的变量 ;间隔时间min;浇花时间s ;
uint s,T_s;   //1s时间到;总定时时间
uchar flag=0,flag1=0,flag2=0,flag3=0;//时间切换标志。自动/手动切换标志,时间间隔和浇花时间调节标志 ,浇花与不浇花标志
/*************************延时程序*********************/
void delay(uint count)   //1ms延时
{
   uint i,j;
   for(i=0;i<count;i++)
   for(j=0;j<120;j++);
}
/*************************液晶驱动程序*************************/
void w_cmd(uchar com)    //lcd1602写命令
{
  rs=0;
  lcd=com;
  en=1;
  delay(5);
  en=0;
}
void w_data(uchar dat)    //lcd1602读数据
{
  rs=1;
  lcd=dat;
  en=1;
  delay(5);
  en=0;
}
void w_str(uchar *s)       //lcd1602写字符串
{
    while(*s)  w_data(*s++);
}
void lcd_int()       //lcd1602初始化
{
  en=0;
  w_cmd(0x38);
  w_cmd(0x0c);
  w_cmd(0x06);
  w_cmd(0x01);
  w_cmd(0x80+0x00);
  w_str(table0);
  w_cmd(0xc0+0x00);
  w_str(table1);
}
/*******************定时器0初始化程序******************/
void Timer0_Init(void) //其中没ET0是为以后控制暂停用的
{
TMOD = TMOD | 0X01; //定时方式1
TH0 = 0X3C; //50ms
TL0 = 0XB0;
TR0 = 1;
ET0=1;
_50ms = 0;
s = 0;
}
/*******************定时器0中断程序********************/
void Timer0(void) interrupt 1
{
  TR0 = 0; //停止计数
  TH0 = 0X3C; //重装定时器值
  TL0 = 0XB0;
  TR0 = 1;
  _50ms++;
  if(_50ms == 20) //1s到
  {
     _50ms = 0;
     
    s++;
   // count++;
    if(!flag)  //间隔时间内
    {
     if(s == T_s) //时间间隔到
     {
      s=0;
    flag=1;
    jh=0;//开始浇花
     }
    }
    if(flag)  //浇花时间内
    {
     if(s==t2)
   {
    s=0;
    flag=0;
    flag3=0;
    jh=1;  //停止浇花
   }
    }
  }
}
/******************判断模式选择***********************/
void judge()
{
if(k1==0)     //判断模式
{
  delay(10);
  if(k1==0)
  {
   while(!k1);
   flag1=~flag1;
  }
}
}
/*****************调节时间****************************/
void tiaojie()   
{
table4[0]=t1/10+48;
table4[1]=t1%10+48;
table5[0]=t2/10+48;
table5[1]=t2%10+48;
w_cmd(0xc0+0x03);
w_str(table4);
w_cmd(0xc0+0x0c);
w_str(table5);  //液晶显示
if(k2==0)   //判别调节间隔时间还是浇花时间
{
  delay(10);
  if(k2==0)
  {
   while(!k2);
   flag2=~flag2;
  }
}
if(flag2==0)  //调节间隔时间
{
  if(k3==0)
  {
   delay(10);
   if(k3==0)
   {
    while(!k3);
    t1++;   
    if(t1>150) t1=150;
   }
  }
  if(k4==0)
  {
   delay(10);
   if(k4==0)
   {
    while(!k4);
    t1--;
    if(t1<12) t1=12;
   }
  }
}
if(flag2)    //调节浇花时间
{
  if(k3==0)
  {
   delay(10);
   if(k3==0)
   {
    while(!k3);
    t2++;
    if(t2>120) t2=120;
   }
  }
  if(k4==0)
  {
   delay(10);
   if(k4==0)
   {
    while(!k4);
    t2--;
    if(t2<20) t2=20;
   }
  }
}  
}
/*******************主函数**********************************/
void main()
{
lcd_int();
Timer0_Init();
while(1)
{
  judge();    //判断模式
  if(!flag1)   //自动模式
  {   
   w_cmd(0x80+0x07);
    w_str(table2);  //液晶显示
   
   tiaojie(); //调节时间
   T_s=t1*60;//自动模式间隔时间,默认12分钟
   EA=1;    //开定时器
  }
  if(flag1) //手动模式
  {   
   w_cmd(0x80+0x07);
    w_str(table3);  //液晶显示
  
   if(k5==0)     //判定是否按下浇水开关
   {
    delay(10);
    if(k5==0)
    {
     while(!k5);
     flag3=~flag3;
    }
   }
   if(flag3==0)   //不浇花
   {
    jh=1;
    EA=0;//关定时器
   }
   if(flag3)    //浇花
   {
    jh=0;   //开继电器
   // count=0; //浇花计时
    EA=1;      //开定时器
    flag=1;    //浇花标志
    t2=50;   //浇花不超过50s
   }
  }
}
}

作者: admin    时间: 2015-7-5 23:39
先生成hex文件 然后反汇编即可
作者: 尘嚣下的逃亡    时间: 2015-7-6 12:39
反汇编
作者: 荆棘鸟lzc    时间: 2015-7-6 19:24
有难度
作者: zcgh6633    时间: 2015-7-6 21:29
admin 发表于 2015-7-5 23:39
先生成hex文件 然后反汇编即可

hex文件生成了 然后怎么进行反汇编呢
作者: jnutian    时间: 2015-7-6 22:10
我也想问
作者: liaolinhui    时间: 2015-7-7 00:06
keil进入调试之后可以看到相应的汇编代码
作者: admin    时间: 2015-7-7 00:18
zcgh6633 发表于 2015-7-6 21:29
hex文件生成了 然后怎么进行反汇编呢

这里下载 单片机反汇编软件:http://www.51hei.com/mcudown/
作者: zhanghanli007    时间: 2015-7-13 16:10
反汇编
作者: liudeyi    时间: 2015-7-13 23:49
楼上说的没错,先生成hex文件,然后反汇编
作者: liuzhaoxin1020    时间: 2016-12-17 12:16
生成hex。然后反汇编,结果不一定准确
作者: zl2168    时间: 2016-12-17 13:33
keil能将c变成汇编




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1