单片机从汇编向C转变的请进来讨论
本人学过一点计算机C,单片机使用的汇编,正在从汇编向C过渡,大家给出这方面的一点经验,大家都来讨论啊,都来贴些好东西吧,我先开头了
全部回复(6)
正序查看
倒序查看
现在还没有回复呢,说说你的想法
[转贴] 一个试验的汇编与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
; 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
[转贴]一个试验的汇编与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;
}
}
}
#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
回复
提示
@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
回复
提示