打印

一个从汇编转C的编程需要那些改进?

[复制链接]
1804|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jerkoh|  楼主 | 2008-3-7 16:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一直用汇编写程序,C有点熟悉,但一直没正真写C代码
下面是自己刚写的一段C   (STC EEPROM的读写程序)
代码通过编译和调试
主要是请大家帮我提点建议,哪些地方需要改进和注意的
还有这样像我这么写会出现什么以外问题吗。



#include "reg52.h"
#include "intrins.h" 

#define  isp_iap_byte_read       1;   
#define  isp_iap_byte_program    2;   
#define  isp_iap_sector_erase    3;
#define   time_wait              1;//<40M=0   <20M=1  <10M=2  <5M=3

sfr isp_data  = 0xe2;  ////ISP_DATA  使用大写
sfr isp_addrh = 0xe3;  ////ISP_ADDRH
sfr  isp_addrl = 0xe4; ////ISP_ADDRL
sfr  isp_cmd   = 0xe5; ////ISP_CMD
sfr  isp_trig  = 0xe6; ////ISP_TRIG
sfr isp_contr = 0xe7;  //// ISP_CONTR       

sbit red0     = P1^5;
sbit blue     = P1^6;
sbit red1     = P1^7;
bit  rev_**;

void init_uart();
unsigned char iap_read(unsigned char h0,unsigned char l0);
void  iap_write(unsigned char h1,unsigned char l1,unsigned char data_one);
void  iap_erase(unsigned char h2,unsigned char l2);
unsigned char mavis;
//**********************************************************************
void main(void)
{
 unsigned int i;
 unsigned char rd_byte ,addrh,addrl,data_1;    
 init_uart();

  while(1)
  {
      if(rev_**==1)
    {
          // red0=0;
          // red1=1;
           addrh=0x80;
           addrl=0x00;

           rd_byte=iap_read(addrh,addrl);

         if(rd_byte==0x55)
           {
            // red0=0;
            // red1=0;

           }
        else
           {
           red0=0;
           red1=1;
           addrh=0x80;
           addrl=0x00;
                     for(i=0;i<=6000;i++); //时间调整主要看灯变化。

           iap_erase(addrh,addrl);
           
           addrh=0x80;
           addrl=0x00;
           data_1=0x56;  //与0X55不同,这样串口助手发77就可以看灯的变化
           _nop_();
           _nop_();
           _nop_();
           iap_write(addrh,addrl,data_1);
           red1=0;
           red0=1; 
            
           }
       rev_**=0;        
     }
           

   }
}
//**********************************************************************
void init_uart()
{
  P1   = 0xff;
  PCON = 0x00;
  TMOD = 0x20;
  SCON = 0x50;
  TH1  = 0xfd;
  TL1  = 0xfd;
  EA   = 1;
  TR1  = 1;
  ES   = 1;
  
}
//**********************************************************************
  void UART_ISR(void) interrupt 4
{
    if(!TI)
     {
      RI = 0;
      mavis=SBUF;
      if(mavis==0x77)         ;接收命令0X77
           {blue=~blue;
            rev_**=1;
           }
     // rev_**=0;                
     }    
     TI=0;
     

}
//**********************************************************************


//**********************************************************************
//read
unsigned char iap_read(unsigned char h0,unsigned char l0)
{ unsigned char i;
 isp_addrh=h0;
 isp_addrl=l0;
 EA=0;
 isp_contr=time_wait;
 isp_contr|=0x80;
 isp_cmd=isp_iap_byte_read;
 isp_trig=0x46;
 isp_trig=0xb9;
  _nop_();
 i=isp_data;
 isp_contr =0;
 isp_cmd   =0;
 isp_trig  =0;
 isp_addrh =0;
 isp_addrl =0;
 EA=1;
 return(i);


}
//**********************************************************************

//**********************************************************************
//write
void  iap_write(unsigned char h1,unsigned char l1,unsigned char data_one)
{
 isp_data=data_one;
 isp_addrh=h1;
 isp_addrl=l1;
 EA=0;
 isp_contr=time_wait;
 isp_contr|=0x80;
 isp_cmd=isp_iap_byte_program;
 isp_trig=0x46;
 isp_trig=0xb9;
  _nop_();
 isp_contr =0;
 isp_cmd   =0;
 isp_trig  =0;
 isp_addrh =0;
 isp_addrl =0;
 EA=1;




}
//**********************************************************************

//**********************************************************************
//erase
void  iap_erase(unsigned char h2,unsigned char l2)
{

 isp_addrh=h2;
 isp_addrl=l2;
 EA=0;
 isp_contr=time_wait;
 isp_contr|=0x80;
 isp_cmd=isp_iap_sector_erase;
 isp_trig=0x46;
 isp_trig=0xb9;
  _nop_();
 isp_contr =0;
 isp_cmd   =0;
 isp_trig  =0;
 isp_addrh =0;
 isp_addrl =0;
 EA=1;

}
//**********************************************************************

相关帖子

沙发
ayb_ice| | 2008-3-7 16:51 | 只看该作者

sfr定义一般大写

使用特权

评论回复
板凳
jerkoh|  楼主 | 2008-3-7 16:55 | 只看该作者

re

谢谢,马上改

使用特权

评论回复
地板
菜人菜语| | 2008-3-7 20:40 | 只看该作者

要想代码中带阳刚之气,要看看数据结构,再看看编程精粹。

使用特权

评论回复
5
HWM| | 2008-3-7 20:43 | 只看该作者

LS:为何要有阳刚之气?能否详解之。

使用特权

评论回复
6
mohanwei| | 2008-3-7 20:49 | 只看该作者

好像还真的觉得这段代码有点阴柔之气……

使用特权

评论回复
7
xwj| | 2008-3-7 21:09 | 只看该作者

使用特权

评论回复
8
jerkoh|  楼主 | 2008-3-7 22:19 | 只看该作者

re

被菜人菜语一说倒觉得是缺了点阳刚之气!
是不是大写字母头太少的原因啊
小写看上去比较柔弱呢?哈哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

116

主题

1401

帖子

2

粉丝