;片內(nèi)RAM初始化子程序 IBCLR :MOV A,R0 MOV R1,A CLR AIBC1 :MOV @R1,A INC R1 DJNZ R7,IBC1 RET ;片外RAM初始化子程序 EBCLR1 :MOV A,ADDPL MOV DPL,A MOV A,ADDPH MOV DPH,A CLR CEBC11 :MOVX @DPTR,A INC DPTR DJNZ R7,EBC11 RET ;片外RAM初始化子程序(雙字節(jié)個(gè)單元) EBCLR2 :MOV A,ADDPL MOV DPL,A MOV A,ADDPH MOV DPH,A MOV A,R7 JZ EBC21 INC R6EBC21 :CLR A MOVX @DPTR,A INC DPTR DJNZ R7,EBC21 DJNZ R6,EBC21 RET ;內(nèi)部RAM數(shù)據(jù)復(fù)制程序;入口 :R0,R7;占用資源:A;堆棧需求:2字節(jié);出口 :R1 IBMOV :MOV A,R0 ADD A,R7 MOV R0,A MOV A,R1 ADD A,R7 MOV R1,AIBM1 :DEC R0 DEC R1 MOV A,@R0 MOV @R1,A DJNZ R7,IBM1 RET ;外部RAM數(shù)據(jù)復(fù)制程序;入口 :ADDPH,ADDPL,R7;占用資源:ACC;堆棧需求:2字節(jié);出口 :R0,R1 EBMOV1 :MOV A,ADDPL ADD A,R7 MOV DPL,A CLR A ADDC A,ADDPH MOV DPH,A MOV A,R7 ADD A,R1 XCH A,R0 ADDC A,#00H MOV P2,AEBM11 :DEC R0 CJNE R0,#0FFH,EBM12 DEC P2EBM12 :DEC DPL MOV A,DPL CJNE A,#0FFH,EBM13 DEC DPHEBM13 :MOVX A,@R0 MOVX @DPTR,A DJNZ R7,EBM11 RET ;外部RAM數(shù)據(jù)復(fù)制程序
上傳時(shí)間: 2013-10-30
上傳用戶:bs2005
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
九.輸入/輸出保護(hù)為了支持多任務(wù),80386不僅要有效地實(shí)現(xiàn)任務(wù)隔離,而且還要有效地控制各任務(wù)的輸入/輸出,避免輸入/輸出沖突。本文將介紹輸入輸出保護(hù)。 這里下載本文源代碼。 <一>輸入/輸出保護(hù)80386采用I/O特權(quán)級(jí)IPOL和I/O許可位圖的方法來(lái)控制輸入/輸出,實(shí)現(xiàn)輸入/輸出保護(hù)。 1.I/O敏感指令輸入輸出特權(quán)級(jí)(I/O Privilege Level)規(guī)定了可以執(zhí)行所有與I/O相關(guān)的指令和訪問(wèn)I/O空間中所有地址的最外層特權(quán)級(jí)。IOPL的值在如下圖所示的標(biāo)志寄存器中。 標(biāo) 志寄存器 BIT31—BIT18 BIT17 BIT16 BIT15 BIT14 BIT13—BIT12 BIT11 BIT10 BIT9 BIT8 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 00000000000000 VM RF 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF I/O許可位圖規(guī)定了I/O空間中的哪些地址可以由在任何特權(quán)級(jí)執(zhí)行的程序所訪問(wèn)。I/O許可位圖在任務(wù)狀態(tài)段TSS中。 I/O敏感指令 指令 功能 保護(hù)方式下的執(zhí)行條件 CLI 清除EFLAGS中的IF位 CPL<=IOPL STI 設(shè)置EFLAGS中的IF位 CPL<=IOPL IN 從I/O地址讀出數(shù)據(jù) CPL<=IOPL或I/O位圖許可 INS 從I/O地址讀出字符串 CPL<=IOPL或I/O位圖許可 OUT 向I/O地址寫(xiě)數(shù)據(jù) CPL<=IOPL或I/O位圖許可 OUTS 向I/O地址寫(xiě)字符串 CPL<=IOPL或I/O位圖許可 上表所列指令稱為I/O敏感指令,由于這些指令與I/O有關(guān),并且只有在滿足所列條件時(shí)才可以執(zhí)行,所以把它們稱為I/O敏感指令。從表中可見(jiàn),當(dāng)前特權(quán)級(jí)不在I/O特權(quán)級(jí)外層時(shí),可以正常執(zhí)行所列的全部I/O敏感指令;當(dāng)特權(quán)級(jí)在I/O特權(quán)級(jí)外層時(shí),執(zhí)行CLI和STI指令將引起通用保護(hù)異常,而其它四條指令是否能夠被執(zhí)行要根據(jù)訪問(wèn)的I/O地址及I/O許可位圖情況而定(在下面論述),如果條件不滿足而執(zhí)行,那么將引起出錯(cuò)碼為0的通用保護(hù)異常。 由于每個(gè)任務(wù)使用各自的EFLAGS值和擁有自己的TSS,所以每個(gè)任務(wù)可以有不同的IOPL,并且可以定義不同的I/O許可位圖。注意,這些I/O敏感指令在實(shí)模式下總是可執(zhí)行的。 2.I/O許可位圖如果只用IOPL限制I/O指令的執(zhí)行是很不方便的,不能滿足實(shí)際要求需要。因?yàn)檫@樣做會(huì)使得在特權(quán)級(jí)3執(zhí)行的應(yīng)用程序要么可訪問(wèn)所有I/O地址,要么不可訪問(wèn)所有I/O地址。實(shí)際需要與此剛好相反,只允許任務(wù)甲的應(yīng)用程序訪問(wèn)部分I/O地址,只允許任務(wù)乙的應(yīng)用程序訪問(wèn)另一部分I/O地址,以避免任務(wù)甲和任務(wù)乙在訪問(wèn)I/O地址時(shí)發(fā)生沖突,從而避免任務(wù)甲和任務(wù)乙使用使用獨(dú)享設(shè)備時(shí)發(fā)生沖突。 因此,在IOPL的基礎(chǔ)上又采用了I/O許可位圖。I/O許可位圖由二進(jìn)制位串組成。位串中的每一位依次對(duì)應(yīng)一個(gè)I/O地址,位串的第0位對(duì)應(yīng)I/O地址0,位串的第n位對(duì)應(yīng)I/O地址n。如果位串中的第位為0,那么對(duì)應(yīng)的I/O地址m可以由在任何特權(quán)級(jí)執(zhí)行的程序訪問(wèn);否則對(duì)應(yīng)的I/O地址m只能由在IOPL特權(quán)級(jí)或更內(nèi)層特權(quán)級(jí)執(zhí)行的程序訪問(wèn)。如果在I/O外層特權(quán)級(jí)執(zhí)行的程序訪問(wèn)位串中位值為1的位所對(duì)應(yīng)的I/O地址,那么將引起通用保護(hù)異常。 I/O地址空間按字節(jié)進(jìn)行編址。一條I/O指令最多可涉及四個(gè)I/O地址。在需要根據(jù)I/O位圖決定是否可訪問(wèn)I/O地址的情況下,當(dāng)一條I/O指令涉及多個(gè)I/O地址時(shí),只有這多個(gè)I/O地址所對(duì)應(yīng)的I/O許可位圖中的位都為0時(shí),該I/O指令才能被正常執(zhí)行,如果對(duì)應(yīng)位中任一位為1,就會(huì)引起通用保護(hù)異常。 80386支持的I/O地址空間大小是64K,所以構(gòu)成I/O許可位圖的二進(jìn)制位串最大長(zhǎng)度是64K個(gè)位,即位圖的有效部分最大為8K字節(jié)。一個(gè)任務(wù)實(shí)際需要使用的I/O許可位圖大小通常要遠(yuǎn)小于這個(gè)數(shù)目。 當(dāng)前任務(wù)使用的I/O許可位圖存儲(chǔ)在當(dāng)前任務(wù)TSS中低端的64K字節(jié)內(nèi)。I/O許可位圖總以字節(jié)為單位存儲(chǔ),所以位串所含的位數(shù)總被認(rèn)為是8的倍數(shù)。從前文中所述的TSS格式可見(jiàn),TSS內(nèi)偏移66H的字確定I/O許可位圖的開(kāi)始偏移。由于I/O許可位圖最長(zhǎng)可達(dá)8K字節(jié),所以開(kāi)始偏移應(yīng)小于56K,但必須大于等于104,因?yàn)門(mén)SS中前104字節(jié)為T(mén)SS的固定格式,用于保存任務(wù)的狀態(tài)。 1.I/O訪問(wèn)許可檢查細(xì)節(jié)保護(hù)模式下處理器在執(zhí)行I/O指令時(shí)進(jìn)行許可檢查的細(xì)節(jié)如下所示。 (1)若CPL<=IOPL,則直接轉(zhuǎn)步驟(8);(2)取得I/O位圖開(kāi)始偏移;(3)計(jì)算I/O地址對(duì)應(yīng)位所在字節(jié)在I/O許可位圖內(nèi)的偏移;(4)計(jì)算位偏移以形成屏蔽碼值,即計(jì)算I/O地址對(duì)應(yīng)位在字節(jié)中的第幾位;(5)把字節(jié)偏移加上位圖開(kāi)始偏移,再加1,所得值與TSS界限比較,若越界,則產(chǎn)生出錯(cuò)碼為0的通用保護(hù)故障;(6)若不越界,則從位圖中讀對(duì)應(yīng)字節(jié)及下一個(gè)字節(jié);(7)把讀出的兩個(gè)字節(jié)與屏蔽碼進(jìn)行與運(yùn)算,若結(jié)果不為0表示檢查未通過(guò),則產(chǎn)生出錯(cuò)碼為0的通用保護(hù)故障;(8)進(jìn)行I/O訪問(wèn)。設(shè)某一任務(wù)的TSS段如下: TSSSEG SEGMENT PARA USE16 TSS <> ;TSS低端固定格式部分 DB 8 DUP(0) ;對(duì)應(yīng)I/O端口00H—3FH DB 10000000B ;對(duì)應(yīng)I/O端口40H—47H DB 01100000B ;對(duì)用I/O端口48H—4FH DB 8182 DUP(0FFH) ;對(duì)應(yīng)I/O端口50H—0FFFFH DB 0FFH ;位圖結(jié)束字節(jié)TSSLen = $TSSSEG ENDS 再假設(shè)IOPL=1,CPL=3。那么如下I/O指令有些能正常執(zhí)行,有些會(huì)引起通用保護(hù)異常: in al,21h ;(1)正常執(zhí)行 in al,47h ;(2)引起異常 out 20h,al ;(3)正常實(shí)行 out 4eh,al ;(4)引起異常 in al,20h ;(5)正常執(zhí)行 out 20h,eax ;(6)正常執(zhí)行 out 4ch,ax ;(7)引起異常 in ax,46h ;(8)引起異常 in eax,42h ;(9)正常執(zhí)行 由上述I/O許可檢查的細(xì)節(jié)可見(jiàn),不論是否必要,當(dāng)進(jìn)行許可位檢查時(shí),80386總是從I/O許可位圖中讀取兩個(gè)字節(jié)。目的是為了盡快地執(zhí)行I/O許可檢查。一方面,常常要讀取I/O許可位圖的兩個(gè)字節(jié)。例如,上面的第(8)條指令要對(duì)I/O位圖中的兩個(gè)位進(jìn)行檢查,其低位是某個(gè)字節(jié)的最高位,高位是下一個(gè)字節(jié)的最低位。可見(jiàn)即使只要檢查兩個(gè)位,也可能需要讀取兩個(gè)字節(jié)。另一方面,最多檢查四個(gè)連續(xù)的位,即最多也只需讀取兩個(gè)字節(jié)。所以每次要讀取兩個(gè)字節(jié)。這也是在判別是否越界時(shí)再加1的原因。為此,為了避免在讀取I/O許可位圖的最高字節(jié)時(shí)產(chǎn)生越界,必須在I/O許可位圖的最后填加一個(gè)全1的字節(jié),即0FFH。此全1的字節(jié)應(yīng)填加在最后一個(gè)位圖字節(jié)之后,TSS界限范圍之前,即讓填加的全1字節(jié)在TSS界限之內(nèi)。 I/O許可位圖開(kāi)始偏移加8K所得的值與TSS界限值二者中較小的值決定I/O許可位圖的末端。當(dāng)TSS的界限大于I/O許可位圖開(kāi)始偏移加8K時(shí),I/O許可位圖的有效部分就有8K字節(jié),I/O許可檢查全部根據(jù)全部根據(jù)該位圖進(jìn)行。當(dāng)TSS的界限不大于I/O許可位圖開(kāi)始偏移加8K時(shí),I/O許可位圖有效部分就不到8K字節(jié),于是對(duì)較小I/O地址訪問(wèn)的許可檢查根據(jù)位圖進(jìn)行,而對(duì)較大I/O地址訪問(wèn)的許可檢查總被認(rèn)為不可訪問(wèn)而引起通用保護(hù)故障。因?yàn)檫@時(shí)會(huì)發(fā)生字節(jié)越界而引起通用保護(hù)異常,所以在這種情況下,可認(rèn)為不足的I/O許可位圖的高端部分全為1。利用這個(gè)特點(diǎn),可大大節(jié)約TSS中I/O許可位圖占用的存儲(chǔ)單元,也就大大減小了TSS段的長(zhǎng)度。 <二>重要標(biāo)志保護(hù)輸入輸出的保護(hù)與存儲(chǔ)在標(biāo)志寄存器EFLAGS中的IOPL密切相關(guān),顯然不能允許隨便地改變IOPL,否則就不能有效地實(shí)現(xiàn)輸入輸出保護(hù)。類似地,對(duì)EFLAGS中的IF位也必須加以保護(hù),否則CLI和STI作為敏感指令對(duì)待是無(wú)意義的。此外,EFLAGS中的VM位決定著處理器是否按虛擬8086方式工作。 80386對(duì)EFLAGS中的這三個(gè)字段的處理比較特殊,只有在較高特權(quán)級(jí)執(zhí)行的程序才能執(zhí)行IRET、POPF、CLI和STI等指令改變它們。下表列出了不同特權(quán)級(jí)下對(duì)這三個(gè)字段的處理情況。 不同特權(quán)級(jí)對(duì)標(biāo)志寄存器特殊字段的處理 特權(quán)級(jí) VM標(biāo)志字段 IOPL標(biāo)志字段 IF標(biāo)志字段 CPL=0 可變(初POPF指令外) 可變 可變 0 不變 不變 可變 CPL>IOPL 不變 不變 不變 從表中可見(jiàn),只有在特權(quán)級(jí)0執(zhí)行的程序才可以修改IOPL位及VM位;只能由相對(duì)于IOPL同級(jí)或更內(nèi)層特權(quán)級(jí)執(zhí)行的程序才可以修改IF位。與CLI和STI指令不同,在特權(quán)級(jí)不滿足上述條件的情況下,當(dāng)執(zhí)行POPF指令和IRET指令時(shí),如果試圖修改這些字段中的任何一個(gè)字段,并不引起異常,但試圖要修改的字段也未被修改,也不給出任何特別的信息。此外,指令POPF總不能改變VM位,而PUSHF指令所壓入的標(biāo)志中的VM位總為0。 <三>演示輸入輸出保護(hù)的實(shí)例(實(shí)例九)下面給出一個(gè)用于演示輸入輸出保護(hù)的實(shí)例。演示內(nèi)容包括:I/O許可位圖的作用、I/O敏感指令引起的異常和特權(quán)指令引起的異常;使用段間調(diào)用指令CALL通過(guò)任務(wù)門(mén)調(diào)用任務(wù),實(shí)現(xiàn)任務(wù)嵌套。 1.演示步驟實(shí)例演示的內(nèi)容比較豐富,具體演示步驟如下:(1)在實(shí)模式下做必要準(zhǔn)備后,切換到保護(hù)模式;(2)進(jìn)入保護(hù)模式的臨時(shí)代碼段后,把演示任務(wù)的TSS段描述符裝入TR,并設(shè)置演示任務(wù)的堆棧;(3)進(jìn)入演示代碼段,演示代碼段的特權(quán)級(jí)是0;(4)通過(guò)任務(wù)門(mén)調(diào)用測(cè)試任務(wù)1。測(cè)試任務(wù)1能夠順利進(jìn)行;(5)通過(guò)任務(wù)門(mén)調(diào)用測(cè)試任務(wù)2。測(cè)試任務(wù)2演示由于違反I/O許可位圖規(guī)定而導(dǎo)致通用保護(hù)異常;(6)通過(guò)任務(wù)門(mén)調(diào)用測(cè)試任務(wù)3。測(cè)試任務(wù)3演示I/O敏感指令如何引起通用保護(hù)異常;(7)通過(guò)任務(wù)門(mén)調(diào)用測(cè)試任務(wù)4。測(cè)試任務(wù)4演示特權(quán)指令如何引起通用保護(hù)異常;(8)從演示代碼轉(zhuǎn)臨時(shí)代碼,準(zhǔn)備返回實(shí)模式;(9)返回實(shí)模式,并作結(jié)束處理。
上傳時(shí)間: 2013-12-11
上傳用戶:nunnzhy
PLC TM卡開(kāi)發(fā)系統(tǒng)匯編程序(ATM8051) ;***************** 定義管腳*************************SCL BIT P1.0SDA BIT P1.1GC BIT P1.2BZ BIT P3.6LEDI BIT P1.4LEDII BIT P1.5OK BIT 20H.1OUT1 BIT P1.3OUT2 BIT P1.0OUT3 BIT P1.1RXD BIT P3.0TXD BIT P3.1PCV BIT P3.2WPC BIT P3.3RPC BIT P3.5LEDR BIT P3.4LEDL BIT P3.6TM BIT P3.7;********************定義寄存器***********************ROMDTA EQU 30H;NUMBY EQU 61H;SLA EQU 60H;MTD EQU 2FH;MRD EQU 40H;TEMP EQU 50H;;ORG 00H;;INDEX:MOV P1, #00H;MOV P2, #0FFHMOV MTD ,#00HCALL REEMOV R0,40HCJNE R0,#01,NO;MOV P2,#1CHLJMP VIMEN MOV P2,#79HACALL TOUCHRESET ;JNC NO ;CALL READTM ;CJNE A,#01H,NO;NOPMOV MTD, #00HCALL WEENOPMOV P2,#4AHSETB BZCALL TIMECLR BZMOV PCON, #0FFHVIME:CALL TIME1CALL TOUCHRESETJNC VIMECALL READTMCJNE A, #01H,VIME;NOPNOPNOPIII: MOV MTD,#00HCALL REECALL BBJNB OK,NO1LJMP ZHUNO1:MOV MTD,#10H
上傳時(shí)間: 2014-03-24
上傳用戶:448949
51匯編程序?qū)嵗号e一例說(shuō)明:流水燈加數(shù)碼管 LOOP: ; 標(biāo)號(hào)CLR P2.6 ;選中p2.6 數(shù)碼管左邊的8字使能SETB P2.7 ;p2.7不使能。 右邊的數(shù)碼管消隱MOV P0,#28H ;把28h送p0口;數(shù)碼管顯示 0LCALL DELAY ;延時(shí)MOV P0,#0FFH ;0FFH 送p0口,數(shù)碼管清除CLR P1.0 ;點(diǎn)亮p1.0發(fā)光管MOV P0,#7EH ;把7eh送p0口;數(shù)碼管顯示 1LCALL DELAYMOV P0,#0FFHCLR P1.1 ;點(diǎn)亮p1.0發(fā)光管CLR P1.0 ;點(diǎn)亮p1.0發(fā)光管MOV P0,#0A2H ;數(shù)碼管顯示 2LCALL DELAYMOV P0,#0FFHCLR P1.2CLR P1.1CLR P1.0MOV P0,#62H ;數(shù)碼管顯示 3LCALL DELAYMOV P0,#0FFHCLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#74H ;數(shù)碼管顯示 4LCALL DELAYMOV P0,#0FFHCLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#61H ;數(shù)碼管顯示 5;LCALL DELAYMOV P0,#0FFHCLR P1.5CLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#21H ; 數(shù)碼管顯示 6LCALL DELAYMOV P0,#0FFHCLR P1.6CLR P1.5CLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#7AH ; 數(shù)碼管顯示 7LCALL DELAYMOV P0,#0FFHCLR P1.7CLR P1.6CLR P1.5CLR P1.4CLR P1.3CLR P1.2CLR P1.1CLR P1.0MOV P0,#20H ; 數(shù)碼管顯示 8LCALL DELAYMOV P0,#0FFHLCALL DELAYMOV P0,#0FFHMOV P1,#0FFH;程序到此結(jié)果為左邊的數(shù)碼管顯示0,1,2,3,4,5,6,7,8;p1.0------------p1.7指示燈依次點(diǎn)亮SETB P2.6 ; 左邊的8消隱CLR P2.7 ;選中p2.7 數(shù)碼管右邊的8字使能 ,;MOV P0,#28HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.0MOV P0,#7EHLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.1MOV P0,#0A2HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.2MOV P0,#62HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.3MOV P0,#74HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.4MOV P0,#61HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.5MOV P0,#21HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.6MOV P0,#7AHLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHCLR P1.7MOV P0,#20HLCALL DELAYMOV P0,#0FFHMOV P1,#0FFHMOV P0,#0FFHMOV P1,#0FFH;這一段和上一段基本相同, 不同的是右邊的數(shù)碼管依次顯示012345678,左邊的不亮;;同時(shí)p1口的燈流動(dòng)顯示:AJMP LOOP; 注意: 程序運(yùn)行到此跳轉(zhuǎn)到開(kāi)始標(biāo)號(hào),重復(fù)執(zhí)行:DELAY: ;延時(shí)子程序;參考前面的教程:CLR P3.3 ;注意小喇叭在3.3口, 這里可以使小喇叭發(fā)出嗒,嗒聲MOV R7,#255NOPNOPD1:MOV R6,#255setb p3.3D2: DJNZ R6,D2clr p3.3DJNZ R7,D1SETB P3.3RETENDLOOP: ; 標(biāo)號(hào)CLR P2.6 ;選中p2.6 數(shù)碼管左邊的8字使能SETB P2.7 ;p2.7不使能。 右邊的數(shù)碼管消隱MOV P0,#28H ;把28h送p0口;數(shù)碼管顯示 0 ;28為1010000LCALL DELAY ; 延時(shí)程序MOV P0,#0FFH ;0FFH 送p0口,數(shù)碼管清除;P0口為11111111CLR P1.0 ;點(diǎn)亮p1.0發(fā)光管; P1。0為電平,P0口為11111110MOV P0,#7EH ;把7eh送p0口;數(shù)碼管顯示 1; P1。0為低電平,P0口為11111110LCALL DELAY ; 延時(shí)程序MOV P0,#0FFHMOV P0,#0FFH ;0FFH 送p0口,數(shù)碼管清除;P0口為11111111 清一次顯示這條是清顯示的
標(biāo)簽: 匯編 上傳時(shí)間: 2013-10-31
上傳用戶:gundamwzc
實(shí)現(xiàn)動(dòng)態(tài)顯示效果的方法和以上幾種基本類似,這里以滾動(dòng)顯示為例作一說(shuō)明。對(duì)于需要滾動(dòng)的文字,可以將其設(shè)置為位圖格式,暫存于內(nèi)存中,然后利用VC 提供的位圖拷貝函數(shù)BitBlt將位圖復(fù)制到顯示位置。對(duì)于特殊字符或圖形,則可以直接利用BitBlt函數(shù)調(diào)用到顯示位置。然后在類CLEDDlg的 OnTimer函數(shù)中調(diào)用該函數(shù),以實(shí)現(xiàn)文字的滾動(dòng)顯示。另外,也可以通過(guò)設(shè)定不同的響應(yīng)時(shí)間間隔來(lái)改變文字的滾動(dòng)速度。 程序清單: ORG 00H LOOP: MOV A,#0FFH ;開(kāi)機(jī)初始化,清除畫(huà)面 MOV P0,A ;清除P0口 ANL P2,#00 ;清除P2口 MOV R2,#200 D100MS: MOV R3,#250 ;延時(shí)100毫秒 DJNZ R3,$ DJNZ R2,D100MS MOV 20H,#00H ;取碼指針的初值 l100: MOV R1,#100 ;每個(gè)字的停留時(shí)間 L16: MOV R6,#16 ;每個(gè)字16個(gè)碼
標(biāo)簽: LED 顯示屏 動(dòng)態(tài)顯示 程序
上傳時(shí)間: 2013-11-06
上傳用戶:zl520l
一款ls2051國(guó)產(chǎn)的單片機(jī),由p1.0和p1.1兩個(gè)輸出口接兩個(gè)喇叭,將c語(yǔ)言音樂(lè)程序在0道程序運(yùn)行;匯編音樂(lè)程序在1道程序運(yùn)行工具。兩首音樂(lè)同時(shí)放出。奇怪的是程序的開(kāi)發(fā)平臺(tái)是通用的編程工具,用了一條MOV 0FFH,#ROAD1指令,將1道程序開(kāi)通即可
上傳時(shí)間: 2014-01-15
上傳用戶:ouyangtongze
這個(gè)程序的任務(wù)是鍵盤(pán)顯示數(shù)字,也就是分別按倚天版的4個(gè)小鍵盤(pán),右邊的數(shù)碼管輪流分別顯示數(shù)字0,1,2,3,為了便于程序的講解,我們把每一句分別編號(hào), 實(shí)際輸入程序時(shí),就不用寫(xiě)后面的號(hào)碼了。第1,2,3行是單片機(jī)的初始化,一般的程序都是這樣開(kāi)頭的, 作用是跳開(kāi)00-30h的地址單元,因?yàn)檫@些單元是分配給特殊寄存器使用的。第6行把p3送0FFH,作用是把這些端口p3.0-p3.7置高電平, 因?yàn)橐刑彀娴逆I盤(pán)接在p3口,只有當(dāng)端口為高電平時(shí), 我們按下鍵盤(pán),那么這個(gè)端口被短路到地,端口被強(qiáng)行變?yōu)?。根據(jù)這個(gè)大家自行分析第4句的意思。第5行clr p2.6,就是選中最右邊的數(shù)碼管。 板上一共有6個(gè)數(shù)碼管,分別是p2.1,p2.2,p2.3p2.4p2.5p2.6.
標(biāo)簽: 程序 數(shù)字 鍵盤(pán)顯示
上傳時(shí)間: 2015-10-22
上傳用戶:gououo
VIP專區(qū)-嵌入式/單片機(jī)編程源碼精選合集系列(157)資源包含以下內(nèi)容:1. 嵌入式486手冊(cè).2. 奔騰-486處理器指令集手冊(cè).3. 1602液晶顯示程序+1302溫度測(cè)量+18b20顯示時(shí)間(C語(yǔ)言).4. 51寫(xiě)的SLE4442程序?qū)嶒?yàn)用的SLE4442卡初始密碼PSC1、PSC2、PSC3均為0FFH.5. 語(yǔ)音芯片的驅(qū)動(dòng)程序.6. 嵌入式平臺(tái)入門(mén)--嵌入式系統(tǒng)內(nèi)存泄漏的檢查和預(yù)防.7. 從PCI一直講到PCI EXPRESS的文章.8. 基于TMS320F2812的工控實(shí)時(shí)時(shí)鐘.9. 新代數(shù)控系統(tǒng).10. S3C2442 官方 原理圖 網(wǎng)上收集的一份原理圖!.11. 高級(jí)數(shù)據(jù)鏈路控制(HDLC)協(xié)議的介紹文檔.12. ARMSYS實(shí)驗(yàn)二十四:FAT16文件系統(tǒng)的移植與應(yīng)用 描述:對(duì)Nandflash進(jìn)行格式化.13. pxa270 的bootloader源碼.14. ds1302源程序 (為輔試驗(yàn)箱調(diào)試通過(guò)).15. FPGA開(kāi)發(fā)板的原理圖很詳細(xì)的.16. HT單片機(jī)模擬I2C通訊.17. easy web build on NXP LPC2300 LPc2400.18. 藍(lán)牙耳機(jī)的SCH,與PCB圖,可適合于自己動(dòng)手的朋友們進(jìn)行創(chuàng)作..19. ti的12位AD采集c實(shí)現(xiàn).20. wince 下測(cè)試串口.21. 本系列所采用的所有技術(shù)都將“以實(shí)例來(lái)定義”.22. 用運(yùn)算放大器做正弦波振蕩器在學(xué)校時(shí)老師就教過(guò).23. FPGA/CPLD數(shù)字電路設(shè)計(jì)經(jīng)驗(yàn)分享。大唐公司的!.24. NorFlash的燒寫(xiě)及相關(guān)說(shuō)明可以通過(guò)串口實(shí)現(xiàn)程序的在線升級(jí).25. 嵌入式操作系統(tǒng)實(shí)時(shí)性比對(duì)與評(píng)價(jià),尤其對(duì)windowsce性能的測(cè)試大有幫助。.26. 東芯IV的SEP3203ARM的源代碼.27. 1702的資料.28. 數(shù)字邏輯交通信號(hào)燈課程設(shè)計(jì)代碼請(qǐng)指正.29. C#程序開(kāi)發(fā)范例寶典 圖書(shū)光盤(pán)附帶源碼 第20章.30. 介紹了嵌入式linux操作系統(tǒng)的知識(shí)以及arm編程.31. P,PI D控制系統(tǒng)仿真設(shè)計(jì)的例子.32. 32位元2進(jìn)位SIGNED乘法器32位元SIGNED乘法器.33. 用8051單片機(jī)和6個(gè)數(shù)碼管加一片DS1302時(shí)鐘芯片做成實(shí)用鬧鐘.34. UP-NETARM 2410-S 開(kāi)發(fā)平臺(tái) 電路原理圖.35. 通過(guò)時(shí)鐘芯片計(jì)算按鍵開(kāi)關(guān)閉合次數(shù)和時(shí)間.36. 通過(guò)對(duì)雙口ram 操作判斷硬件正確性.37. Nokia 3310 驅(qū)動(dòng)程序 ... KeilC.38. MPC03-LV運(yùn)動(dòng)控制卡驅(qū)動(dòng)程序.39. 一個(gè)51整開(kāi)發(fā)板的應(yīng)用(源程序電路圖功能全實(shí)用給有需要的人).40. I2C : 用C語(yǔ)言編譯的I2C.
上傳時(shí)間: 2013-07-21
上傳用戶:eeworm
蟲(chóng)蟲(chóng)下載站版權(quán)所有 京ICP備2021023401號(hào)-1