① 可編程作息時間控制器程序設計
主程序: 在程序開始時,首先初始化,設置中斷0源允許、總允許為一,兩個定時器的工作模式為一模式,整個程序由P2.6接低電平時啟動,啟動後,進入A段工作。在A短工作中調用顯示子程序,A段工作完時進入B段工作,每段工作時都要調用顯示子程序,,最後一段工作完時,關閉顯示,即對P2送入0FFH
顯示子程序:首先,對定時器賦初值,然後進行拆字,拆字採用除以十進行,除以十後,分別把商和余數送到顯緩單元,再查七段碼,把七段碼送到P1,送字位口到P2口,進行動態顯示,每次顯示一位時延時255個指令周期(即FFH個指令周期),四位顯示完後,再進行多次掃描,保證人眼看不到閃爍,最後判斷設定的工作時間到沒,到了幾跳出顯示子程序。
中斷程序:進入中斷後輸出報警信號,同時顯示器全部顯示0,,最後跳出中斷。
四:程序及其說明:
1.程序:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP BAOJING
ORG 0010H
;初始化程序
MAIN:SETB EA ;設置中斷
SETB EX0
CLR IT0
MOV TMOD,#11H ;設置定時器工作模式
SETB P3.4 ;驅動繼電器
SETB P3.5
SETB P3.6
SETB P3.7
HERE:JB P2.6,HERE ;判斷是否啟動
;進入工作階段
GONGZUO:MOV 41H,#0AH ;工作於A段
MOV R7,#0AH ;A段工作時間
CLR P3.4 ;驅動外部繼電器
LCALL SCAN ;調顯示程序
SETB P3.4 ;關斷外部驅動
MOV 41H,#0BH ;工作於B段
MOV R7,#14H ;B段工作時間
CLR P3.5 ;驅動外部繼電器
LCALL SCAN ;調顯示程序
SETB P3.5 ;關斷外部驅動
MOV 41H,#0CH ;工作於C段
MOV R7,#1EH ;C段工作時間
CLR P3.6 ;驅動外部繼電器
LCALL SCAN ;調顯示程序
SETB P3.6 ;關斷外部驅動
MOV 41H,#0DH ;工作於D段
MOV R7,#28H
CLR P3.7 ;驅動外部繼電器
LCALL SCAN ;調顯示程序
SETB P3.7 ;關斷外部驅動
MOV P2,#0FFH ;關顯示
LJMP HERE ;返回判斷處,確定是否繼續工作
;中斷報警程序
BAOJING: MOV P2.4,#00H ;指示燈亮
Mov P2.5,#00H
MOV TL0,#0E0H ;定時20ms
MOV TH0,#0B1H
SETB TR0 ;啟動定時
LP:MOV P1,#3FH ; 全部顯示為零
MOV P2,#00H
MOV P2.5,#00H ;揚聲器工作
JNB TF0,LP ;查詢定時時間到否
SETB P2.4 ;關指示燈
SETB P2.5 ;關揚聲器
RETI
;顯示子程序
ORG 0F00H
SCAN: MOV 42H,#0EH ;「—」(橫線)的七段碼
MOV R1,#32H ;延時常數
MOV TL1,#0E0H ;定時20ms的常數
MOV TH1,#0B1H
LP1: MOV A,R7 ;拆字程序(採用除法拆字)
MOV B,#10
DIV AB
MOV 43H,A ;送顯緩單元
MOV 44H,B
LP2: MOV R0,#41H ;設置顯緩的初始單元
MOV R4,#0FFH ;延時常數
MOV R5,#0FEH ;送字位口
LP3: MOV A,@R0
MOV P2,#0FFH ;關顯示
MOV DPTR,#TAB ;查七段碼、顯示
MOVC A,@A+DPTR
MOV P1,A
MOV P2,R5
LP4: DJNZ R4,LP4
INC R0 ;修改指針
MOV A,R5 ;改變顯示單元
RL A
MOV R5,A
JB ACC.4,LP3 ;判斷四位是否顯示完
SETB TR1 ;啟動定時器
JNB TF1,LP2 ;判斷定時時間是否到
DJNZ R1,LP2 ;延時一秒是否到
DJNZ R7,LP1 ;判斷設定時間是否到
RET
ORG 10FFH
;七段碼表單
TAB: DB 3FH ,06H,5BH, 4FH, 66H,6DH , 7DH
DB 07H, 7FH,6FH,77H, 7CH,39H, 5EH, 40H
2.說明:
主程序:設整個系統工作有四個階段,分為ABCD段,每段工作時間設為10S、20S、30S、40S,在程序的初始化階段設定定時器的工作模式、中斷允許,程序的運行由單片機的P2.6腳接低電平啟動,進入工作階段,在每個工作階段顯示工作段數和剩餘工作時間。
在A段工作時,把「A」這個字元送達41H顯緩單元,再設定A段的工作時間,送到R7寄存器中,設定對應的輸出腳的工作電平值,然後調顯示子程序,A段工作完畢,關閉對應的驅動輸出腳。
B、C、D段工作均和A段工作相似,只是驅動不同的輸出對象,最後一段工作完後,對P2口賦值高電平,關所有的顯示,最後跳回判斷處,判斷是否繼續工作。
顯示子程序:在顯示子程序中因為每段工作時,均要顯示「—」,所以在開始時把「—」的對應序號(在本程序的七段碼表中對應的序號為0EH)送到顯緩單元,對定時器T1定時20ms進行賦初值,計算初值的公式為:
T1初值=2^n-fosc/12×t
由於定時器工作在1模式,振盪頻率為12MHZ,所以計時器T1的初值為:E0B1(十六進制)
將設定的時間進行拆字,然後送到顯緩單元。拆字採用除法的方式進行,將定時時間送到寄存器A中,然後在B中送常數10,經過相除後在寄存器A中得到高位送到顯緩43H中,在寄存器B中得到低位送到顯緩44H單元中,顯緩單元指針首先指向顯緩首地址,通過變址定址方式查詢對應的七段碼送到P1口(字形口),對P2口送入字位口,每個顯示位顯示後經過延時255指令周期再進入下一步工作。每位顯示完後,修改顯示單元的指針,對指針單元的當前值自加一,然後對字位口進行左移,修改顯示單元,再進行判斷四位是否顯示完,即判斷字位口的第五位是否為1,若為1,則程序轉移,繼續顯示;若為0,則依次執行。四位顯示完後,啟動定時器1,定時20ms,查詢TF1的值,若TF1為0,則在此等待,若TF1為1,則R1自減1並判斷是否為0,若不為0,則轉移到顯示部分,若為0,則順序執行(即判斷1S到否);1S到則R7自減1並判斷R7是否為0,若不為0,轉移到拆字部分,若為0,則跳出調用(即判斷每段工作時間到設定時間沒有)。
中斷程序:若外部出現故障(外部故障用P3.2接低電平表示),P2.4、P2.5接低電平(即輸出報警信號,指示燈亮,揚聲器發出聲音),對定時器定T0時20ms賦初值,計算公式為:
T0初值=2^n-fosc/12×t
由於定時器工作在1模式,振盪頻率為12MHZ,所以計時器T1的初值為:E0B1(十六進制)
對P1口送入「0」的七段碼,P2口送入00,每個顯示單元全部顯示為0,啟動定時器,若定時時間沒有到,則轉到顯示處,繼續讓全部顯示0,,若時間到,則對P2.4、P2.5全部送入高電平,關閉報警提示,中斷返回。
七段碼表單:將要顯示的數碼或字母的七段碼按在日常生活中的默認順序定義在一個表單中,通過把表單的首地址付給DPTR,再把需要顯示的數字或字母的對應序號送到寄存器A中,通過變址定址的方式(即MOVC指令)即可查出對應的七段碼。 希望被採納啊!!好長時間菜找到