實驗名稱 實驗三 綜合實驗-LED燈控制器 加深對定時/計數器、中斷、IO端口的理解,掌握定時/計數器、中斷的應用編程技術及中斷程序的調試方法。 首先設計大體框架,分成三個主要功能: 1.P0.0口產生三種頻率的波形控制指示燈,同時完成P3.1口的波形輸出 2.動態顯示的方法在八段數碼管上面顯示當前的模式與頻率值 3.通過kint控制三種頻率的轉換 三、資源分配 1.R1:外部中斷數據存儲位置,根據數據的不同執行不同的模式,可以再00,01,02三個模式依次切換 2.R4:判斷切換和轉到當前所處的模式 3.R2,R3,R6:控制八段數碼管和led燈蜂鳴器 4.R5:數碼管模式切換 5. 20H: P0口的等效輸出口  
可以先在89C51運行,查看P3.1 P0.0波形是否正確 無外部中斷的時候,波形沒20秒有規律地變化一次 

觸發外部中斷的時候 
此時波形不再是規律的20秒切換一次模式,而是隨著中斷的觸發進入新的模式,在下次中斷到來或者到達20秒的時候進入下一個模式。
思考題 - 若想實現3種閃爍方式的持續時間在5s-60s范圍內可調,且每種方式的持續時間各不相同,應如何設計程序?
可以改變程序寄存器中的循環次數,比如模式為1hz的時候,循環取反40次,若要讓時間可以調節,通過改變寄存器的值來調節循環次數,就可以改變持續時間。但是在5HZ 的時候可能需要兩個寄存器來定值,因為此時持續時間為60秒,需要寄存器的值大于600,已經超過了255。
其它說明:
1.標題:黑體,小四號
2. 正文:宋體,五號,1.5倍行距
3.流程圖使用 SmartDraw7 或Visio軟件繪制
4.不要加封面
源代碼 (含文件頭說明、語句行注釋)
- STOP4:
- ORG 0000H
- LJMP MAIN ; 轉主程序
- ORG 0003H
- LJMP INTER0
- ORG 000BH ; T0的中斷入口
- LJMP ITOP ; 轉T0中斷處理程序
- ORG 001BH ; T1的中斷入口
- JMP IMER_INT1
-
- ORG 0100H
- MAIN: LCALL Init_Device
- P0T EQU 20H ;設置P0口的輸出值
- MOV P0T,#0FFH
- MOV R1,#0FFH ;外部中斷數據存儲位置,根據數據的不同執行不同的模式,可以再00,01,02三個模式依次切換
- MOV R3,#0 ;間接選址的時候的指針中間值
- MOV R4,#00H ;控制三種模式的區分的自變量
- SETB EX0 ;開啟外部中斷
- SETB PX0
- SETB EX0
- MOV DPTR,#SEGTAB1
- MOV SP,#60H ; 設堆棧指針
- MOV TMOD,#11H ; 設置T0和T1為方式1
- ACALL PT0M0 ; 調用初始化子程序PT0M0
- HERE:
-
- JB P0.1 ,HERE ; 自身跳轉
- LJMP CHECK
- RET
- ITOP:
- CJNE R4,#00H,PT0M022JIN ;模式選擇的中間跳板
- CJNE R2,#202,delay1m
-
- MOV TL0, #15H ; 延時程序指令,延時100ms
- MOV TH0,#0E7H
- CLR P3.1
- DEC R2
- RETI
- PT0M022JIN : ;跳到另一個模式
- CJNE R5,#00,ITOP2JIN ;判斷是否已經進行過初始化 ,為0說明未進行初始化
-
- LJMP PT0M022
-
- delay1m: ;讓蜂鳴器響一次
- DEC R2
- MOV TL0, #15H ; T0置初值
- MOV TH0,#0E7H
- CPL P0T.0 ;P0.0的狀態取反
- MOV P0,P0T
- CJNE R2,#200,NORING1 ;開始的時候響一次
- SETB P3.1 ;
- RETI
- ITOP2JIN:LJMP ITOP2
- NORING1: CLR P3.1
- CJNE R2,#01,NORING2
- SETB P3.1 ;結束的時候響一次
- RETI
- NORING2:
- CLR P3.1
- CJNE R2,#00H,GOON1
- LJMP STOP1
- GOON1:
- RETI
-
- PT0M0222JIN:
- LJMP PT0M022
- PT0M0:
- CJNE R4,#00H, PT0M0222JIN ;選擇模式,如果不是模式0,就跳到下一個初始化程序
- MOV TH1, #0FEH ;初始化程序,延時一秒后進入模式
- MOV TL1, #0C2H
- MOV DPTR,#SEGTAB1
- CLR P3.1
- MOV R2,#202
- SETB TR0;允許T0中斷
- SETB ET0 ;全局開中斷
- MOV TMOD, #11H
- MOV TH1, #0FEH ;延時100ms
- MOV TL1, #0C2H
- SETB ET1 ;允許定時器1中斷
-
- SETB TR1 ;打開定時器1
- SETB EA
- RETI
- IMER_INT12JIN:LJMP IMER_INT12
- IMER_INT1:
- CJNE R4,#00H,IMER_INT12JIN ; 位選信號的對應的模式選擇
- MOV P1,#00H
-
- CJNE R3,#00H,FIVEHZ1
- MOV TMOD, #11H ;定時器0,1工作方式1,16位
- MOV TH1, #0FEH
- MOV TL1, #0C2H
- SETB ET1 ;允許定時器0中斷
- SETB EA ;允許全局中斷
- SETB TR1 ;打開定時器0
- MOV A, R3
- MOVC A, @A+DPTR
- INC R3
- PUSH ACC ;存儲段碼
- CLR A
- ORL A,P0T ;作為p0口的等價輸出口
- ORL A,#0D0H ;進行移位
-
- MOV P0T,A
- MOV P0,P0T
- POP ACC ;彈出段碼
- MOV P1,A
- RETI
-
- FIVEHZ1: CJNE R3,#01H,FIVEHZ2 ;位選信號
- MOV TMOD, #11H ;定時器0,1工作方式1,16位
- MOV TH1, #0FEH
- MOV TL1, #0C2H
- SETB ET1 ;允許定時器0中斷
- SETB EA ;允許全局中斷
- SETB TR1 ;打開定時器0
- MOV A, R3
- MOVC A, @A+DPTR
- INC R3
- PUSH ACC
-
-
-
- MOV A,P0T
- ADD A,#0C0H
- MOV P0T,A
- MOV P0,P0T
- POP ACC
- MOV P1,A
- RETI
- FIVEHZ2:
- MOV TMOD, #11H ;定時器0,1工作方式1,16位
- MOV TH1, #0FEH
- MOV TL1, #0C2H
- SETB ET1 ;允許定時器0中斷
- SETB EA ;允許全局中斷
- SETB TR1 ;打開定時器0
- MOV A, R3
- MOVC A, @A+DPTR
- INC R3
- PUSH ACC
-
- MOV A,P0T
- ADD A,#0C0H
- MOV P0T,A
- MOV P0,P0T
-
-
- POP ACC
- MOV P1,A
- MOV R3,#0
- RETI
- ;**********************************************************************
- ;***********************************************************************
- STOP1:MOV P1,#00H ;熄滅LED
-
- MOV R4,#01H
-
- PT0M022: ;模式二的初始化
- CJNE R4,#01H, PT0M023JIN ;作為跳板進行跳到下一個模式
-
- MOV TL0, #66H ; 延時1秒
- MOV TH0,#83H
- MOV DPTR,#SEGTAB2
- CLR P3.1
- MOV R5,#42
- SETB TR0;允許T0中斷
- SETB ET0 ;全局開中斷
- SETB IT0
- MOV TMOD, #11H ;
- MOV TH1, #0FEH ;2ms方波
- MOV TL1, #0C2H
- SETB ET1 ;允許定時器0中斷
-
- SETB TR1 ;打開定時器0
- SETB EA
- RETI
- PT0M023JIN: LJMP PT0M023 ;跳到下一個模式
- ITOP2: CJNE R4,#01,ITOP3
-
- CJNE R5,#42,delay1m2
-
- MOV TL0, #0CBH ; T0置初值
- MOV TH0,#06H
- CLR P3.1
- DEC R5
- RETI
- ITOP3:LJMP ITOP4
- delay1m2:
- DEC R5
- MOV TL0, #66H ; ;延時0.5秒
- MOV TH0,#83H
- CPL P0T.0 ;P0.0的狀態取反
- MOV P0,P0T
- CJNE R5,#40,NORING11 ;讓蜂鳴器響
- SETB P3.1
- RETI
- NORING11: CLR P3.1 ;結束的時候熄滅蜂鳴器
- CJNE R5,#01,NORING21
- SETB P3.1
- RETI
- NORING21:
- CLR P3.1
- CJNE R5,#00H,GOON11 ;已經達到了20秒,清零
- LJMP STOP3
- GOON11:
- RETI
-
-
- IMER_INT13JIN:LJMP IMER_INT13
-
- IMER_INT12:
- CJNE R4,#01H,IMER_INT13JIN ;切換到下一個模式
- MOV P1,#00H
-
- CJNE R3,#00H,FIVEHZ12
- MOV TMOD, #11H ;定時器0,1工作方式1,16位
- MOV TH1, #0FEH
- MOV TL1, #0C2H
- SETB ET1 ;允許定時器0中斷
- SETB EA ;允許全局中斷
- SETB TR1 ;打開定時器0
- MOV A, R3
-
- MOVC A, @A+DPTR
- INC R3
- PUSH ACC
- CLR A
- ORL A,P0T
- ORL A,#0D0H
-
- MOV P0T,A
- MOV P0,P0T
- POP ACC
- MOV P1,A
- RETI
-
- FIVEHZ12: CJNE R3,#01H,FIVEHZ22
- MOV TMOD, #11H ;定時器0工作方式1,16位
- MOV TH1, #0FEH ;2ms方波
- MOV TL1, #0C2H
- SETB ET1 ;允許定時器0中斷
- SETB EA ;允許全局中斷
- SETB TR1 ;打開定時器0
- MOV A, R3
- MOVC A, @A+DPTR
- INC R3
- PUSH ACC
-
-
-
- MOV A,P0T
- ADD A,#0C0H
- MOV P0T,A
- MOV P0,P0T
- POP ACC
- MOV P1,A
- RETI
- FIVEHZ22:
- MOV TMOD, #11H ;定時器0工作方式1,16位
- MOV TH1, #0FEH ;2ms方波
- MOV TL1, #0C2H
- SETB ET1 ;允許定時器0中斷
- SETB EA ;允許全局中斷
- SETB TR1 ;打開定時器0
- MOV A, R3
- MOVC A, @A+DPTR
- INC R3
- PUSH ACC
-
- MOV A,P0T
- ADD A,#0C0H
- MOV P0T,A
- MOV P0,P0T
-
-
- POP ACC
- MOV P1,A
- MOV R3,#0
- RETI
- ;**************************************************************************************
- ;***************************************************************************************
- ;***************************************************************************************
- STOP3:
- MOV P1,#00H
- MOV R4,#02H
- LJMP PT0M023
- PT0M023:
- CJNE R6,#00H,ITOP4
-
- MOV TL0, #66H ; T0置初值
- MOV TH0,#83H
- MOV DPTR,#SEGTAB3
- CLR P3.1
- MOV R6,#22 ;延時1秒
- SETB TR0;允許T0中斷
- SETB ET0 ;全局開中斷
- MOV TMOD, #11H ;
- MOV TH1, #0FEH ;2ms方波
- MOV TL1, #0C2H
- SETB ET1 ;允許定時器0中斷
-
- SETB TR1 ;打開定時器0
- SETB EA
- RETI
- ITOP4:
- MOV DPTR,#SEGTAB3
- MOV P1,#00H
- CJNE R6,#22,delay1m3
-
- MOV TL0, #0CBH ; 延時一秒
- MOV TH0,#06H
- CLR P3.1
- DEC R6
- MOV DPTR,#SEGTAB3
- RETI
-
- delay1m3:
- DEC R6
- MOV TL0, #0CBH ; 1S
- MOV TH0,#06H
- CPL P0T.0 ;P0.0的狀態取反
- MOV P0,P0T
- CJNE R6,#20,NORING13
- SETB P3.1
- RETI
- LJMP NORING11
- NORING13: CLR P3.1
- CJNE R6,#01,NORING23
- SETB P3.1
- RETI
- NORING23:
- CLR P3.1
- CJNE R6,#00H,GOON13
- MOV R4,#00H
- LJMP STOP4
- GOON13:
- RETI
-
-
-
-
- IMER_INT13:
- MOV P1,#00H
-
- CJNE R3,#00H,FIVEHZ13
- MOV TMOD, #11H ;定時器0工作方式1,16位
- MOV TH1, #0FEH ;2ms方波
- MOV TL1, #0C2H
- SETB ET1 ;允許定時器0中斷
- SETB EA ;允許全局中斷
- SETB TR1 ;打開定時器0
- MOV A, R3
- MOVC A, @A+DPTR
- INC R3
- PUSH ACC
- CLR A
- ORL A,P0T
- ORL A,#0D0H
-
- MOV P0T,A
- MOV P0,P0T
- POP ACC
- MOV P1,A
- RETI
-
- FIVEHZ13: CJNE R3,#01H,FIVEHZ23
- MOV TMOD, #11H ;定時器0工作方式1,16位
- MOV TH1, #0FEH ;2ms方波
- MOV TL1, #0C2H
- SETB ET1 ;允許定時器0中斷
- SETB EA ;允許全局中斷
- SETB TR1 ;打開定時器0
- MOV A, R3
- MOVC A, @A+DPTR
- INC R3
- PUSH ACC
-
-
-
- MOV A,P0T
- ADD A,#0C0H
- MOV P0T,A
- MOV P0,P0T
- POP ACC
- MOV P1,A
- RETI
- FIVEHZ23:
- MOV TMOD, #11H ;定時器0工作方式1,16位
- MOV TH1, #0FEH ;2ms方波
- MOV TL1, #0C2H
- SETB ET1 ;允許定時器0中斷
- SETB EA ;允許全局中斷
- SETB TR1 ;打開定時器0
- MOV A, R3
- MOVC A, @A+DPTR
- INC R3
- PUSH ACC
-
- MOV A,P0T
- ADD A,#0C0H
- MOV P0T,A
- MOV P0,P0T
-
-
- POP ACC
- MOV P1,A
- MOV R3,#0
- RETI
-
-
- INTER0: INC R1
- CJNE R1,#03H,FUZHI
- MOV R1,#00H
- FUZHI: MOV 71H,R1
- MOV R4,71H
- LJMP PT0M0
- BACK: LJMP HERE
- CHECK:
- LJMP HERE
-
-
-
-
-
- SEGTAB1: DB 0B7H, 0FCH, 6EH
- SEGTAB2: DB 0DH, 0FCH, 6EH
- SEGTAB3: DB 0FDH,0B6H, 6EH
復制代碼
完整的Word格式文檔51黑下載地址:
單片機 LED燈控制.doc
(469.5 KB, 下載次數: 8)
2018-11-8 09:45 上傳
點擊文件名下載附件
匯編語言代碼+模板
|