|
|
View previous topic :: View next topic |
Author |
Message |
austin
Joined: 15 Jun 2005 Posts: 2
|
function not call another function |
Posted: Fri Jul 15, 2005 10:58 am |
|
|
hellow all,
i make this example to monitoring the called and return of function
main() call setled and this call set_ledon but not call set_ledoff ????
the ccs c not call function with function ?????
no anderstand, please help-me
thanks
0000: MOVLW 00
0001: MOVWF PCLATH
0002: GOTO main
0003: NOP
.................... #include <16F628.h>
.................... //////// Standard Header file for the PIC16F628 device ////////////////
.................... #device PIC16F628
.................... #list
....................
.................... #device *=16
.................... #use delay(clock=4000000)
0004: MOVLW ??65535
0005: MOVWF FSR
0006: BCF STATUS.7
0007: MOVF INDF,W
0008: BTFSC STATUS.2
0009: GOTO 019
000A: MOVLW 01
000B: MOVWF @78
000C: CLRF @77
000D: DECFSZ @77,F
000E: GOTO 00D
000F: DECFSZ @78,F
0010: GOTO 00C
0011: MOVLW 4A
0012: MOVWF @77
0013: DECFSZ @77,F
0014: GOTO 013
0015: NOP
0016: NOP
0017: DECFSZ INDF,F
0018: GOTO 00A
0019: GOTO 023 (RETURN)
.................... #fuses NOWDT, INTRC_IO, PUT, NOPROTECT, NOBROWNOUT, MCLR, NOLVP, NOCPD
....................
.................... void set_ledon(){
.................... output_high( PIN_B0 );
001A: BSF STATUS.5
001B: BCF TRISB.0
001C: BCF STATUS.5
001D: BSF PORTB.0
.................... }
....................
.................... void set_ledoff(){
.................... output_low( PIN_B0 );
*
0025: BSF STATUS.5
0026: BCF TRISB.0
0027: BCF STATUS.5
0028: BCF PORTB.0
.................... }
....................
.................... void setled(){
.................... set_ledon();
.................... delay_ms(500);
*
001E: MOVLW 02
001F: MOVWF @@22
0020: MOVLW FA
0021: MOVWF ??65535
0022: GOTO @delay_ms1
0023: DECFSZ @@22,F
0024: GOTO 020
.................... set_ledoff();
.................... }
*
0029: GOTO 032 (RETURN)
....................
.................... void main(){
.................... int x;
002A: CLRF FSR
002B: BCF STATUS.7
002C: MOVLW 1F
002D: ANDWF STATUS,F
002E: MOVLW 07
002F: MOVWF ADCON0
.................... x = 0;
0030: CLRF x
.................... do{
.................... setled();
0031: GOTO setled
.................... x += 1;
0032: MOVLW 01
0033: ADDWF x,F
.................... }while( x <= 10 );
0034: MOVF x,W
0035: SUBLW 0A
0036: BTFSC STATUS.0
0037: GOTO 031
....................
.................... }
....................
0038: SLEEP |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Fri Jul 15, 2005 11:07 am |
|
|
A classic error.
Code: | void setled(){
set_ledon();
delay_ms(500);
set_ledoff();
} |
The function set_ledoff is called, but within a few microseconds you are calling set_ledon again. The led is going off but only so short that you don't see it.
Change to:
Code: | void setled(){
set_ledon();
delay_ms(500);
set_ledoff();
delay_ms(500);
} |
|
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Fri Jul 15, 2005 2:14 pm |
|
|
If a function is only called once then it is inline unless you specify it with #separate. Notice that
Code: | .................... void set_ledoff(){
.................... output_low( PIN_B0 );
*
0025: BSF STATUS.5
|
comes right after
Code: | .................... set_ledon();
.................... delay_ms(500);
*
001E: MOVLW 02
001F: MOVWF @@22
0020: MOVLW FA
0021: MOVWF ??65535
0022: GOTO @delay_ms1
0023: DECFSZ @@22,F
0024: GOTO 020
.................... set_ledoff();
.................... }
|
24 then 25
The reason that it might seem like the function is not being called is what ckielstra pointed out. |
|
|
austin
Joined: 15 Jun 2005 Posts: 2
|
|
Posted: Fri Jul 22, 2005 12:29 pm |
|
|
ok, thanks |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|