PDA

View Full Version : calibration clock 12f508



volcane
- 4th December 2006, 06:50
hi!

f I want to use the inside (12F508) clock all it takes is writing the lace
@ device pic12F508, intrc_osc, MCLR_OFF,WDT_OFF,PROTECT_OFF
@ movwf OSCCAL must other be added? do you make me some example?

Acetronics2
- 4th December 2006, 09:01
Just have a look to the firsts manual pages ... there's a dedicated DEFINE !!!

Alain

volcane
- 4th December 2006, 09:21
Hi!

I wanted to only know if the compiler produces the code or must use of the directives in assembler?

I must read the datasheet of the 12f508 or I must read the handbook of compiler PICBASIC PRO?

Acetronics2
- 4th December 2006, 09:33
The minimum You HAVE to read is ... BOTH ...

A look to Microchip Assembler is not too much nor, if used !!!

...

volcane
- 4th December 2006, 10:47
hi!

ok, the forum because exists?

skimask
- 4th December 2006, 14:13
hi!

ok, the forum because exists?



To help a person who, after exhausting other options such as reading the datasheets or the manuals, or after doing a number of tests, try, experiments, etc. is just plain stuck and needs a nudge to figure out a problem.
Doesn't look to me like you've done any of the above...
JDG

volcane
- 4th December 2006, 15:37
Hi!

you have reason perfectly,but you before did not make to write the solution?

that is:@ MOVWF OSCCAL

Bruce
- 4th December 2006, 16:26
PBP handles this for you. It's very easy to verify.

Compile this for a 12F508;


Main:
HIGH 0
pause 500
low 0
pause 500
goto Main

End
Now simply open the .LST file, and look for it.

ORG 0 ; Start at 0
movwf OSCCAL ; Set oscillator calibration

Look in your PBP manual, section 2.5.1, PICmicro MCU Specific Issues.

volcane
- 4th December 2006, 19:03
Hi!

thanks, this is the example of like is answered to the forum

Archangel
- 4th December 2006, 23:06
PBP handles this for you. It's very easy to verify.


Now simply open the .LST file, and look for it.

Hi Bruce,
My Gosh!
I never opened a .lst file before, I opened one, from one of my simple programs which just outputs serial strings at 4 different baud rates to test serial inputs, and wow over 32000 lines of code! What really is astounding is that the pic can process it all so fast.
JS

mister_e
- 4th December 2006, 23:13
Yup but you'll notice many IF/IFDEF/IFNDEF wich are not process by the PIC but by the assembler. if you want to have something a little smaller, open the .asm file. on a 18F452 the single line...

hserout ["hello"]

will produce



; PICBASIC PRO(TM) Compiler 2.47, (c) 1998, 2006 microEngineering Labs, Inc. All Rights Reserved.
_USED EQU 1

INCLUDE "C:\PBP\18F452.INC"

RAM_START EQU 00000h
RAM_END EQU 005FFh
RAM_BANKS EQU 00006h
BANK0_START EQU 00080h
BANK0_END EQU 000FFh
BANK1_START EQU 00100h
BANK1_END EQU 001FFh
BANK2_START EQU 00200h
BANK2_END EQU 002FFh
BANK3_START EQU 00300h
BANK3_END EQU 003FFh
BANK4_START EQU 00400h
BANK4_END EQU 004FFh
BANK5_START EQU 00500h
BANK5_END EQU 005FFh
BANKA_START EQU 00000h
BANKA_END EQU 0007Fh

