|
全文只有5個(gè)漢字
那么長(zhǎng)的代碼,就算是常用的8051C,沒(méi)有注釋都不是那么容易理清你的思路,匯編就更加不用說(shuō)了,而且你還是合泰的匯編,如果不是工作要求,誰(shuí)會(huì)去玩合泰呢?一個(gè)燒錄器就400塊錢(qián),11塊的STC燒錄器它不香嗎?
你多少有點(diǎn)注釋吧,不然誰(shuí)看得明白,就你自己寫(xiě)的都不好找
我以前也用過(guò)合泰,我代碼的風(fēng)格和你這完全不是一個(gè)世界的.......
;============================================================================
;作者:** *
;日期:2016/11/26 *
;功能:測(cè)試HT66F50的按鍵,主要學(xué)習(xí):按鍵去抖動(dòng),間接指針尋址操作 *
;備注:工程設(shè)定:使用4MHZ內(nèi)部晶振,PD端口要設(shè)定為輸入功能,還要設(shè)定上拉電阻 *
;對(duì)于查表,要注意,高位不用的指針一定要定義為0,如果不定義的話,查表結(jié)果會(huì)出錯(cuò) *
;============================================================================
include HT66F50.inc ;包含HT66F50頭文件
S1 EQU PD.0 ;PD0聲明為S1
ds .section 'data' ;數(shù)據(jù)存儲(chǔ)空間
DEL1 DB ? ;在數(shù)據(jù)空間保留一個(gè)字節(jié)的空間,延時(shí)
DEL2 DB ? ;在數(shù)據(jù)空間保留一個(gè)字節(jié)的空間,延時(shí)
DEL3 DB ? ;在數(shù)據(jù)空間保留一個(gè)字節(jié)的空間,延時(shí)
COUNT DB ? ;在數(shù)據(jù)空間保住一個(gè)字節(jié)的空間,顯示計(jì)數(shù)
;============================================================================
cs .SECTION 'code' ;程序存儲(chǔ)空間,從000H開(kāi)始執(zhí)行
ORG 040H ;程序從050H開(kāi)始執(zhí)行
STAR: CLR ACERL ;作為I/O端口使用,不使用ADC輸入引腳功能
CLR C0SEL ;關(guān)閉比較器電路,比較器無(wú)功耗
MOV A,08H ;比較輸出不連接,作為單獨(dú)的I/O端口使用
MOV CP1C,A ;關(guān)閉比較器
MOV CP0C,A ;關(guān)閉比較器
CLR PCC ;PC 作為輸出端口
CLR PAC ;PA 作為輸出端口
SET PDC ;PD 作為輸入端口
SET PDPU ;PD 加上上拉電阻
MAIN: MOV A,10
MOV COUNT,A ;顯示的個(gè)數(shù)為10
MOV A,OFFSET TAB_7_SEG ;取得七段碼顯示表格的表頭地址
MOV TBLP,A ;表頭地址加載到查表指針低位,小于255的數(shù)據(jù)都只用到低位指針
MOV A,1FH ;HT66F50最后一頁(yè)地址是1FF8H,所以,高位就是1FH
MOV TBHP,A ;查表指針的高位一定要確定,不能不設(shè)定,不然的話,查表會(huì)出錯(cuò)
LOOP: TABRDC PC ;查表,并在PC顯示
MOV A,TBLH ;查表結(jié)果的高位保存到A
MOV PA,A ;高位的結(jié)果在PA輸出
SZ S1 ;S1是0就跳過(guò)下一條指令,1:按下,0:沒(méi)按下
JMP LOOP ;S1為1,沒(méi)有按下按鍵,跳去顯示
CALL DELAY ;S1按下,調(diào)用50mS延時(shí),去抖動(dòng)
SZ S1 ;S1是0就跳過(guò)下一條指令,這是去抖動(dòng)之后的動(dòng)作,1:按鍵松開(kāi),0:按鍵沒(méi)松開(kāi)
JMP LOOP ;去顯示,檢測(cè)50mS之后,如果按鍵還沒(méi)有松開(kāi),就是按下,否則,視為抖動(dòng)
INC TBLP ;查表指針加1
SDZ COUNT ;COUNT減1,是0就跳過(guò)下一條指令
JMP LOOP ;去顯示
JMP MAIN ;重新開(kāi)始
;===========================================================================================
;******************************************************************************************
;合泰指令系統(tǒng)是4個(gè)時(shí)鐘為一個(gè)指令周期,4MHZ的晶振,一個(gè)指令是1uS
;這是一個(gè)50mS的延時(shí)程序,由A決定了總延時(shí)時(shí)間
DELAY: MOV A,1
MOV DEL1,A ;這時(shí)個(gè)性DEL1的值,可以改變延時(shí)的時(shí)間為50mS的整倍數(shù)
DLOOP1: MOV A,200D ;1
MOV DEL2,A ;1
DLOOP2: MOV A,167D ;1
MOV DEL3,A ;1 *****************************************************
DLOOP3: SDZ DEL3 ;1X167=167,*DLOOP3的指令執(zhí)行次數(shù)是499次,時(shí)間是499uS=0.5mS *
JMP DLOOP3 ;2X166=132 *以后,如果是要改變延時(shí)的話,可以通過(guò)改變A的值來(lái)改變 *
SDZ DEL2 ;1 *其它指令的執(zhí)行時(shí)間可以補(bǔ)償最終的時(shí)間誤差 *
JMP DLOOP2 ;2 *****************************************************
SDZ DEL1 ;1
JMP DLOOP1 ;2
RET
;====================================================================================
;這個(gè)表是一個(gè)七段碼顯示表,自己焊的學(xué)習(xí)板上用的就是這個(gè)
ORG LASTPAGE ;把表的數(shù)據(jù)放在最后一頁(yè),LASTPAGE是最后一頁(yè)的偽指令
TAB_7_SEG:
DC 001+00010001B SHL 8 ;0
DC 002+10011111B SHL 8 ;1
DC 004+00110010B SHL 8 ;2
DC 008+00010110B SHL 8 ;3
DC 016+10011100B SHL 8 ;4
DC 032+01010100B SHL 8 ;5
DC 064+01010000B SHL 8 ;6
DC 128+00011111B SHL 8 ;7
DC 0F0H+00010000B SHL 8 ;8
DC 0FFH+00010100B SHL 8 ;9
;對(duì)于30H+000101000B SHL 8
;這是一個(gè)16位的表,運(yùn)行的結(jié)果是30H被放在表的低位,00010100B被放在高位
;SHL在二元運(yùn)算上的等級(jí)要比+二元運(yùn)算的等級(jí)高,所以,先是左移,然后才加
;==================================================================================
END
|
|