??? 09/24/11 05:34 Read: times |
#183860 - try Responding to: ???'s previous message |
C_seg segment CODE D_seg segment DATA B_seg segment bit rseg D_seg HalfPeriod2Cnt: ds 1 HalfPeriod1Cnt: ds 1 rseg B_seg Timer10ms_tickFLAG: ds 1 ;-------------------- ASEG CODE org 0 ljmp main org 01bh ljmp timer1isr_handler ;--------------------- rseg C_seg TIMER1VALUE_10msec equ 56320 ; //(65536-9216) ,Your timer's input freq is 921600 Hz, ;timer will be incremented 9216 times in 10 millisec timepiece Halfperiod2Hz equ 25 ;*10 ms = 250 ms Halfperiod1Hz equ 50 ;*10 ms = 500 ms Port_2Hz equ P1.5 Port_1Hz equ P1.6 main: MOV TMOD,#10H ;timer 1, mode 1 (16-bit) ; old AGAIN: MOV TL1,#low(TIMER1VALUE_10msec ) MOV TH1,#high(TIMER1VALUE_10msec) SETB TR1 ;start the timer1 setb ET1 ;enable Timer 1 interrupt setb EA ; enable common Interrupt Enable mov HalfPeriod1Cnt,#0 mov HalfPeriod2Cnt,#0 clr Timer10ms_tickFLAG AGAIN: ;BACK: JNB TF1,BACK stay till timer rolls over; ; CLR TR1 ;stop timer 1 ; CPL P1.5 ;comp. p1.5 to get hi, lo ; CLR TF1 ;clear timer flag 1 ; SJMP AGAIN ;reload timer since mode 1 ; ;is not auto-reload jnb Timer10ms_tickFLAG, AGAINno10ms clr Timer10ms_tickFLAG call Freq2HzHandle call SomeOther10msecProc AGAINno10ms: call SomeOtherUsefullProc jmp AGAIN ;----- Freq2HzHandle: inc HalfPeriod2Cnt mov a, HalfPeriod2Cnt clr c subb a,# Halfperiod2Hz jc Freq2Hzret mov HalfPeriod2Cnt,#0 CPL Port_2Hz Freq2Hzret: ret SomeOther10msecProc: ;------- ret SomeOtherUsefullProc ;.................. ret timer1isr_handler: push PSW push a clr TR1 MOV TL1,#low(TIMER1VALUE_10msec ) MOV TH1,#high(TIMER1VALUE_10msec) setb TR1 ;clr TF1 - not needed flag is autocleared , when ISR enters setb Timer10ms_tickFLAG inc HalfPeriod1Cnt mov a, HalfPeriod1Cnt clr c subb a,#HalfPeriod1Hz jc timer1isr_end mov HalfPeriod1Cnt,#0 cpl Port_1Hz timer1isr_end: pop a pop PSW reti |