; C:\PBP\PBPPIC18.RAM 00028 FLAGS VAR BYTE BANKA SYSTEM ' Static flags
FLAGS EQU RAM_START + 000h
; C:\PBP\PBPPIC18.RAM 00012 R0 VAR WORD BANKA SYSTEM ' System Register
R0 EQU RAM_START + 001h
; C:\PBP\PBPPIC18.RAM 00013 R1 VAR WORD BANKA SYSTEM ' System Register
R1 EQU RAM_START + 003h
; C:\PBP\PBPPIC18.RAM 00014 R2 VAR WORD BANKA SYSTEM ' System Register
R2 EQU RAM_START + 005h
; C:\PBP\PBPPIC18.RAM 00015 R3 VAR WORD BANKA SYSTEM ' System Register
R3 EQU RAM_START + 007h
; C:\PBP\PBPPIC18.RAM 00016 R4 VAR WORD BANKA SYSTEM ' System Register
R4 EQU RAM_START + 009h
; C:\PBP\PBPPIC18.RAM 00017 R5 VAR WORD BANKA SYSTEM ' System Register
R5 EQU RAM_START + 00Bh
; C:\PBP\PBPPIC18.RAM 00018 R6 VAR WORD BANKA SYSTEM ' System Register
R6 EQU RAM_START + 00Dh
; C:\PBP\PBPPIC18.RAM 00019 R7 VAR WORD BANKA SYSTEM ' System Register
R7 EQU RAM_START + 00Fh
; C:\PBP\PBPPIC18.RAM 00020 R8 VAR WORD BANKA SYSTEM ' System Register
R8 EQU RAM_START + 011h
; C:\PBP\PBPPIC18.RAM 00027 GOP VAR BYTE BANKA SYSTEM ' Gen Op Parameter
GOP EQU RAM_START + 013h
; C:\PBP\PBPPIC18.RAM 00023 RM1 VAR BYTE BANKA SYSTEM ' Pin 1 Mask
RM1 EQU RAM_START + 014h
; C:\PBP\PBPPIC18.RAM 00026 RM2 VAR BYTE BANKA SYSTEM ' Pin 2 Mask
RM2 EQU RAM_START + 015h
; C:\PBP\PBPPIC18.RAM 00021 RR1 VAR BYTE BANKA SYSTEM ' Pin 1 Register
RR1 EQU RAM_START + 016h
; C:\PBP\PBPPIC18.RAM 00024 RR2 VAR BYTE BANKA SYSTEM ' Pin 2 Register
RR2 EQU RAM_START + 017h
; C:\PBP\PBPPIC18.RAM 00022 RS1 VAR BYTE BANKA SYSTEM ' Pin 1 Bank
RS1 EQU RAM_START + 018h
; C:\PBP\PBPPIC18.RAM 00025 RS2 VAR BYTE BANKA SYSTEM ' Pin 2 Bank
RS2 EQU RAM_START + 019h
; C:\PBP\18F452.BAS 00024 PORTL VAR PORTB
_PORTL EQU PORTB
; C:\PBP\18F452.BAS 00025 PORTH VAR PORTC
_PORTH EQU PORTC
; C:\PBP\18F452.BAS 00026 TRISL VAR TRISB
_TRISL EQU TRISB
; C:\PBP\18F452.BAS 00027 TRISH VAR TRISC
_TRISH EQU TRISC

; EEPROM data.


INCLUDE "A.MAC"
INCLUDE "C:\PBP\PBPPIC18.LIB"


; C:\PBP\18F452.BAS 00012 BANKA $0000, $007F
; C:\PBP\18F452.BAS 00013 BANK0 $0080, $00FF
; C:\PBP\18F452.BAS 00014 BANK1 $0100, $01FF
; C:\PBP\18F452.BAS 00015 BANK2 $0200, $02FF
; C:\PBP\18F452.BAS 00016 BANK3 $0300, $03FF
; C:\PBP\18F452.BAS 00017 BANK4 $0400, $04FF
; C:\PBP\18F452.BAS 00018 BANK5 $0500, $05FF
; C:\PBP\18F452.BAS 00020 LIBRARY "PBPPIC18"

; C:\PBP\18F452.BAS 00022 include "PIC18EXT.BAS"

; C:\PBP\18F452.BAS 00029 include "PBPPIC18.RAM"

; C:\PBP_PROG\A.BAS 00001 hserout ["hello"]
HSEROUT?C 068h
HSEROUT?C 065h
HSEROUT?C 06Ch
HSEROUT?C 06Ch
HSEROUT?C 06Fh

END

the interesting stuff is HSEROUT?C. now open the .MAC file, it produce...



NOLIST
; PICBASIC PRO(TM) Compiler 2.47, (c) 1998, 2006 microEngineering Labs, Inc. All Rights Reserved.

HSEROUT?C macro Cin
MOVE?CA Cin
L?CALL HSEROUT
endm
HSEROUT_USED = 1


