• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

单片机从汇编向C转变的请进来讨论

本人学过一点计算机C,单片机使用的汇编,正在从汇编向C过渡,大家给出这方面的一点经验,大家都来讨论啊,都来贴些好东西吧,我先开头了
全部回复(6)
正序查看
倒序查看
ahai0306
LV.4
2
2005-01-17 15:29
[转贴] 一个试验的汇编与C51程序对比
;    P3.1 数据采集控制
;    P2.6 P2.7 个位 十位显示转换控制
;    P1口接8个开关模拟数据
;    P1.0 - P1.3 为个位开关量输入  
;    P1.4 - P1.7 为十位开关量输入
;    此程序仅供参考
;    功能 P1口接8个开关输入量 4个一组,分别为个位,十位输入
;            P0口接一个数码管,依次显示输入量.P3.1控制是否读入
;            开关量. P2.6 P2.7控制是否显示 个位 或十位    
      ORG 100h
         LJMP STAR
STAR: MOV P1,#0FFH
          SETB P3.1   数据读入标志
       MOV R0,#100     ,循环工作次数
LOOP:JB P3.1, $  P3.1低电平时,采集P1口数据开关量 处理显示阶段不再应答P3.1
         MOV A,P1
         PUSH ACC
         ANL A,#0FH  取个位数值
         MOV R1,A    个位数值保存到R1
         POP ACC
         ANL A,#0F0H  
         SWAP A      高4位转成字节信息
         MOV R2,A   十位数值保存到R2
         MOV  DPTR,#TABLED
         MOV  A,R1
         MOVC A,@A+DPTR
         MOV  P0,A
         CLR  P2.6      个位显示
         ACALL DELAY500MS
         SETB P2.6
         MOV  A,R2
         MOVC A,@A+DPTR
         MOV  P0,A
         CLR  P2.7      十位显示
         ACALL DELAY500MS
         SETB P2.7
         DJNZ R0,LOOP
DELAY500MS: 延时500毫秒子程略
        RET
TABLED: DB 0c0h,0f9h,0a4h,0b0h,99h, 92h, 82h,0f8h
        DB 80H, 90H, 88h, 83h, 0c6h,0a1h,86h,8eh
        END
0
回复
ahai0306
LV.4
3
2005-01-17 15:32
@ahai0306
[转贴]一个试验的汇编与C51程序对比;    P3.1数据采集控制;    P2.6P2.7个位十位显示转换控制;    P1口接8个开关模拟数据;    P1.0-P1.3为个位开关量输入  ;    P1.4-P1.7为十位开关量输入;    此程序仅供参考;    功能P1口接8个开关输入量4个一组,分别为个位,十位输入;            P0口接一个数码管,依次显示输入量.P3.1控制是否读入;            开关量.P2.6P2.7控制是否显示个位或十位          ORG100h        LJMPSTARSTAR:MOVP1,#0FFH          SETBP3.1  数据读入标志      MOVR0,#100    ,循环工作次数LOOP:JBP3.1,$  P3.1低电平时,采集P1口数据开关量处理显示阶段不再应答P3.1        MOVA,P1        PUSHACC        ANLA,#0FH  取个位数值        MOVR1,A    个位数值保存到R1        POPACC        ANLA,#0F0H          SWAPA      高4位转成字节信息        MOVR2,A  十位数值保存到R2        MOV  DPTR,#TABLED        MOV  A,R1        MOVCA,@A+DPTR        MOV  P0,A        CLR  P2.6      个位显示        ACALLDELAY500MS        SETBP2.6        MOV  A,R2        MOVCA,@A+DPTR        MOV  P0,A        CLR  P2.7      十位显示        ACALLDELAY500MS        SETBP2.7        DJNZR0,LOOPDELAY500MS:延时500毫秒子程略        RETTABLED:DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h        DB80H,90H,88h,83h,0c6h,0a1h,86h,8eh        END
[转贴]与上面对应的C程序
#include
typedef unsigned char BYTE;
BYTE code TABLED[16]={0Xc0,0Xf9,0Xa4,0Xb0,0X99, 0X92, 0X82,0X0f8,0X80,0X90,0X88,0X83,0Xc6,0Xa1,0X86,0X8e};
BYTE DATled;
sbit P26=P2^6;
sbit P27=P2^7;
sbit P31=P3^1;
int TIME;

void timedelay(DTIME)
int DTIME;
{
int I;
for(I=0;I<=DTIME;I++);
}

void main()
{
int TEMP;
  P26=1;
P27=1;
P31=1;
P1=0xFF;
TIME=1000;
  while(1) {
  while (P31==0) {
       DATled=P1;
       TEMP=DATled & 0x0f;
       P0=TABLED[TEMP];
       P26=0;
       timedelay(TIME);
       P26=1;
       TEMP=DATled >> 4;
       P0=TABLED[TEMP];
       P27=0;
       timedelay(TIME);
       P27=1;
                            }
           }
}
0
回复
2005-01-19 08:28
@ahai0306
[转贴]与上面对应的C程序#includetypedefunsignedcharBYTE;BYTEcodeTABLED[16]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0X0f8,0X80,0X90,0X88,0X83,0Xc6,0Xa1,0X86,0X8e};BYTEDATled;sbitP26=P2^6;sbitP27=P2^7;sbitP31=P3^1;intTIME;voidtimedelay(DTIME)intDTIME;{intI;for(I=0;I>4;      P0=TABLED[TEMP];      P27=0;      timedelay(TIME);      P27=1;                            }          }}
偶师傅10多年前开始用汇编搞开发.....现在还是用这个,一个新东西开发周期就是半年以上....偶用C搞开发现在就能说比他的速度快了!
0
回复
myzjk
LV.4
5
2005-01-21 16:54
请教有三星单片机S3F9454的C语言编程经验吗?zjk207@163.com
0
回复
rich
LV.4
6
2005-02-24 09:50
@myzjk
请教有三星单片机S3F9454的C语言编程经验吗?zjk207@163.com
我也在找這方面的資料,我用的燒錄/仿真器是: OPENice i500    AIJI SYSTEM Co.,LTD. 其實它也支持 C語言,但苦于找不到相關的程序文件:EW21.EXW..
0
回复
2005-03-08 14:54
@myzjk
请教有三星单片机S3F9454的C语言编程经验吗?zjk207@163.com
你有SAMSUNG S3F9454的汇编方面的经验吗???
请dx赐教关于PWM控制和运算方面的知识啊!
0
回复