PIC PICC C 4K C <10% C PIC 11.3 MPLAB-IDE PICC PICC MPLAB-IDE MPLAB-IDE ICE2000 ICD2 PICC MPLAB-IDE IDE Project Set Language Tool Locations 11-1 11-1



Similar documents
C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

ICD ICD ICD ICD ICD

PIC16F F MPLAB 08 16F LED 15 LED

2.5 idlocs PIC idloc idloc 0x1234 ; 0x config idloc HEX errorlevel errorlevel Error (Warning) Message HEX 3-14 errorlevel

第5章:汇编语言程序设计

CC213

C语言的应用.PDF

第10章:CCP捕捉/比较/脉宽调制

文件名

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

C/C++ - 函数

51 C 51 isp 10 C PCB C C C C KEIL

C/C++ - 文件IO

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

目录

新版 明解C言語入門編

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

AN579

INCF SEC1,F ; 將 SEC1+1 作查表取回對應數字 MOVF SEC1,W banksel STRING1 banksel PORTB RETFIE run_sec2: MOVF SEC2,W SUBLW.5 GOTO run_min ; 將秒個位數歸 0 CLRF SEC1 MOVL

C C

C/C++语言 - C/C++数据

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C Project 30 C Project 3 60 Project 40

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

## $%& %& ## () #) (( * (+++ () #) #) (+ (+ #) #) ( #, - #)). #))- # ( / / / / $ # ( * *..# 4 #$ 3 ( 5 ) ### 4 $ # 5, $ ## # 4 $# 5 ( %

! # % % & # # % #!& % &# % &# % % % # %& ( (!& (! & & % % #!! ) %&! *& % %! % %!! # % %!! %*!& % &# % &# ) ) ( % # # ) % ( (!& (! (!! # % % #!! # ( &!

FY.DOC

EK-STM32F

Microsoft Word - MSP430 Launchpad 指导书.docx

新・解きながら学ぶC言語

untitled

c_cpp

C/C++程序设计 - 字符串与格式化输入/输出

nooog

华恒家庭网关方案

bingdian001.com

C 1

中 国 中 西 医 结 合 杂 志 年 月 第 卷 第 期!" 通 透 性 增 加 产 生 蛋 白 水 解 酶 促 进 血 管 内 皮 细 胞 有 丝 分 裂 内 皮 细 胞 从 基 底 膜 上 迁 移 到 血 管 周 围 间 隙 粘 附 聚 集 重 构 为 三 维 管 腔 并 与 周 围 血 管

新・明解C言語入門編『索引』

C/C++ - 字符输入输出和字符确认

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

# # # # # # # # # % # & # & # # # () # (( # * * (( # (+ # ( (# # (# # (# # ( # ( +) (

HCS08微控制器上有关内存分配的几个问题.doc

, 2., 3., , 3.,,

论 文 :?,,,,,,,,,, (, ),, ( ),,,,,,,, (, ) : (, ),,, :,, ;,,,,

C/C++ - 字符串与字符串函数

Oracle Solaris Studio makefile C C++ Fortran IDE Solaris Linux C/C++/Fortran IDE "Project Properties" IDE makefile 1.

学习MSP430单片机推荐参考书

工 程 应 用 陈 泾 生 等 继 电 保 护 检 验 标 准 化 作 业 专 家 系 统 的 研 发 和 应 用 实 践 统 硬 件 结 构 和 软 件 功 能 结 构 分 别 如 图 图 所 示 图 / 系 统 硬 件 架 构 0 1/!&%!!" "! 图 软 件 功 能 0 1 %! " 高

untitled

幻灯片 1

untitled

C/C++ - 数组与指针

新版 明解C++入門編

untitled

Abstract arm linux tool-chain root NET-Start! 2

C