LIST
so you know that it store each character (C) in Wreg(A), and then call the HSEROUT sub.

SteveB
- 5th December 2006, 01:37
Joe, not all of what you see is executed by the PIC (really only a small portion). Here is a snippet of a .lst file. Only what is highlighted in RED are actual lines of code which find there way into the PIC:



00000032 00472 _timeloopconst EQU 00032h
00000064 00473 _timeloopMAX EQU 00064h
00474 INCLUDE "MAIN_4.MAC"
00001
01236 LIST
00475 INCLUDE "C:\PBP\PBPPIC18.LIB"
00001 ;************************************************* *****************
00002 ;* PBPPIC18.LIB *
00003 ;* *
00004 ;* By : Leonard Zerman, Jeff Schmoyer *
00005 ;* Notice : Copyright (c) 2005 microEngineering Labs, Inc. *
00006 ;* All Rights Reserved *
00007 ;* Date : 09/22/05 *
00008 ;* Version : 2.46a *
00009 ;* Notes : *
00010 ;************************************************* *****************
00124 LIST
00125 ; Oscillator is 40MHz
01131 LIST
000000 01132 ORG RESET_ORG ; Reset vector at 0
01136 LIST
000000 6A1C 01137 clrf FLAGS ; Clear all flags on reset
01141 LIST
000002 EF4A F002 01142 goto INIT ; Finish initialization
01152 LIST
000008 01153 ORG RESET_ORG + 8 ; High priority interrupt vector at 8

000008 EF69 F002 01154 goto INTHAND ; Goto high priority user interrupt handler
01166 LIST
000018 01167 ORG RESET_ORG + 18h ; Low priority interrupt vector at 18h
000018 EF8F F002 01168 goto INTLHAND ; Goto low priority user interrupt handler
02164 LIST
00001C 50E9 02165 HSEROUTJ movf FSR0L, W ; Jumpman entry
02171 LIST
00001E 02172 HSEROUT
02173 CLRWDT? ; Keep Watchdog clear
M ifndef NO_CLRWDT
00001E 0004 M clrwdt
M endif
000020 A89E 02174 btfss PIR, TXIF ; Wait till ready
000022 D7FD 02175 bra HSEROUT
02176
02177 ifdef HSERPARITY_USED
02178 if (HSER_BITS != 9)
02179 andlw 7fh ; Clear top bit
02180 rcall HSERPARITY ; Calculate the parity
02181 ifdef HSER_ODD
02182 btfss GOP, 0
02183 else
02184 btfsc GOP, 0
02185 endif
02186 iorlw 80h ; Set parity
02187 else
02188 rcall HSERPARITY ; Calculate the parity
02189 bcf TXSTA, TX9D ; Start parity at 0
02190 ifdef HSER_ODD
02191 btfss GOP, 0
02192 else
02193 btfsc GOP, 0
02194 endif
02195 bsf TXSTA, TX9D ; Set parity in 9th bit
02196 endif
02197 endif
02198
000024 6EAD 02199 movwf TXREG ; Send the char
000026 80D8 02200 bsf STATUS, C ; Set no timeout for Serout2mod
000028 EF47 F002 02201 goto DUNN ; That's it

The other colors are:
BLUE = Declarations, processed by assembler
ORANGE= Assembler commands, directives, macros
GREEN = Comments
PURPLE= Labels

Also, here is a little legend for the lines of code:

PIC Commands ASM Commands
line# in HEX line# in ASM .
000024 6EAD 02199 movwf TXREG ; Send the char
000026 80D8 02200 bsf STATUS, C ; Set no timeout for Serout2mod
000028 EF47 F002 02201 goto DUNN ; That's it

EDIT: Maybe some better discriptors:
PIC line# = ADDRESS in PIC program memory
Commands in HEX = PIC Object Code (or OPCODE or Instruction)
Commands in ASM = Source Code


Hope this helps you in your understanding of what goes on "under the hood" :)

SteveB

sayzer
- 5th December 2006, 09:46
Nice example SteveB, a kind of tutorial.

Helpful in understanding indeed.


---------------------

