4位八段數(shù)碼管的十進(jìn)制加計(jì)數(shù)仿真實(shí)驗(yàn),程序采用匯編語(yǔ)言編寫(xiě)。此程序在仿真軟件上與EDN-51實(shí)驗(yàn)板上均通過(guò)。仿真圖中的數(shù)碼管位驅(qū)動(dòng)采用74HC04,如按EDN-51板上用想同的PNP三極管驅(qū)動(dòng)在仿真軟件上則無(wú)法正常顯示。程序共分5塊,STAR0為數(shù)據(jù)初始化,STAR2為計(jì)數(shù)子程序,STAR3為4位數(shù)碼管動(dòng)態(tài)顯示子程序,STAR4為按鍵掃描子程序,STS00是延時(shí)子程序。由于EDN-51實(shí)驗(yàn)板上沒(méi)裝BCD譯碼器,所以編寫(xiě)程序比較煩瑣。
程序如下:
ORG 0000H LJMP STAR0 ;轉(zhuǎn)程序 SRAR0ORG 0200H ;程序地址 0200HSTAR0: CLR 00 ;位 00 清 0 MOV P1,#0FFH ;#0FFH-->P1 MOV P2,#0FH ;#0FH-->P2 MOV P0,#0FFH ;#0FFH-->P0 MOV 30H,#00H ;#00H-->30H MOV 31H,#00H ;#00H-->30H MOV 32H,#00H ;#00H-->30H MOV 33H,#00H ;#00H-->30H LJMP STAR3 ;轉(zhuǎn)程序 SRAR3STAR2: MOV A,#0AH ;#0AH-->A INC 30H ;30H+1 CJNE A,30H,STJE ;30H 與 A 比較,不等轉(zhuǎn)移 STJE MOV 30H,#00H ;#00H-->30H INC 31H ;31H+1 CJNE A,31H,STJE ;31H 與 A 比較,不等轉(zhuǎn)移 STJE MOV 31H,#00H ;#00H-->31H INC 32H ;32H+1 CJNE A,32H,STJE ;32H 與 A 比較,不等轉(zhuǎn)移 STJE MOV 32H,#00H ;#00H-->32H INC 33H ;33H+1 CJNE A,33H,STJE ;33H 與 A 比較,不等轉(zhuǎn)移 STJE MOV 33H,#00H ;#00H-->33H MOV 32H,#00H ;#00H-->32H MOV 31H,#00H ;#00H-->31H MOV 30H,#00H ;#00H-->30HSTJE: RET ;子程序調(diào)用返回STAR3: MOV R0,#30H ;#30H-->R0 MOV R6,#0F7H ;#0F7H-->R6SMG0: MOV P1,#0FFH ;#0FFH-->P1 MOV A,R6 ;R6-->A MOV P1,A ;A-->P1 RR A ;A向右移一位 MOV R6,A ;A-->R6 MOV A,@R0 ;@R0-->A ADD A,#04H ;#04H-->A MOVC A,@A+PC ;A+PC--> MOV P0,A ;A-->P0 AJMP SMG1 ;轉(zhuǎn)程序 SMG1SDATA: DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H SMG1: LCALL STAR4 ;轉(zhuǎn)子程序 SRAR4 LCALL STS00 ;轉(zhuǎn)子程序 STS00 INC R0 ;R0+1 CJNE R6,#07FH,SMG0 ;#07FH 與 R6 比較,不等轉(zhuǎn)移 SMG0 AJMP STAR3 ;轉(zhuǎn)程序 SRAR3STAR4: JNB P2.0,ST1 ;P2.0=0 轉(zhuǎn) ST1 CLR 00 ;位 00 清 0 SJMP ST3 ;轉(zhuǎn)ST3ST1: JNB 00,ST2 ;位 00=0 轉(zhuǎn) ST2 SJMP ST3 ;轉(zhuǎn) ST3ST2: LCALL STAR2 ;調(diào)子程序 STAR2 SETB 00 ;位 00 置 1ST3: RET ;子程序調(diào)用返回ORG 0100H ;地址 0100HSTS00: MOV 60H,#003H ;#003H-->60H (211)DE001: MOV 61H,#0FFH ;#0FFH-->61H (255)DE002: DJNZ 61H,DE002 ;61H 減 1 不等于 0 轉(zhuǎn) DE002 DJNZ 60H,DE001 ;60H 減 1 不等于 0 轉(zhuǎn) DE001 RET ;子程序調(diào)用返回 END ;結(jié)束
上次的程序共有293句,經(jīng)小組成員建議,本人經(jīng)幾天的研究寫(xiě)了下面的這個(gè)程序,現(xiàn)在的程序用了63句,精簡(jiǎn)了230句。功能沒(méi)有減。如誰(shuí)有更簡(jiǎn)練的程序,請(qǐng)發(fā)上來(lái),大家一起學(xué)習(xí)。
4位八段數(shù)碼管的十進(jìn)制加計(jì)數(shù)仿真實(shí)驗(yàn)(含電路圖和仿真文件)
標(biāo)簽:
數(shù)碼管
十進(jìn)制
仿真實(shí)驗(yàn)
仿真
上傳時(shí)間:
2013-10-11
上傳用戶:sssl
第1 章 體系結(jié)構(gòu) ARM經(jīng)典300問(wèn)與答第1 問(wèn):Q:請(qǐng)問(wèn)在初始化CPU 堆棧的時(shí)候一開(kāi)始在執(zhí)行mov r0, LR 這句指令時(shí)處理器是什么模式A:復(fù)位后的模式,即管理模式.第2 問(wèn):Q:請(qǐng)教:MOV 中的8 位圖立即數(shù),是怎么一回事 0xF0000001 是怎么來(lái)的A:是循環(huán)右移,就是一個(gè)0—255 之間的數(shù)左移或右移偶數(shù)位的來(lái)的,也就是這個(gè)數(shù)除以4一直除, 直到在0-255 的范圍內(nèi)它是整數(shù)就說(shuō)明是可以的!A:8 位數(shù)(0-255)循環(huán)左移或循環(huán)右移偶數(shù)位得到的,F0000001 既是0x1F 循環(huán)右移4 位,符合規(guī)范,所以是正確的.這樣做是因?yàn)橹噶铋L(zhǎng)度的限制,不可能把32 位立即數(shù)放在32 位的指令中.移位偶數(shù)也是這個(gè)原因.可以看一看ARM 體系結(jié)構(gòu)(ADS 自帶的英文文檔)的相關(guān)部分.第3 問(wèn):Q:請(qǐng)教:《ARM 微控制器基礎(chǔ)與實(shí)戰(zhàn)》2.2.1 節(jié)關(guān)于第2 個(gè)操作數(shù)的描述中有這么一段:#inmed_8r 常數(shù)表達(dá)式.該常數(shù)必須對(duì)應(yīng)8 位位圖,即常熟是由一個(gè)8 位的常數(shù)循環(huán)移位偶數(shù)位得到.合法常量:0x3FC,0,0xF0000000,200,0xF0000001.非法常量:0x1FE,511,0xFFFF,0x1010,0xF0000010.常數(shù)表達(dá)式應(yīng)用舉例:......LDR R0,[R1],#-4 ;讀取 R1 地址上的存儲(chǔ)器單元內(nèi)容,且 R1 = R1-4針對(duì)這一段,我的疑問(wèn):1. 即常數(shù)是由一個(gè)8 位的常數(shù)循環(huán)移位偶數(shù)位得到,這句話如何理解2. 該常數(shù)必須對(duì)應(yīng)8 位位圖,既然是8 位位圖,那么取值為0-255,怎么0x3FC 這種超出255 的數(shù)是合法常量呢3. 所舉例子中,合法常量和非法常量是怎么區(qū)分的 如0x3FC 合法,而0x1FE 卻非法0xF0000000,0xF0000001 都合法,而0xF0000010 又變成了非法4. 對(duì)于匯編語(yǔ)句 LDR R0,[R1],#-4,是先將R1 的值減4 結(jié)果存入R1,然后讀取R1 所指單元的 值到R0,還是先讀取R1 到R0,然后再將R1 減4 結(jié)果存入R1A:提示,任何常數(shù)都可用底數(shù)*2 的n 次冪 來(lái)表示.1. ARM 結(jié)構(gòu)中,只有8bits 用來(lái)表示底數(shù),因此底數(shù)必須是8 位位圖.2. 8 位位圖循環(huán)之后得到常數(shù),并非只能是8 位.3. 0xF0000010 底數(shù)是9 位,不能表示.4. LDR R0, [R1], #-4 是后索引,即先讀,再減.可以看一看ARM 體系結(jié)構(gòu)對(duì)相關(guān)尋址方式的說(shuō)明.
標(biāo)簽:
ARM
300
上傳時(shí)間:
2013-11-22
上傳用戶:1109003457