4 中 南 大 学 学 报 医 学 版 摘 要 目 的 探 讨 早 发 性 精 神 分 裂 症 患 者 在 静 息 状 态 下 是 否 存 在 脑 功 能 连 接 异 常 以 及 异 常 区 域 的 定 位 方 法 采 用 第 版 美 国 精 神 障 碍 诊 断 与 统 计 手 册 ( * ) (

epub83-1

3.1 num = 3 ch = 'C' 2

Section1_16bit Arc.ppt

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

Microsoft Word - 第3章.doc

C/C++语言 - 运算符、表达式和语句

untitled

Bus Hound 5

C/C++ 语言 - 循环

言1.PDF

Application Note Format

untitled

ebook8-30

ebook15-10

PROTEUS VSM

! # % % % % % % % % %

zt


2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf("%d", &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf("%

Microsoft Word - CPE考生使用手冊 docx

泰康附加意外住院津贴收入保障保险条款

(4) 持 学 习 驾 驶 证 学 习 驾 车 时, 无 教 练 员 随 车 指 导, 或 者 不 按 指 定 时 间 路 线 学 习 驾 车 7.6 无 有 效 行 驶 证 指 下 列 情 形 之 一 : (1) 机 动 车 被 依 法 注 销 登 记 的 ; (2) 未 依 法 按 时 进 行

<4D F736F F D20B9F9B0EABBCDBBAFAB48DEB3B4C1A5BDB3F8A7692E646F63>

uc/os 1

_汪_文前新ok[3.1].doc

Microsoft Word - 文件9

C++ 程式設計

untitled

epub 33-8

NEXT SDT2.51 C:\ARM251 SDT2.51 ARM SDT 2.51 ARM PROJECT MANAGER SDT 2

1 LINUX IDE Emacs gcc gdb Emacs + gcc + gdb IDE Emacs IDE C Emacs Emacs IDE ICE Integrated Computing Environment Emacs Unix Linux Emacs Emacs Emacs Un

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

Chapter 2

.' 6! "! 6 "'' 6 7% $! 7%/'& 人 类 非 洲 锥 虫 病 又 称 昏 睡 病 是 布 氏 锥 虫 冈 比 亚 亚 种!! 或 布 氏 锥 虫 罗 得 西 亚 种 "#$$ %! &'!!! 感 染 引 起 的 一 种 寄 生 虫 病 以 采 采 蝇! 为 传 播 ' 媒

Tel: Fax: TTP-344M/246M /

第 期 熊 安 萍 等 *1$ 文 件 系 统 中 范 围 锁 机 制 的 应 用 研 究! 锁 命 名 空 间 '+'($($ 描 述 了 资 源 和 锁 的 集 合 它 同 时 在 客 户 节 点 和 服 务 节 点 存 在 不 同 之 处 只 是 利 用 一 个 数 据 标 识 来 有 效 区

an153f

(Guangzhou) AIT Co, Ltd V 110V [ ]! 2

2/14 Buffer I12, /* x=2, buffer = I 1 2 */ Buffer I243, /* x=34, buffer = I 2 43 */ x=56, buffer = I243 Buffer I243I265 code_int(int x, char *buffer)

/ / (FC 3)...

ARM JTAG实时仿真器安装使用指南

static struct file_operations gpio_ctl_fops={ ioctl: gpio_ctl_ioctl, open : gpio_open, release: gpio_release, ; #defineled1_on() (GPBDAT &= ~0x1) #def

Transcription:

PIC C 11.1 PIC C C C PIC C C PC PC PC C C PIC C PIC Microchip PIC C PIC C Hitech CCS IAR Bytecraft Hitech PICC PIC Hitech PIC PICC-Lite PIC PIC16F84 PIC16F877 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 1 of 26

PIC PICC C 4K C <10% C PIC 11.3 MPLAB-IDE PICC PICC MPLAB-IDE MPLAB-IDE ICE2000 ICD2 PICC MPLAB-IDE IDE Project Set Language Tool Locations 11-1 11-1 MPLAB-IDE HI-TECH PICC Toolsuite Executable MPLAB-IDE PICC Assembler C PICC Compiler PICC Linker PICC.EXE Location Browse PICC PICC.EXE PICC.EXE C.c.as HI-TECH PICC 3.1.3 C C C 2004-4-7 2 of 26

C 11-2 C I 2 C 11.4 PIC C 11-2 C PICC PIC C #include pic.h CONFIG PICC main 11-1 C #include <pic.h> #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; // 2004-4-7 3 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 4 of 26

11.5.2 PICC 11-1 bit PICC 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; bank3 float val[8]; // bank2 // bank3 PIC bank 128 C bank RAM bank Error[000] : Can't find 0x12C words for psect rbss_1 in segment BANK1 0x12C 300 bank1 bank1 bank1 bank bank bank C bank bank bank bank bank 2004-4-7 5 of 26

11.5.4 PICC PICC auto bank0 PIC PICC bank0 bank0 11.5.5 PICC bit PICC bank 8 PIC PICC 0x000 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 6 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; myflag.onebit.b3=1; 11-3 //b3 1 myflag.allbits=0; // 0 0 0 1 ANSI-C 0 11.5.6 PICC PICC IEEE-754 32 4 PICC 24 float 24 double 24 double 32 24 11.5.7 PICC C bank PICC PICC PICC 2004-4-7 7 of 26

unsigned char tmpdata @ 0x20; //tmpdata 0x20 PICC tmpdata 0x20 unsigned char tmpdata @ 0x20; //tmpdata 0x20 bit tmpbit0 @ tmpdata*8+0; bit tmpbit1 @ tmpdata*8+1; bit tmpbit2 @ tmpdata*8+2; //tmpbit0 tmpdata 0 //tmpbit0 tmpdata 1 //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 8 of 26

volatile const const ROM ROM const retlw PICC const unsigned char name[]= This is a demo ; // const RAM persistent C PICC main PICC persistent persisten persistent unsigned char hour,minute,second; // persistent persistent PIC 11.5.9 PICC PICC C PIC RAM FSR PICC PICC C RAM FSR FSR 256 bank0/1 bank2/3 512 PICC 2004-4-7 9 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; // C PICC PIC PICC RAM 2004-4-7 10 of 26

PC persistent volatile PICC bank bank0/1 bank2/3 bank0 bank // bank0/1 bank0 unsigned char *ptr0; // bank2/3 bank0 bank2 unsigned char *ptr0; // bank2/3 bank1 bank2 unsigned char * bank1 ptr0; bank bank bank volatile persistent const bank volatile persistent 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 11 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 12 of 26

C 11-1 11.6.4 PICC C void interrupt ISR(void); ISR void interrupt interrupt PICC 0x0004 retfie 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 13 of 26

PIC 11.6.5 PICC C bank0 #include <math.h> #include <string.h> PICC C printf/sprintf printf/sprintf C scanf printf PICC 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 14 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); 16 0x 01020304 11.8 MPLAB-IDE PICC 11.3 PICC MPLAB-IDE MPLAB MPLAB Make MPLAB Build All Project Make Build All 11.8.1 2004-4-7 15 of 26

PICC Configure Select Device MPLAB 11-1 #include <pic.h> pic.h MPLAB pic.h #include <pic.h> 11.8.2 PICC General 3.2.7 3-20 PICC MPAMS 11-3 PICC Include Path 11-3 PICC 11-4 PICC 11.8.3 PICC PICC Global C 11-4 Compile for MPLAB ICD C ICD Treat char as signed PICC char 2004-4-7 16 of 26

char Floating point double width PICC double 24 float 32 11.8.4 C PICC Compiler C C C General Advanced 11-5A 11-5B C 9 20% 2K PICC A B 11-5 C volatile PICC 2004-4-7 17 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 11-6 PICC // Psect Usage Map: // Psect Contents Memory Range ---------- ------------------------------ -------------------- powerup Power on reset code $0000 - $0003 intentry Interrupt service routine $0004 - $000C intcode Interrupt service routine $000D - $002C intret Interrupt service routine $002D - $0035 init Initialization code $0036 - $003D end_init Initialization code $003E - $0040 2004-4-7 18 of 26

clrtext Memory clearing code $0041 - $0047 const3 Strings and constant data $0048 - $0060 const Strings and constant data $0061 - $0071 const2 Strings and constant data $0072 - $0076 text Program and library code $0576 - $0582 text Program and library code $0583 - $07C7 float_te Arithmetic routine code $07C8 - $07FF rbss_0 Bank 0 RAM variables $0021 - $0042 temp Temporary RAM data $0043 - $0047 nvram Persistent RAM data $0048 - $004A intsave Registers saved on interrupt $004B - $004D intsave Registers saved on interrupt $007F - $007F intsave_1 Saved copy of W in bank 1 $00FF - $00FF rbit_0 Bank 0 bit variables $0100 - $0104 config User-programmed CONFIG bits $2007 - $2007 Memory Usage Map: // // Program ROM $0000 - $0076 $0077 ( 119) words Program ROM $0576 - $07FF $028A ( 650) words $0301 ( 769) words total Program ROM //bank0 Bank 0 RAM $0021 - $004D $002D ( 45) bytes Bank 0 RAM $007F - $007F $0001 ( 1) bytes $002E ( 46) bytes total Bank 0 RAM //bank1 Bank 1 RAM $00FF - $00FF $0001 ( 1) bytes total Bank 1 RAM //bank0 Bank 0 Bits $0100 - $0104 $0005 ( 5) bits total Bank 0 Bits // Config Data $2007 - $2007 $0001 ( 1) words total Config Data Program statistics: // Total ROM used 769 words (18.8%) // Total RAM used 48 bytes (25.0%) // 11-7 11.8.6 PICC Assembler PICC Microchip MPASM PICC *.as MPASM *.asm 2004-4-7 19 of 26

PICC PIC C 11-7 Enable optimization, 11-7 PICC 11.9 C C C PIC clrwdt sleep ; C 11.9.1 C PICC asm( clrwdt ); PIC for (;;) { asm("clrwdt"); // Task(); ClockRun(); asm("sleep"); asm("nop"); // // } 11-8 2004-4-7 20 of 26

PICC #asm #endasm 0x20~0x7F RAM #asm movlw movwf clrf incf btfss 0x20 _FSR _INDF _FSR,f _FSR,7 goto $-3 #endasm 11-9 11.9.2 C C C C _ C _ 11-9 FSR INDF C C _ 11-10 volatile unsigned char tmp; // bank0 void Test(void) // { #asm // clrf _STATUS // bank0 movlw 0x10 // movwf _tmp //tmp=0x10 #endasm if (tmp==0x10) { // // C ; } } 11-10 C bank0 C PICC C bank bank 11-11 2004-4-7 21 of 26

volatile bank1 unsigned char tmpbank1; volatile bank2 unsigned char tmpbank2; volatile bank3 unsigned char tmpbank3; // bank1 // bank2 // bank3 void Test(void) // { #asm // bcf _STATUS,6 // bank1 bsf _STATUS,5 movlw 0x10 // movwf _tmpbank1^0x80 //tmpbank1=0x10 bsf _STATUS,6 // bank2 bcf _STATUS,5 movlw 0x20 // movwf _tmpbank1^0x100 //tmpbank2=0x20 bsf _STATUS,6 // bank3 bsf _STATUS,5 movlw 0x30 // movwf _tmpbank1^0x180 //tmpbank1=0x30 #endasm // } 11-11 C bank0 C bank bank bank0 0x00 PIC bank PICC bank 11.9.3 C PICC bank0 C 11-5(B) Compile to assembly only C PICC C 11-12 C //C void Test(unsigned char invar1, invar2) 2004-4-7 22 of 26

{ unsigned char tmp1, tmp2; invar1++; invar2--; tmp1 = 1; tmp2 = 2; } // _Test ; _tmp1 assigned to?a_test+0 //tmp1?a_test+0 _Test$tmp1 set?a_test ; _tmp2 assigned to?a_test+1 //tmp2?a_test+1 _Test$tmp2 set?a_test+1 ; _invar1 assigned to?a_test+2 //invar1?a_test+2 _Test$inVar1 set?a_test+2 line 44 ;_invar1 stored from w // W bcf 3,5 bcf 3,6 movwf?a_test+2 ;ht16.c: 43: unsigned char tmp1, tmp2; incf?a_test+2 line 45 ;ht16.c: 45: invar2--; decf?_test // invar2?_test line 46 ;ht16.c: 46: tmp1 = 1; clrf?a_test incf?a_test line 47 ;ht16.c: 47: tmp2 = 2; movlw 2 movwf?a_test+1 line 48 ;ht16.c: 48: } return 11-12 PICC PICC C 11-13 //C void Test(unsigned char invar1, invar2) { 2004-4-7 23 of 26

unsigned char tmp1, tmp2; #asm // incf?a_test+0,f //tmp1++; decf?a_test+1,f //tmp2--; movlw 0x10 addwf?a_test+2,f //invar1 += 0x10; rrf?_test,w //invar2 rrf?_test,f #endasm // } 11-13 PICC PICC Little endian 11-14 C C //16 unsigned int RR_Shift16(unsigned int var, unsigned char count) { while(count--) // { #asm rrf?_rr_shift16+0,w rrf?_rr_shift16+1,f rrf?_rr_shift16+0,f #endasm // // C //var 1 C //var 1 // } return(var); // } 11-14 11.9.4 C C C PICC C PICC PICC 2004-4-7 24 of 26

C C C 11-14 C PIC count C C *.as PICC C PICC Hitech PICC C C C C 11-15 bit EvenParity(unsigned char data) { #asm swapf?a_evenparity+0,w // data?a_evenparity+0 xorwf rrf xorwf btfsc incf?a_evenparity+0,f?a_evenparity+0,w?a_evenparity+0,f?a_evenparity+0,2?a_evenparity+0,f #endasm // data if (data&0x01) return(1); else return(0); } 11-15 C C 2004-4-7 25 of 26

C 2004-4-7 26 of 26