單片機從匯編向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
回復