第十一章 pic单片机的 c 语言编程 - · pdf file第十一章 pic 单片机的c 语言...
Post on 06-Feb-2018
271 Views
Preview:
TRANSCRIPT
2004-4-7 1 of 26
PIC C 11.1 PIC C
C
C PIC C
C PC PC
PC
C
C PIC C
PICMicrochip PIC
C PIC C HitechCCSIARBytecraft HitechPICC PIC
Hitech PIC PICC-Lite PIC PIC16F84PIC16F877 PIC16F628 Flash PICC-Lite PIC C
PIC C Hitech-PICC www.htsoft.com IAR www.iar.com CCS www.ccsinfo.com/picc.shtml ByteCraft www.bytecraft.com/mpccaps.html Hitech-PICC C
PIC 11.2 Hitech-PICC
PICC ANSI
PIC PIC PIC
2004-4-7 2 of 26
PICPICC C 4KC
2004-4-7 3 of 26
C
11-2 CI2C
11.4 PIC C
PICC PIC C
#includepic.h
__CONFIG PICC
main
11-1 C
#include //
#include pc68.h //
//
__CONFIG (HS & PROTECT & PWRTEN & BOREN & WDTDIS);
//
void SetSFR(void);
void Clock(void);
void KeyScan(void);
void Measure(void);
void LCD_Test(void);
void LCD_Disp(unsigned char);
//
unsigned char second, minute, hour;
bit flag1,flag2;
//
11-2 C
2004-4-7 4 of 26
void main(void)
{
SetSFR();
PORTC = 0x00;
TMR1H += TMR1H_CONST;
LED1 = LED_OFF;
LCD_Test();
//
while(1) {
asm(clrwdt); //
Clock(); //
KeyScan(); //
Measure(); //
SetSFR(); //
}
}
11-1 C
11.5 PICC
11.5.1 PICC PICC 11-1
bit 1 0 1
char 8 PICC char
unsigned char 8
short 16
unsigned short 16
int 16
unsigned int 16
long 32
unsigned long 32
float 24
double 24 32 PICC double 24
32
11-1 PICC
PICC Little-endian
2004-4-7 5 of 26
11.5.2 PICC 11-1 bitPICC
C unsigned int data[10];
struct commInData {
unsigned char inBuff[8];
unsigned char getPtr, putPtr;
};
union int_Byte {
unsigned char c[2];
unsigned int i;
};
11-2 C
11.5.3 PICC bank PICC bank
bank bank0
unsigned char buffer[32];
bit flag1,flag2;
float val[8];
bank0 bank
bank bank1 unsigned char buffer[32]; // bank1
bank2 bit flag1,flag2; // bank2
bank3 float val[8]; // bank3
PIC bank 128
C bank RAM bank
Error[000] : Can't find 0x12C words for psect rbss_1 in segment BANK1
0x12C300 bank1 bank1 bank1 bank
bank
bankC bank bank bank bank bank
2004-4-7 6 of 26
11.5.4 PICC PICC auto bank0
PICPICC
bank0 bank0
11.5.5 PICC
bit PICC bank 8
PIC
PICC0x000 0 0x0000
8
flag1 0x123
0x123/8 = 0x24
0x123%8 = 3
flag1 0x24 3 flag1 0x24 0x123
PIC PICC tmp 0x20
tmp |= 0x80 => bsf 0x20,7
tmp &= 0xf7 => bcf 0x20,3
if (tmp&0xfe) => btfsc 0x20,0
C
C
2004-4-7 7 of 26
union {
struct {
unsigned b0: 1;
unsigned b1: 1;
unsigned b2: 1;
unsigned b3: 1;
unsigned b4: 1;
unsigned b5: 1;
unsigned : 2; //
} oneBit;
unsigned char allBits;
} myFlag;
11-3
myFlag.oneBit.b3=1; //b3 1
myFlag.allBits=0; // 0
0 0 1 1 ANSI-C 0
11.5.6 PICC
PICC IEEE-754 32 4PICC 24 float 24 double 24 double 32
24
11.5.7 PICC C
bank
PICC PICC PICC
2004-4-7 8 of 26
unsigned char tmpData @ 0x20; //tmpData 0x20
PICC tmpData
0x20 0x20
unsigned char tmpData @ 0x20; //tmpData 0x20
bit tmpBit0 @ tmpData*8+0; //tmpBit0 tmpData 0
bit tmpBit1 @ tmpData*8+1; //tmpBit0 tmpData 1
bit tmpBit2 @ tmpData*8+2; //tmpBit0 tmpData 2
tmpData
11.5.8 PICC
extern C
extern code1.c bank1 unsigned char var1, var2; // bank1
code2.c extern bank1 unsigned char var1, var2; // bank1
volatile
PICC C
volatile IO
volatile volatile unsigned char STATUS @ 0x03;
volatile bit commFlag;
volatile C
volatile
volatile
2004-4-7 9 of 26
volatile
const const
ROM ROM constretlw PICC
const unsigned char name[]=This is a demo; //
const RAM
persistent C
PICC mainPICC persistent
persisten persistent unsigned char hour,minute,second; //
persistent
persistent PIC
11.5.9 PICC PICC C PIC
RAM FSRPICC
PICC C RAM FSRFSR 256 bank0/1 bank2/3 512PICC
2004-4-7 10 of 26
unsigned char *ptr0; // bank0/1
bank2 unsigned char *ptr1; // bank2/3
bank3 unsigned char *ptr2; // bank2/3
bank bank0 bank1 bank2 bank3 bank bank0 bank bank
unsigned char *ptr0; // bank0/1
bank2 unsigned char buff[8]; // bank2
ptr0 = buff; // bank2 bank0/1
PICC Fixup overflow in expression (...)
bank
void SendMessage(unsigned char *);
bank0 bank1 bank2 bank3
void SendMessage_2(bank2 unsigned char *);
Fixup overflow
ROM ROM
const unsigned char company[]=Microchip; // ROM
const unsigned char *romPtr; // ROM
romPtr company; //
data = *romPtr++; // 1
*romPtr data; //
CPICC
PIC PICC RAM
2004-4-7 11 of 26
PC
persistentvolatile PICC
bank bank0/1 bank2/3
bank0bank
// bank0/1 bank0
unsigned char *ptr0;
// bank2/3 bank0
bank2 unsigned char *ptr0;
// bank2/3 bank1
bank2 unsigned char * bank1 ptr0;
bank bank
bank volatilepersistent const bank volatilepersistent const
bank // bank0/1 bank0
volatile unsigned char *ptr0;
// bank2/3 bank1
bank2 unsigned char * volatile bank1 ptr0;
// ROM ROM
const unsigned char * const ptr0;
11.6 PICC
PIC C
11.6.1
2004-4-7 12 of 26
PICC C PIC 2K C 2K 2K
11.6.2
PIC 8
7
PICC *.map
call graph
Call graph:
*_main size 0,0 offset 0
_RightShift_C
* _Task size 0,1 offset 0
lwtoft
ftmul size 0,0 offset 0
ftunpack1
ftunpack2
ftadd size 0,0 offset 0
ftunpack1
ftunpack2
ftdenorm
11-4 C
main C
11.6.3 PICC
void Task(void);
unsigned char Temperature(void);
void BIN2BCD(unsigned char);
void TimeDisplay(unsigned char, unsigned char);
2004-4-7 13 of 26
C
11-1 11.6.4 PICC C
void interrupt ISR(void);
ISRvoidinterrupt
interruptPICC
0x0004retfie
void interrupt ISR(void) //
{
if (T0IE && T0IF) // TMR0
{
T0IF = 0; // TMR0
// TMR0
}
if (TMR1IE && TMR1IF) // TMR1
{
TMR1IF = 0; // TMR1
// TMR1
}
} //
11-5 C
PICC
C
PICC
2004-4-7 14 of 26
PIC
11.6.5 PICC C
bank0 #include
#include PICC
C printf/sprintf
printf/sprintf
CscanfprintfPICC
getch() putch() scanf/printf getch() putch()
11.7 PICC PICC 11.7.1 PIC PICC
C __CONFIG (HS & UNPROTECT & PWRTEN & BORDIS & WDTEN);
__CONFIG
pic.h
HEX 16F7x
/**/
#define RC 0x3FFF // RC
#define HS 0x3FFE // HS
2004-4-7 15 of 26
#define XT 0x3FFD // XT
#define LP 0x3FFC // LP
/**/
#define WDTEN 0x3FFF //
#define WDTDIS 0x3FFB //
/**/
#define PWRTEN 0x3FF7 //
#define PWRTDIS 0x3FFF //
/**/
#define BOREN 0x3FFF //
#define BORDIS 0x3FBF //
/**/
#define UNPROTECT 0x3FFF //
#define PROTECT 0x3FEF //
11-6
11.7.2
PIC__IDLOC
__IDLOC (1234);
160x 01020304 11.8 MPLAB-IDE PICC
11.3 PICCMPLAB-IDE
MPLABMPLAB
MakeMPLAB
Build All
ProjectMakeBuild All
11.8.1
2004-4-7 16 of 26
PICC Configure Select Device
MPLAB 11-1 #include pic.hMPLAB pic.h
#include 11.8.2 PICCGeneral 3.2.7 3-20
PICCMPAMS 11-3 PICC
Include Path
11.8.3 PICCPICC Global C 11-4
Compile for MPLAB ICD ICD C ICD
Treat char as signedPICCchar
11-3 PICC
11-4 PICC
2004-4-7 17 of 26
char Floating point double widthPICC
double 24 float 32
11.8.4 CPICC Compiler
C C C
GeneralAdvanced 11-5A 11-5B
C
9
20%2K PICC
volatile
PICC
A B
11-5 C
2004-4-7 18 of 26
C
Generate assembly list file C*.lst C C
C Compile to assembly only C *.as C C C
11.8.5 PICC Linker PICC Linker
11-6
Generate map file
*.map
Display memory-segment usage
// Psect Usage Map: //
Psect | Contents | Memory Range
----------|------------------------------|---
top related