AT89C52流水灯+外部中断INT0+定时器(汇编语言)
生活随笔
收集整理的這篇文章主要介紹了
AT89C52流水灯+外部中断INT0+定时器(汇编语言)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
AT89C52流水燈+外部中斷INT0+定時器(匯編語言)
任務要求
用 AT89S52 單片機控制彩燈(流水燈)圖形及繼電器。即:
①AT89S52 單片機上電時控制由發光二極管組成的圖形有規律地不停閃爍(亮、滅的時間不能為 5 秒!);
②當按下按鈕(任何時候)時彩燈圖形全滅,而繼電器工作吸合(控制~220V 30W燈泡亮)5 秒,5 秒后返回彩燈閃爍。
思路
中斷可采取外部中斷INT0方式,定時器可采用模式一(一次定時50ms,循環100次即為5s);
流水燈部分,我們的想法是做一個“CXK”運球的動作,順序為左——中——右——中——左,并通過換位實現流水燈的變化,具體代碼實現如下:
匯編代碼
ORG 0000H ;單片機上電后從0000H地址執行AJMP START ;跳轉到主程序存放地址處ORG 0003H ;設置主程序開始地址AJMP INSER ;設置中斷入口地址ORG 0030H MOV SP,#60H ;設置堆棧起始地址為60HSTART:SETB TR0 ;允許啟動定時器SETB EX0 ;中斷設置優先級SETB IT0MOV R3,#32H ;R3初值SETB EA ;字卸憲開關 MOV A,#0FFH ;燈全滅MOV P1,AMOV A,#0FEH ;1燈亮MOV P1,AMOV R2,#08HLOOP1:RL A ;左移,向右流水燈亮(向右流水燈)MOV P1,AACALL DELAY1DJNZ R2,LOOP1MOV R2,#05HLOOP2:MOV A,#0FFH ;燈全滅(外圈燈閃爍5次)MOV P1,AACALL DELAY1MOV A,#00H ;燈全亮MOV P1,AACALL DELAY1DJNZ R2,LOOP2MOV A,#0FFH ;燈全滅MOV P1,AACALL DELAY1MOV A,#0EEH ;0和4燈亮MOV P1,AMOV R2,#10HLOOP3:RL A ;(流水燈)MOV P1,A ;右移,0和4,1和5,2和6,3和7燈亮 ACALL DELAY1DJNZ R2,LOOP3MOV A,#0FFH MOV P1,A ;燈滅MOV R2,#10HMOV A,#0EEHMOV P1,AACALL DELAY1MOV A,#77HLOOP4:RR A ;左移,(流水燈)MOV P1,AACALL DELAY1DJNZ R2,LOOP4MOV R2,#08HMOV A,#0FEHLOOP5:RR A ;左移,向右流水燈亮(向左流水燈)MOV P1,AACALL DELAY1DJNZ R2,LOOP5MOV A,#0FFHMOV P1,AMOV R2,#05HLOOP6:MOV A,#0FFH ;燈全滅(外圈燈閃爍5次)MOV P1,AACALL DELAY1MOV A,#00H ;燈全亮MOV P1,AACALL DELAY1DJNZ R2,LOOP6MOV R0,#05HMOV A,#0F0H ;(運球)MOV P0,A ;身體部位亮SETB P2.0SETB P2.1SETB P2.2 ;三個球都滅CLR P2.3CLR P2.4CLR P2.5 ;CXK亮LOOP7:CLR P2.0 ;左球亮CLR P2.3 ;C亮SETB P2.4SETB P2.5 ;XK不亮ACALL DELAY1SETB P2.0 ;左球滅SETB P2.3 ;C滅CLR P2.1 ;中間球亮CLR P2.4 ;X亮ACALL DELAY1SETB P2.1 ;中間球滅SETB P2.4 ;X滅CLR P2.2 ;右球亮CLR P2.5 ;K亮ACALL DELAY1SETB P2.2 ;右球滅SETB P2.5 ;K滅CLR P2.1 ;中間球亮CLR P2.3CLR P2.4CLR P2.5 ;CXK全亮 ACALL DELAY1SETB P2.1 ;中間球滅SETB P2.3SETB P2.4SETB P2.5 ;CXK全滅CLR P2.0 ;左球亮ACALL DELAY1DJNZ R0,LOOP7 ;循環5次MOV R1,#0AH LOOP8:MOV A,0FFH ;(人亮,球不亮,且人閃爍)MOV P0,A ;身體不亮 SETB P2.0SETB P2.1SETB P2.2 ;三個球都要不亮ACALL DELAY1MOV A,#0F0HMOV P0,A ;身體亮CLR P2.3CLR P2.4CLR P2.5 ;CXK亮ACALL DELAY1CPL AMOV P0,A ;身體滅SETB P2.3SETB P2.4SETB P2.5 ;CX滅ACALL DELAY1DJNZ R1,LOOP8MOV R1,#0AHAJMP STARTHERE:SJMP HERE ;查詢中斷ORG 0200HINSER:SJMP MIE ;跳轉中斷服務程序MIE:MOV P0,#0FFH ;燈滅MOV P1,#0FFH ;燈滅MOV P2,#0FFH ;燈滅CLR P3.7ACALL DELAY ;調用定時器MOV R3,#32H ;循環100次SETB P3.7RETI ;中斷子程序返回DELAY:MOV TMOD,#01H ;定時器基礎設計,模式1,查詢方式MOV TL0,#0B0H ;每隔50ms定時一次MOV TH0,#3CH ;同上JNB TF0,$ ;查詢判斷TF0的溢出CLR TF0 ;清0DJNZ R3,DELAY ;循環RET DELAY1:MOV R6,#200 ;50ms延時子程序L1:MOV R7,#200L2:NOPDJNZ R7,L2DJNZ R6,L1RET ;子程序返回END仿真電路
硬件電路
一共用了67個燈,大部分燈為并聯接到一個口
實際效果
新能源1第一組流水燈
后言
匯編程序不難,難的是焊接工作和排線,焊接大概花費了3-4天的時間,希望這篇文章能給以后學習相關綜合實驗的師弟師妹一個參考,非專業非科班某單片機課設留。
總結
以上是生活随笔為你收集整理的AT89C52流水灯+外部中断INT0+定时器(汇编语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言教案模板app,c语言教案模板.d
- 下一篇: WIZnet——W5100S震撼来袭!