-
Notifications
You must be signed in to change notification settings - Fork 0
/
F74022191.s43
148 lines (140 loc) · 4.28 KB
/
F74022191.s43
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include "msp430.h" ; #define controlled include file
NAME main ; module name
PUBLIC main ; make the main label vissible
; outside this module
ORG 0FFFEh
DC16 init ; set reset vector to 'init' label
RSEG CSTACK ; pre-declaration of segment
RSEG CODE ; place program in 'CODE' segment
init: MOV #SFE(CSTACK), SP ; set up stack
main: NOP ; main program
MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer
mov.b #00010000b, P1REN
mov.b #00001001b, P1DIR // P1.0 & P1.3 together
mov.b #00000000b, P1OUT
mov.b #10000000b, P4DIR
bis.b #00000100b, P1DIR
mov.b #00000000b, P4OUT // P4.7 & P1.2 together
bis.b #00000000b, P1OUT
;===========P1.4 為觸發系統腳位======
while:
mov.b &P1IN, R10
and #16, R10
cmp #1, R10
jz Start
jmp while
;===========開始5秒紅綠==============
Start:
xor.b #00001001b, P1OUT // P1.0, P1.3 on
xor.b #10000000b, P4OUT // P4.7 on
xor.b #00000100b, P1OUT // P1.2 on
mov #19, R6
For: sub #1, R6
mov #60000, R5
Delay: sub #1, R5
cmp #0, R5
jnz Delay
cmp #0, R6
jnz For
xor.b #10000000b, P4OUT // P4.7 off
xor.b #00000100b, P1OUT // P1.2 off
jmp Nine
;===========off 5 seconds============
Off5s:
mov.b #00000000b, P1OUT // P1.0, P1.3 off; P1.2 off
mov.b #00000000b, P4OUT // P4.7 off
mov #19, R6
Foroff: sub #1, R6
mov #60000, R5
Delayoff: sub #1, R5
cmp #0, R5
jnz Delayoff
cmp #0, R6
jnz Foroff
jmp One
;===========9: R2 R2 R2 R2 G1========
Nine:
mov #1, R14
mov #4, R7
fourR: sub #1, R7
jmp Red
fourr: cmp #0, R7
jnz fourR
jmp Green
fourg: jmp Off5s
;===========1: G1 R2 R2 R2 R2========
One:
mov #2, R14
jmp Green
oneg: mov #4, R7
oneR: sub #1, R7
jmp Red
oner: cmp #0, R7
jnz oneR
jmp Over
;============Red=====================
Red: mov.b #00001001b, P1OUT // P1.0, P1.3 on
jmp TwoS
finishR: xor.b #00001001b, P1OUT // P1.0, P1.3 off
mov #1, R15
jmp Point6
;============Green===================
Green: mov.b #10000000b, P4OUT // P4.7 on
xor.b #00000100b, P1OUT // P1.2 on
jmp OneS
finishG: xor.b #10000000b, P4OUT // P4.7 off
xor.b #00000100b, P1OUT // P1.2 off
mov #2, R15
cmp #1, R14
jnz Point6
jmp fourg
;============2 seconds==============
TwoS:
mov #9, R6
For2s: sub #1, R6
mov #60000, R5
Delay2s: sub #1, R5
cmp #0, R5
jnz Delay2s
cmp #0, R6
jnz For2s
jmp finishR
;============1 second=============
OneS:
mov #5, R6
For1s: sub #1, R6
mov #60000, R5
Delay1s: sub #1, R5
cmp #0, R5
jnz Delay1s
cmp #0, R6
jnz For1s
jmp finishG
;==========0.6s======================
Point6:
mov #3, R6
Forp6: sub #1, R6
mov #60000, R5
Delayp6: sub #1, R5
cmp #0, R5
jnz Delayp6
cmp #0, R6
jnz Forp6
cmp #1, R14
jnz go
//9
cmp #1, R15
jn fourg
jmp fourr
go: //1
cmp #1, R15
jnz oneg
jmp oner;
;==========finish=====================
Over:
mov.b #00000000b, P1OUT // P1.0, P1.3 off; P1.2 off
mov.b #00000000b, P4OUT // P4.7 off
;=====================================
JMP $ ; jump to current location '$'
; (endless loop)
END