Archangel
- 5th December 2006, 10:33
Joe, not all of what you see is executed by the PIC (really only a small portion). Here is a snippet of a .lst file. Only what is highlighted in RED are actual lines of code which find there way into the PIC:



00000032 00472 _timeloopconst EQU 00032h
00000064 00473 _timeloopMAX EQU 00064h
00474 INCLUDE "MAIN_4.MAC"
00001
01236 LIST
00475 INCLUDE "C:\PBP\PBPPIC18.LIB"
00001 ;************************************************* *****************
00002 ;* PBPPIC18.LIB *
00003 ;* *
00004 ;* By : Leonard Zerman, Jeff Schmoyer *
00005 ;* Notice : Copyright (c) 2005 microEngineering Labs, Inc. *
00006 ;* All Rights Reserved *
00007 ;* Date : 09/22/05 *
00008 ;* Version : 2.46a *
00009 ;* Notes : *
00010 ;************************************************* *****************
00124 LIST
00125 ; Oscillator is 40MHz
01131 LIST
000000 01132 ORG RESET_ORG ; Reset vector at 0
01136 LIST
000000 6A1C 01137 clrf FLAGS ; Clear all flags on reset
01141 LIST
000002 EF4A F002 01142 goto INIT ; Finish initialization
01152 LIST
000008 01153 ORG RESET_ORG + 8 ; High priority interrupt vector at 8

000008 EF69 F002 01154 goto INTHAND ; Goto high priority user interrupt handler
01166 LIST
000018 01167 ORG RESET_ORG + 18h ; Low priority interrupt vector at 18h
000018 EF8F F002 01168 goto INTLHAND ; Goto low priority user interrupt handler
02164 LIST
00001C 50E9 02165 HSEROUTJ movf FSR0L, W ; Jumpman entry
02171 LIST
00001E 02172 HSEROUT
02173 CLRWDT? ; Keep Watchdog clear
M ifndef NO_CLRWDT
00001E 0004 M clrwdt
M endif
000020 A89E 02174 btfss PIR, TXIF ; Wait till ready
000022 D7FD 02175 bra HSEROUT
02176
02177 ifdef HSERPARITY_USED
02178 if (HSER_BITS != 9)
02179 andlw 7fh ; Clear top bit
02180 rcall HSERPARITY ; Calculate the parity
02181 ifdef HSER_ODD
02182 btfss GOP, 0
02183 else
02184 btfsc GOP, 0
02185 endif
02186 iorlw 80h ; Set parity
02187 else
02188 rcall HSERPARITY ; Calculate the parity
02189 bcf TXSTA, TX9D ; Start parity at 0
02190 ifdef HSER_ODD
02191 btfss GOP, 0
02192 else
02193 btfsc GOP, 0
02194 endif
02195 bsf TXSTA, TX9D ; Set parity in 9th bit
02196 endif
02197 endif
02198
000024 6EAD 02199 movwf TXREG ; Send the char
000026 80D8 02200 bsf STATUS, C ; Set no timeout for Serout2mod
000028 EF47 F002 02201 goto DUNN ; That's it

The other colors are:
BLUE = Declarations, processed by assembler
ORANGE= Assembler commands, directives, macros
GREEN = Comments
PURPLE= Labels

Also, here is a little legend for the lines of code:

PIC Commands ASM Commands
line# in HEX line# in ASM .
000024 6EAD 02199 movwf TXREG ; Send the char
000026 80D8 02200 bsf STATUS, C ; Set no timeout for Serout2mod
000028 EF47 F002 02201 goto DUNN ; That's it

EDIT: Maybe some better discriptors:
PIC line# = ADDRESS in PIC program memory
Commands in HEX = PIC Object Code (or OPCODE or Instruction)
Commands in ASM = Source Code


Hope this helps you in your understanding of what goes on "under the hood" :)

SteveB
Thanks Steve,
It does a little, sorta like explaining fuel injection and closed loop control to your wife ;) ugh meaning absolutly no disrespect to the female gender whom I have always suspected were smarter than we, but I get this much: only a small portion of that code goes in the hex file and the rest controls the assembler / linker etc. Maybe your post should go into the code examples area or perhaps a new area . . . tutorials ?
JS