單片機(jī)從匯編向C轉(zhuǎn)變的請(qǐng)進(jìn)來(lái)討論
本人學(xué)過(guò)一點(diǎn)計(jì)算機(jī)C,單片機(jī)使用的匯編,正在從匯編向C過(guò)渡,大家給出這方面的一點(diǎn)經(jīng)驗(yàn),大家都來(lái)討論啊,都來(lái)貼些好東西吧,我先開(kāi)頭了
全部回復(fù)(6)
正序查看
倒序查看
[轉(zhuǎn)貼] 一個(gè)試驗(yàn)的匯編與C51程序?qū)Ρ?
; P3.1 數(shù)據(jù)采集控制
; P2.6 P2.7 個(gè)位 十位顯示轉(zhuǎn)換控制
; P1口接8個(gè)開(kāi)關(guān)模擬數(shù)據(jù)
; P1.0 - P1.3 為個(gè)位開(kāi)關(guān)量輸入
; P1.4 - P1.7 為十位開(kāi)關(guān)量輸入
; 此程序僅供參考
; 功能 P1口接8個(gè)開(kāi)關(guān)輸入量 4個(gè)一組,分別為個(gè)位,十位輸入
; P0口接一個(gè)數(shù)碼管,依次顯示輸入量.P3.1控制是否讀入
; 開(kāi)關(guān)量. P2.6 P2.7控制是否顯示 個(gè)位 或十位
ORG 100h
LJMP STAR
STAR: MOV P1,#0FFH
SETB P3.1 數(shù)據(jù)讀入標(biāo)志
MOV R0,#100 ,循環(huán)工作次數(shù)
LOOP:JB P3.1, $ P3.1低電平時(shí),采集P1口數(shù)據(jù)開(kāi)關(guān)量 處理顯示階段不再應(yīng)答P3.1
MOV A,P1
PUSH ACC
ANL A,#0FH 取個(gè)位數(shù)值
MOV R1,A 個(gè)位數(shù)值保存到R1
POP ACC
ANL A,#0F0H
SWAP A 高4位轉(zhuǎn)成字節(jié)信息
MOV R2,A 十位數(shù)值保存到R2
MOV DPTR,#TABLED
MOV A,R1
MOVC A,@A+DPTR
MOV P0,A
CLR P2.6 個(gè)位顯示
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: 延時(shí)500毫秒子程略
RET
TABLED: DB 0c0h,0f9h,0a4h,0b0h,99h, 92h, 82h,0f8h
DB 80H, 90H, 88h, 83h, 0c6h,0a1h,86h,8eh
END
; P3.1 數(shù)據(jù)采集控制
; P2.6 P2.7 個(gè)位 十位顯示轉(zhuǎn)換控制
; P1口接8個(gè)開(kāi)關(guān)模擬數(shù)據(jù)
; P1.0 - P1.3 為個(gè)位開(kāi)關(guān)量輸入
; P1.4 - P1.7 為十位開(kāi)關(guān)量輸入
; 此程序僅供參考
; 功能 P1口接8個(gè)開(kāi)關(guān)輸入量 4個(gè)一組,分別為個(gè)位,十位輸入
; P0口接一個(gè)數(shù)碼管,依次顯示輸入量.P3.1控制是否讀入
; 開(kāi)關(guān)量. P2.6 P2.7控制是否顯示 個(gè)位 或十位
ORG 100h
LJMP STAR
STAR: MOV P1,#0FFH
SETB P3.1 數(shù)據(jù)讀入標(biāo)志
MOV R0,#100 ,循環(huán)工作次數(shù)
LOOP:JB P3.1, $ P3.1低電平時(shí),采集P1口數(shù)據(jù)開(kāi)關(guān)量 處理顯示階段不再應(yīng)答P3.1
MOV A,P1
PUSH ACC
ANL A,#0FH 取個(gè)位數(shù)值
MOV R1,A 個(gè)位數(shù)值保存到R1
POP ACC
ANL A,#0F0H
SWAP A 高4位轉(zhuǎn)成字節(jié)信息
MOV R2,A 十位數(shù)值保存到R2
MOV DPTR,#TABLED
MOV A,R1
MOVC A,@A+DPTR
MOV P0,A
CLR P2.6 個(gè)位顯示
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: 延時(shí)500毫秒子程略
RET
TABLED: DB 0c0h,0f9h,0a4h,0b0h,99h, 92h, 82h,0f8h
DB 80H, 90H, 88h, 83h, 0c6h,0a1h,86h,8eh
END
0
回復(fù)
@ahai0306
[轉(zhuǎn)貼]一個(gè)試驗(yàn)的匯編與C51程序?qū)Ρ? P3.1數(shù)據(jù)采集控制; P2.6P2.7個(gè)位十位顯示轉(zhuǎn)換控制; P1口接8個(gè)開(kāi)關(guān)模擬數(shù)據(jù); P1.0-P1.3為個(gè)位開(kāi)關(guān)量輸入 ; P1.4-P1.7為十位開(kāi)關(guān)量輸入; 此程序僅供參考; 功能P1口接8個(gè)開(kāi)關(guān)輸入量4個(gè)一組,分別為個(gè)位,十位輸入; P0口接一個(gè)數(shù)碼管,依次顯示輸入量.P3.1控制是否讀入; 開(kāi)關(guān)量.P2.6P2.7控制是否顯示個(gè)位或十位 ORG100h LJMPSTARSTAR:MOVP1,#0FFH SETBP3.1 數(shù)據(jù)讀入標(biāo)志 MOVR0,#100 ,循環(huán)工作次數(shù)LOOP:JBP3.1,$ P3.1低電平時(shí),采集P1口數(shù)據(jù)開(kāi)關(guān)量處理顯示階段不再應(yīng)答P3.1 MOVA,P1 PUSHACC ANLA,#0FH 取個(gè)位數(shù)值 MOVR1,A 個(gè)位數(shù)值保存到R1 POPACC ANLA,#0F0H SWAPA 高4位轉(zhuǎn)成字節(jié)信息 MOVR2,A 十位數(shù)值保存到R2 MOV DPTR,#TABLED MOV A,R1 MOVCA,@A+DPTR MOV P0,A CLR P2.6 個(gè)位顯示 ACALLDELAY500MS SETBP2.6 MOV A,R2 MOVCA,@A+DPTR MOV P0,A CLR P2.7 十位顯示 ACALLDELAY500MS SETBP2.7 DJNZR0,LOOPDELAY500MS:延時(shí)500毫秒子程略 RETTABLED:DB0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h DB80H,90H,88h,83h,0c6h,0a1h,86h,8eh END
[轉(zhuǎn)貼]與上面對(duì)應(yīng)的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
回復(fù)
@ahai0306
[轉(zhuǎn)貼]與上面對(duì)應(yīng)的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多年前開(kāi)始用匯編搞開(kāi)發(fā).....現(xiàn)在還是用這個(gè),一個(gè)新東西開(kāi)發(fā)周期就是半年以上....偶用C搞開(kāi)發(fā)現(xiàn)在就能說(shuō)比他的速度快了!
0
回復(fù)