This is a multi-part message in MIME format.
------=_NextPart_000_0006_01C0CE99.AF87BAC0
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0007_01C0CE99.AF87BAC0"
------=_NextPart_001_0007_01C0CE99.AF87BAC0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Hi everyone!
I'm new to PICs and I'm working on my first "real" project using a =
PIC16F84A.
I'm building a circuit and writing the code to create a "Simon-Says" toy =
for my daughter. (You remember: the round toy with 4 lights/buttons. It =
makes a pattern and your supposed to repeat it). Anyways, I'm in the =
middle of writing the code and I'm testing it as I go along. I've run =
into a really wierd bug. In part of the code I output 1 of 4 different =
tones/lights based on 1 of 4 different random numbers. All of the tones =
work correctly except "tone #2" which locks up the program. Thing is, =
the code for all 4 tones is the same! I've tried my best to de-bug it =
but it's got me stumped!
Well, if anyone wants to take a look at it the code is attached.
Thanks.
Mike
------=_NextPart_001_0007_01C0CE99.AF87BAC0
Content-Type: text/html;
charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Hi everyone!
I'm new to PICs and I'm working on my =
first=20
"real" project using a PIC16F84A.
I'm building a circuit and writing the =
code to=20
create a "Simon-Says" toy for my daughter. (You remember: the round toy =
with 4=20
lights/buttons. It makes a pattern and your supposed to repeat =
it). =20
Anyways, I'm in the middle of writing the code and I'm testing it as I =
go=20
along. I've run into a really wierd bug. In part of the code =
I=20
output 1 of 4 different tones/lights based on 1 of 4 different =
random=20
numbers. All of the tones work correctly except "tone #2" which =
locks up=20
the program. Thing is, the code for all 4 tones is the =
same! =20
I've tried my best to de-bug it but it's got me stumped!
Well, if anyone wants to take a look at =
it the code=20
is attached.
Thanks.
Mike
------=_NextPart_001_0007_01C0CE99.AF87BAC0--
------=_NextPart_000_0006_01C0CE99.AF87BAC0
Content-Type: application/octet-stream;
name="simon2.asm"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="simon2.asm"
; simon2.asm
; 04.25.2001
; M. Laurin
; This program is for the "Simon-Says" Toy.
;-----------------------
list p=16f84A
radix hex
;-------------------------EQUATES
w equ 0x00 ;
f equ 0x01 ;
z equ 0x02 ;
c equ 0x00 ;
status equ 0x03 ;
porta equ 0x05 ;
portb equ 0x06 ;
switch equ 0x27 ;
nuval equ 0x26 ;
dlay1 equ 0x25 ;
dlay2 equ 0x24 ;
seed1 equ 0x23 ;
seed2 equ 0x22 ;
rand1 equ 0x21 ;
rand2 equ 0x20 ;
ctr1 equ 0x1f ;
ctr2 equ 0x1e ;
ctr3 equ 0x1d ;
ctr4 equ 0x1c ;
count equ 0x1b ;
debo equ 0x11 ;
debo2 equ 0x10 ;
org 0x00
;---------------------------START
START movlw 0xff ;
tris porta ; make porta inputs
movlw 0x00 ;
tris portb ; make portb outputs
clrf portb ; clear outputs
clrf dlay1 ;
clrf dlay2 ;
clrf ctr1 ;
clrf ctr2 ;
clrf ctr3 ;
clrf ctr4 ;
clrf count ;
clrf debo ;
clrf debo2 ;
clrf seed1 ;
clrf seed2 ;
clrf rand1 ;
clrf rand2 ;
clrf nuval ;
clrf switch ;
;-----------------generate seed #
SEED incf seed1, f ; press key2 to get
call INPT2 ; seed# low byte
iorlw 0x00 ;
btfss status, 2 ;
goto SEED ;
movf seed1, w ; create
xorlw 0xaa ; seed# high byte
movwf seed2 ; from
swapf seed2, f ; seed# low byte
comf seed2, f ;
;--------------random # generater
CYCLE clrf switch ;
incf count, f ; cycle count
movf count, w ;
movwf ctr1 ;
sublw 0x10 ; if count > 16
btfss status, c ; quit cycle
goto START ; and start over
movf seed1, w ; copy seed #s
movwf rand1 ; into rand registers
movf seed2, w ;
movwf rand2 ;
MASK btfsc switch, 0 ; choose rand1 or rand2
goto MASK2 ; for next output
MASK1 movf rand1, w ;
andlw b'00000011' ;
movwf portb ; mask rand1 to output
movwf nuval ; store value for tone select
rrf rand1, f ; rotate byte for next output value
goto SOUND ;
MASK2 movf rand2, w ;
andlw b'00000011' ;
movwf portb ; mask rand2 to output
movwf nuval ; store value for tone select
rlf rand2, f ; rotate byte for next output value
SOUND call SONIC ;
call DLAY ;
incf switch, f ;
decfsz ctr1, f ;
goto MASK ;
NEXT call INPT2 ;
iorlw 0x00 ;
btfss status, 2 ;
goto NEXT ;
goto CYCLE ; start next cycle
;---------------------CALL: SONIC
SONIC xorlw 0x00 ; test for tone 1
btfsc status, 2 ;
goto TONE1 ;
movf nuval, w ;
xorlw 0x01 ; test for tone 2
btfsc status, 2 ;
goto TONE2 ;
movf nuval, w ;
xorlw 0x02 ; test for tone 3
btfsc status, 2 ;
goto TONE3 ;
movf nuval, w ;
xorlw 0x03 ; test for tone 4
btfsc status, 2 ;
goto TONE4 ;
NEXT1 return
;-------------------------TONE #1
TONE1 movlw 0x84 ;
movwf ctr3 ;
TONE1A bsf portb, 3 ;
movlw 0x70 ;
movwf dlay1 ;
movlw 0x05 ;
movwf dlay2 ;
call DLAY ;
bcf portb, 3 ;
movlw 0x70 ;
movwf dlay1 ;
movlw 0x05 ;
movwf dlay2 ;
call DLAY ;
decfsz ctr3, f ;
goto TONE1A ;
goto NEXT1 ;
;-------------------------TONE #2
TONE2 movlw 0xc5 ;
movwf ctr3 ;
TONE2A bsf portb, 3 ;
movlw 0xf6 ;
movwf dlay1 ;
movlw 0x03 ;
movwf dlay2 ;
call DLAY ;
bcf portb, 3 ;
movlw 0xf6 ;
movwf dlay1 ;
movlw 0x03 ;
movwf dlay2 ;
call DLAY ;
decfsz ctr3, f ;
goto TONE2A ;
goto NEXT1 ;
;-------------------------TONE #3
TONE3 movlw 0xeb ;
movwf ctr3 ;
TONE3A bsf portb, 3 ;
movlw 0x7d ;
movwf dlay1 ;
movlw 0x03 ;
movwf dlay2 ;
call DLAY ;
bcf portb, 3 ;
movlw 0x7d ;
movwf dlay1 ;
movlw 0x03 ;
movwf dlay2 ;
call DLAY ;
decfsz ctr3, f ;
goto TONE3A ;
decfsz ctr4, f ;
goto TONE3A ;
goto NEXT1 ;
;-------------------------TONE #4
TONE4 movlw 0x28 ;
movwf ctr3 ;
movlw 0x02 ;
movwf ctr4 ;
TONE4A bsf portb, 3 ;
movlw 0xfa ;
movwf dlay1 ;
movlw 0x02 ;
movwf dlay2 ;
call DLAY ;
bcf portb, 3 ;
movlw 0xfa ;
movwf dlay1 ;
movlw 0x02 ;
movwf dlay2 ;
call DLAY ;
decfsz ctr3, f ;
goto TONE4A ;
decfsz ctr4, f ;
goto TONE4A ;
goto NEXT1 ;
;---------------------CALL: DLAY
DLAY decfsz dlay1, f ;
goto DLAY ;
decfsz dlay2, f ;
goto DLAY ;
return ;
;---------------------CALL: INPT2
INPT2 movlw 0xff ; preset debounce
movwf debo ;
movlw 0x04 ;
movwf debo2 ;
CHECK btfsc porta,2 ; check for input
retlw 0xff ;
decfsz debo, f ; debounce input
goto CHECK ;
decfsz debo2, f ;
goto CHECK ;
RLSE btfss porta,2 ; look for release
goto RLSE ;
retlw 0x00 ;
;------------------END OF PROGRAM
end
------=_NextPart_000_0006_01C0CE99.AF87BAC0--
--
http://www.piclist.com hint: PICList Posts must start with ONE topic:
[PIC]:,[SX]:,[AVR]: ->uP ONLY! [EE]:,[OT]: ->Other [BUY]:,[AD]: ->Ads