;timer 0, mode 1 中斷練習 buffer equ 30h ;-------------------------------------- org 0H jmp start org 0Bh ;Timer 0 中斷向量 jmp timer0_int start: mov buffer,#0 mov tmod,#00000001b ;設定timer 0 工作於 mode 1 mov r6,#20 ;計數20次, 共1秒鐘 loop: mov th0,#(65536-50000) / 256 ;計數50000次, 共50000微秒 mov tl0,#(65536-50000) mod 256 setb tr0 ;啟動計時器0 mov IE,#10000010b ;設定允許Timer0中斷 jmp $ ;停在此行, 等待計時溢位中斷產生 ;-------------------------------------- timer0_int: mov th0,#(65536-50000) / 256 ;計數50000次, 共50000微秒 mov tl0,#(65536-50000) mod 256 djnz r6,not_1sec ;r6 = r6-1, 判斷是否已中斷20次(r6=0) mov r6,#20 ;重新設定計數次數, 共20次 inc buffer ;計數值加1 mov a,buffer cpl a ;因輸出為0時LED才會亮,所以要先反向 mov p2,a ;送至P2顯示 not_1sec: reti ;離開中斷程式 ;-------------------------------------- end