timer_my.asm
1 |
; Define name of registers |
---|---|
2 |
.alias flag 2 |
3 |
.alias flag2 3 |
4 |
.include "HDL50001_pcf.inc" |
5 |
|
6 |
.text |
7 |
|
8 |
start: |
9 |
jmp timer |
10 |
complete |
11 |
|
12 |
;;;;; Processing timer ;;;;; MC assembler version 0.5.4:76 |
13 |
timer: |
14 |
jmp initTimer |
15 |
setl #IHOOKADDR,P1 |
16 |
setl #flag, 0 |
17 |
setl #flag2, 2 ;value for time interval |
18 |
complete |
19 |
;Interrupt handler |
20 |
P1: |
21 |
getl #flag2 |
22 |
subl @1, 1 |
23 |
setl #flag2, @1 |
24 |
getl 0x0000001F ; ? почему не работает здесь однократный режим работы? |
25 |
; перезагрузка таймера |
26 |
wrl @1, TIM0_CR |
27 |
getl #flag |
28 |
je @1, Ledoff |
29 |
jne @2, Ledon |
30 |
complete |
31 |
|
32 |
;; Set counter period and allow interrupt from timer |
33 |
initTimer: |
34 |
jmp StartTimer0 |
35 |
setl #PSW, 1 ; глобальное разрешение прерываний |
36 |
getl 0x0000FFFF |
37 |
wrl @1, TIM0_CNT ; настраиваем счетчик таймера |
38 |
getl 0x0000007A |
39 |
wrl @1, TIM0_PSC ;(10Hz) ; настраиваем предделитель |
40 |
|
41 |
complete |
42 |
|
43 |
StartTimer0: |
44 |
jmp MainLoop |
45 |
|
46 |
getl 0x0002000 ; разрешаем прерывание GPTIM0 |
47 |
setl #MSKR, @1 |
48 |
getl 0x0000001D |
49 |
;^ для того чтобы очистить пятый бит IP, нужно записать в него "1". |
50 |
; перезагрузка таймера |
51 |
wrl @1, TIM0_CR |
52 |
complete |
53 |
|
54 |
;;use periodic mode |
55 |
MainLoop: |
56 |
jmp MainLoop |
57 |
complete |
58 |
;;Led off |
59 |
Ledoff: |
60 |
getl #flag2 |
61 |
je @1, disable |
62 |
jne @2, #IRETADDR |
63 |
setl #PSW, 1 |
64 |
complete |
65 |
|
66 |
; disable led 2,3 |
67 |
disable: |
68 |
jmp #IRETADDR |
69 |
getl 0x60000000 |
70 |
wrl @1, GPIOB_DIR |
71 |
getl 0x00000000 |
72 |
wrl @1, GPIOB_OUT |
73 |
setl #flag2, 4 |
74 |
setl #flag, 1 |
75 |
complete |
76 |
|
77 |
;;Led on |
78 |
Ledon: |
79 |
getl #flag2 |
80 |
je @1, enable |
81 |
jne @2, #IRETADDR |
82 |
setl #PSW, 1 |
83 |
complete |
84 |
|
85 |
; enable led 2,3 |
86 |
enable: |
87 |
jmp #IRETADDR |
88 |
getl 0x60000000 |
89 |
wrl @1, GPIOB_DIR |
90 |
getl 0x60000000 |
91 |
wrl @1, GPIOB_OUT ;set PortB 29,30 pin |
92 |
setl #flag2, 4 |
93 |
setl #flag, 0 |
94 |
complete |
95 |
|
96 |
|
97 |
|
98 |
|
99 |
|
100 |
|
101 |
|
102 |
|
103 |
|