pic单片机用什么开发软件(pic单片机开发环境)

pic单片机用什么开发软件(pic单片机开发环境),第1张

如果你习惯用C语言写程序的话,先告诫你,PIC系列的8位单片机很少用汇编写程序的。微芯也没推出针对pic8位单片机的C语言编译器(PIC18除外)。所以要用到C的时候,要用PICC这个编译器(这软件最便宜的也要五六百,但网上有破解)。如果用pic18系列或者PIC的16位单片机的话,推荐用微芯出的C语言编译器。(比PICC还贵,但也有破解的)。

搜索栏里找

你看看是这个不:

#ifndef _PIC_H

#define _PIC_H

#if defined(_10F200) || defined(_10F202) ||\\

defined(_10F204) || defined(_10F206)

#include <pic10f20xh>

#endif

#if defined(_12C508) || defined(_12C509) ||\\

defined(_12F508) || defined(_12F509) ||\\

defined(_12C508A) || defined(_12C509A) ||\\

defined(_12CE518) || defined(_12CE519) ||\\

defined(_12C509AG) || defined(_12C509AF) ||\\

defined(_12CR509A) || defined(_RF509AG) ||\\

defined(_RF509AF)

#include <pic125xxh>

#endif

#if defined(_16C432) || defined(_16C433)

#include <43xh>

#endif

#if defined(_16C52) || defined(_16C54) || defined(_16C54A) ||\\

defined(_16C54B) || defined(_16C54C) || defined(_16CR54A) ||\\

defined(_16CR54B) || defined(_16CR54C) || defined(_16C55) ||\\

defined(_16C55A) || defined(_16C56) || defined(_16C56A) ||\\

defined(_16CR56A) || defined(_16C57) || defined(_16C57C) ||\\

defined(_16CR57B) || defined(_16CR57C) || defined(_16C58A) ||\\

defined(_16C58B) || defined(_16CR58A) || defined(_16CR58B) ||\\

defined(_16C58) || defined(_16HV540)

#include <5xh>

#endif

#if defined(_16F54) || defined(_16F57)

#include <f5xh>

#endif

#if defined(_12C671) || defined(_12C672) ||\\

defined(_12CE673) || defined(_12CE674)

#include <pic1267xh>

#endif

#if defined(_12F629) || defined(_12F675)

#include <pic12f6xh>

#endif

#if defined(_12F683)

#include <pic12f683h>

#endif

#if defined(_12F675F) || defined(_12F675H) || defined(_12F675K)

#include <pic12rf675h>

#endif

#if defined(_16C505) || defined(_16F505)

#include <505h>

#endif

#ifdef _14000

#include <pic14000h>

#endif

#if defined(_16C554) || defined(_16C556) || defined(_16C557) || \\

defined(_16C558) || defined(_16C554A) || defined(_16C556A) || \\

defined(_16C558A)

#include <55xh>

#endif

#ifdef _16C61

#include <61h>

#endif

#if defined(_16C62) || defined(_16C62A) || defined(_16CR62) ||\\

defined(_16C62B)

#include <62h>

#endif

#if defined(_16C620) || defined(_16C621) || defined(_16C622) ||\\

defined(_16C620A) || defined(_16C621A) || defined(_16C622A) ||\\

defined(_16CE623) || defined(_16CE624) || defined(_16CE625) ||\\

defined(_16CR620A)

#include <62xh>

#endif

#if defined(_16C64) || defined(_16C64A) || defined(_16CR64)

#include <64h>

#endif

#if defined(_16C641) || defined(_16C642) ||\\

defined(_16C661) || defined(_16C662)

#include <6xxh>

#endif

#if defined(_16C65) || defined(_16C65A) || defined(_16CR65)

#include <65h>

#endif

#if defined(_16C66) || defined(_16C67)

#include <6xh>

#endif

#if defined(_16C71) || defined(_16C710) || defined(_16C711)

#include <71xh>

#endif

#if defined(_16C712) || defined(_16C715) || defined(_16C716)

#include <715h>

#endif

#if defined(_16C72) || defined(_16C72A) || defined(_16CR72)

#include <72h>

#endif

#if defined(_16C73) || defined(_16C73A) ||\\

defined(_16C74) || defined(_16C74A) ||\\

defined(_16C63) || defined(_16CR63) || defined(_16C63A) ||\\

defined(_16C65B) || defined(_16C73B) || defined(_16C74B) ||\\

defined(_16LC74B)

#include <74h>

#endif

#if defined(_16C76) || defined(_16C77)

#include <77h>

#endif

#if defined(_16C773) || defined(_16C774) || defined(_16C770) ||\\

defined(_16C771) || defined(_16C717) || defined(_16C745) ||\\

defined(_16C765)

#include <77xh>

#endif

#if defined(_16C781) || defined(_16C782)

#include <78xh>

#endif

#if defined(_16F627) || defined(_16F628)

#include <f6xh>

#endif

#if defined(_16F627A) || defined(_16F628A) || defined(_16F648A)

#include <f62xah>

#endif

#if defined(_16F630) || defined(_16F676)

#include <630h>

#endif

#if defined(_12F635) || defined(_16F636)

#include <f636h>

#endif

#if defined(_16F684)

#include <f684h>

#endif

#if defined(_16F688)

#include <f688h>

#endif

#if defined(_16F83) || defined(_16CR83) || defined(_16C84) || \\

defined(_16F84) || defined(_16F84A) || defined(_16CR84)

#include <84h>

#endif

#if defined(_16F87) || defined(_16F88)

#include <f87h>

#endif

#if defined(_16F873) || defined(_16F874) ||\\

defined(_16F876) || defined(_16F877) ||\\

defined(_16F872) || defined(_16F871) ||\\

defined(_16F870)

#include <87xh>

#endif

#if defined(_16F873A) || defined(_16F874A) ||\\

defined(_16F876A) || defined(_16F877A)

#include <8xah>

#endif

#if defined(_16F72) ||\\

defined(_16F73) || defined(_16F74) ||\\

defined(_16F76) || defined(_16F77)

#include <f7xh>

#endif

#if defined(_16F716)

#include <f716h>

#endif

#if defined(_16F737) || defined(_16F747) ||\\

defined(_16F767) || defined(_16F777)

#include <f7x7h>

#endif

#if defined(_16F818) || defined(_16F819)

#include <f81xh>

#endif

#if defined(_16C923) || defined(_16C924) ||\\

defined(_16C925) || defined(_16C926)

#include <9xxh>

#endif

#if defined(_7C695X)

#include <pic7695xh>

#endif

#if defined(_16C99) || defined (_16C99C)

#include <99h>

#endif

#if defined(_17C42) || defined(_17C42A) || defined(_17CR42) ||\\

defined(_17C43) || defined(_17CR43) || defined(_17C44)

#include <pic174xh>

#endif

#if defined(_17C752) || defined(_17C756) || defined(_17C756A) ||\\

defined(_17C762) || defined(_17C766)

#include <pic177xxh>

#endif

#define CLRWDT() asm("clrwdt")

#define SLEEP() asm("sleep")

#define NOP() asm("nop")

#define ___mkstr1(x) #x

#define ___mkstr(x) ___mkstr1(x)

#define __CONFIG(x) asm("\\tpsect config,class=CONFIG,delta=2");\\

asm("\\tdw "___mkstr(x))

#define __IDLOC(w) asm("\\tpsect idloc,class=IDLOC,delta=2");\\

asm("\\tglobal\\tidloc_word"); \\

asm("idloc_word"); \\

asm("\\tirpc\\t__arg," ___mkstr(w)); \\

asm("\\tdw 0&__arg&h"); \\

asm("\\tendm")

#if EEPROM_SIZE > 0

#define __EEPROM_DATA(a, b, c, d, e, f, g, h) \\

asm("\\tpsect eeprom_data,class=EEDATA,delta=2"); \\

asm("\\tdb\\t" ___mkstr(a) "," ___mkstr(b) "," ___mkstr(c) "," ___mkstr(d) "," \\

___mkstr(e) "," ___mkstr(f) "," ___mkstr(g) "," ___mkstr(h))

#endif

/

FLASH memory read/write/erase macros and function definitions

Notes:

__FLASHTYPE == 0 defined in devices that can only read flash memory - cannot write eg 16F777

__FLASHTYPE == 1 defined in traditional devices that can write 1 word at a time eg 16F877

__FLASHTYPE == 2 defined in devices that can only write in 4 word blocks eg 16F877A

__FLASHTYPE == 3 defined in devices requiring 32-word block erasure before writing eg 16F87

__FLASHTYPE == undefined if device can neither read nor write program memory

/

// macro FLASH_READ returns a word stored at a flash address

#if defined(__FLASHTYPE)

extern unsigned char flash_read(unsigned short addr);

#if EEPROM_SIZE > 0

#define FLASH_READ(addr) \\

(EEADR=(addr)&0xff, \\

EEADRH=(addr)>>8, \\

WREN=0, \\

EECON1 |= 0x80, \\

RD=1, \\

DC=0, \\

DC=0, \\

(EEDATH << 8) | EEDATA)

#else // FLASH_READ without EEPROM

#define FLASH_READ(addr) \\

(EEADR=(addr)&0xff, \\

EEADRH=(addr)>>8, \\

RD=1, \\

DC=0, \\

DC=0, \\

(EEDATH << 8) | EEDATA)

#endif

#endif // end FLASH_READ

// macro FLASH_WRITE used when writing only one word of data

#if __FLASHTYPE==2 || __FLASHTYPE==3

#define FLASH_WRITE(addr,data) \\

do{ \\

unsigned short x=data; \\

flash_copy((const unsigned char )&x,1,addr); \\

}while(0)

extern void flash_copy(const unsigned char source_addr,unsigned char length,unsigned short dest_addr);

#elif __FLASHTYPE==1

#define FLASH_WRITE(addr, value) \\

EEADR=((addr)&0xff); \\

EEADRH=((addr)>>8); \\

EEDATH=((value)>>8); \\

EEDATA=((value)&0xff); \\

EECON1 |= 0x80; \\

WREN=1; \\

EECON2 = 0x55; \\

EECON2 = 0xaa; \\

WR=1; \\

asm("nop"); \\

asm("nop"); \\

WREN=0

#endif // end FLASH_WRITE

// macro FLASH_ERASE used to clear a 32-Byte sector of flash

#if __FLASHTYPE==3

#define FLASH_ERASE(addr) \\

while(WR)continue; \\

EEADR=((addr)&0xFF); \\

EEADRH=((addr>>8)&0xFF); \\

EECON1=0x94; \\

CARRY=0;if(GIE)CARRY=1;GIE=0;\\

EECON2=0x55;EECON2=0xAA;WR=1; \\

asm("\\tNOP"); \\

if(CARRY)GIE=1

// library function version

extern void flash_erase(unsigned short addr);

#endif // end FLASH_ERASE

//

/ EEPROM memory read/write macros and function definitions /

//

#if EEPROM_SIZE > 0

#ifdef __FLASHTYPE

// macro versions of EEPROM write and read

#define EEPROM_WRITE(addr, value) \\

while(WR)continue;EEADR=(addr);EEDATA=(value); \\

EECON1&=0x7F;CARRY=0;if(GIE)CARRY=1;GIE=0; \\

WREN=1;EECON2=0x55;EECON2=0xAA;WR=1;WREN=0; \\

if(CARRY)GIE=1

#define EEPROM_READ(addr) ((EEADR=(addr)),(EECON1&=0x7F),(RD=1),EEDATA)

#else // else doesn\'t write flash

#define EEPROM_WRITE(addr, value) \\

while(WR)continue;EEADR=(addr);EEDATA=(value); \\

CARRY=0;if(GIE)CARRY=1;GIE=0; \\

WREN=1;EECON2=0x55;EECON2=0xAA;WR=1;WREN=0; \\

if(CARRY)GIE=1

#define EEPROM_READ(addr) ((EEADR=(addr)),(RD=1),EEDATA)

#endif

/ library function versions /

extern void eeprom_write(unsigned char addr, unsigned char value);

extern unsigned char eeprom_read(unsigned char addr);

#endif // end EEPROM routines

//

/ Global interrupt enable/disable macro definitions /

//

#ifdef _PIC16

#ifndef ei

#define ei() (GLINTD = 0) // interrupt disable bit

#endif ei

#if defined(_17C42)

#ifndef di

#define di() { do { GLINTD = 1; } while ( GLINTD == 0 ); } // disable interrupt bit

#endif di

#else

#ifndef di

#define di() (GLINTD = 1) // interrupt disable bit

#endif di

#endif

#elif defined _PIC14

#ifndef ei

#define ei() (GIE = 1) // interrupt enable bit

#endif ei

#if defined(_14000) || defined(_16C61) || defined(_16C62) ||\\

defined(_16C63) || defined(_16C63A) || defined(_16C64) ||\\

defined(_16C65) || defined(_16C65B) || defined(_16C71) ||\\

defined(_16C73) || defined(_16C73B) || defined(_16C74) ||\\

defined(_16C74B) || defined(_16C84) || defined(_16C745) ||\\

defined(_16C765) || defined(_16LC74B)

#ifndef di

#define di() { do { GIE = 0; } while ( GIE == 1 ); } // disable interrupt bit

#endif di

#else

#ifndef di

#define di() (GIE = 0) // interrupt enable bit

#endif di

#endif

#endif

#endif / _PIC_H /

单片机的结构可以精划分为内核+外设;

即 “单片机内核+外设 = 单片机”,如果内核相同的两个单片机,相互之内是兼容的,虽不完全兼容,但是可以达到85%,比如说AT89S53和STC89系列的,都是51的内核,所以他们是85%兼容的,基本上AT89S53上内运行的,在STC89系列都能运行。

而你问的两种单片机,同属于一种内核,即8051内核,所以85%以上是能通用的,只有个别的寄存器可能需要小小改动一下。

想知道哪种,给你粘贴,下面是一些计算子程序

;

;一、十六位二进制转换为BCD数子程序

;

MOVLW 10H ;

MOVWF CNT ;

BCF STATUS,C ;

CLRF R2 ;

CLRF R1 ;

CLRF R0 ;

LOOP RLF AL ;

RLF AH ;

RLF R0 ;

RLF R1 ;

RLF R2 ;

DECFSZ CNT ;

GOTO ADJDEC ;

RETURN

ADJDEC MOVLW R0 ;

MOVWF FSR ;

CALL ADJBCD ;

MOVLW R1 ;

MOVWF FSR ;

CALL ADJBCD ;

MOVLW R2 ;

MOVWF FSR ;

CALL ADJBCD ;

GOTO LOOP ;

ADJBCD MOVLW 3H ;

ADDWF INDF,W ;

MOVWF TMP ;

BTFSC TMP,3 ;

MOVWF INDF ;

MOVLW 30H ;

ADDWF INDF,W ;

MOVWF TMP ;

BTFSC TMP,7 ;

MOVWF INDF ;

RETURN

;

;乘法宏

;两个八位无符号数乘法,乘积为十六位。部分积右移相加算法:乘数带进位右移一位,

;检查进位是否为一,若是一,部分积寄存器加被乘数,否则不加;然后部分积寄存器

;带进位右移一位;重复上述过程直至循环次数为八结束。

;

;宏的引用格式:MUL A,B

;完成 *** 作: (A)(B)---(A,B)

;影响状态位:C、Z和DC

;88位乘法宏MUL,结果的高字节部分存入(A),低字节存入(B)

;

MUL MACRO A,B ;

LOCAL MLOOP ;

;

;如只用乘法子程序,就下段。

;

CLRF TMPA ;

CLRF TMPB ;

MOVLW 8 ;

MOVWF CNT ;

MOVF A,W ;

BCF STATUS,C ;

MLOOP RRF B ;

BTFSC STATUS,C ;

ADDWF TMPA ;

RRF TMPA ;

RRF TMPB ;

DECFSZ CNT ;

GOTO MLOOP ;

MOVF TMPA,W ;

MOVWF A ;

MOVF TMPB,W ;

MOVWF B ;

;

ENDM

;

;除法宏DIV

;除法是乘法的逆运算。与十进制长除法类似,从被除数的最高有效位开始,把被除数左移

;一位至余数上,如果余数不够减去除数,则商寄存器左移,移入位为零,反之移入位为一

;余数减去被除数,把被除数的下一位移至除数上。重复上述过程直至处理完所有位。

;

;宏的引用格式:DIV A,B

;完成 *** 作: (A)为商部分,(B)为余数部分

;影响状态位:C、Z和DC

;8/8位除法宏DIV,结果(A)为商部分,(B)为余数部分

;

DIV MACRO A,B ;

LOCAL MLOOP ;

;

;如只用除法子程序,就下段。

;

MOVF A,W ;

MOVWF TMPA ;

MOVF B,W ;

MOVWF TMPB ;

MOVLW 8 ;

MVOWF CNT ;

CLRF A ;

CLRF B ;

DLOOP BCF STATUS,C ;

RLF TMPA ;

RLF B ;

MOVF TMPB,W ;

SUBWF B,W ;

BTFSC STATUS,C ;

MOVWF B ;

RLF A ;

DECFSZ CNT ;

GOTO DLOOP ;

;

ENDM ;

;

;间接寻址

CLRF R0 ;清除R0寄存器里的内容

MOVLW R0 ;

MOVWF FSR ;将R0寄存器的地址送入间接寻址指针FSR

MOVF INDF,0 ;

MOWF TEMP ;将间接寻址指针FSR所指地址R0寄存器里的内容送入TEMP

MOVLW 88H ;

MOVWF INDF ;将88H送入间接寻址指针FSR所指地址R0寄存器里

;

;将两位BCD数送入显示

;显示十位BCD数

DISPLAY SWAPF TEMP,W ;将TEMP寄存器里的内容的高低字节交换并送入W

ANDLW 0FH ;将0FH与W寄存器里的内容相与并送入W

CALL CODE_TAB ;查表取段码

MOVWF PORTD ;送入PORTD端口

MOVLW 1H ;

MOVWF PORTC ;选通PORTC,1

CALL DELAY ;调用延时

;显示个位BCD数

MOVF TEMP,W ;

ANDLW 0FH ;

CALL CODE_TAB ;

MOVWF PORTD ;

MOVLW 2H ;

MOVWF PORTC ;

CALL DELAY ;

;

;16位二进制除以8位二进制

DIV16

MOVF A,0

MOVWF DIV_H

MOVF BX,0

MOVWF DIV_L ;被除数高低字节分别送进各寄存器

MOVLW 9H

MOVWF DIVB ;将除数送进寄存器

MOVLW 10H

MOVWF CNT ;按被除数位数设定移位次数

CLRF AL

CLRF AH

CLRF BX

DLOOP

BCF STATUS,C

RLF DIV_L

RLF DIV_H

RLF BX

MOVF DIVB,W

SUBWF BX,W

BTFSC STATUS,C

MOVWF BX

RLF AL

RLF AH

DECFSZ CNT

GOTO DLOOP

RETURN

;

;8位乘以16位二进制乘法运算程序

;

MUL8

CLRF TMPA ;清除积的高位寄存器

CLRF TMPB ;清除积的中位寄存器

CLRF TMPC ;清除积的低位寄存器

MOVLW 10H ;因为8位二进制乘以16位二进制,乘数为16位,移位乘数,所以移位次数为16次

MOVWF CNT ;

MOVF BX,W ;将8位被乘数送进W

BCF STATUS,C;

MLOOP RRF TEMP_H ;

RRF TEMP_L ;带C循环右移16位乘数

BTFSC STATUS,C ;

ADDWF TMPA ;

RRF TMPA ;

RRF TMPB

RRF TMPC

DECFSZ CNT ;

GOTO MLOOP ;

MOVF TMPA,W ;

MOVWF AA ;

MOVF TMPB,W ;

MOVWF A

MOVF TMPC,W ;将乘积送进各寄存器。

MOVWF BX

RETURN

给你几个型号,如果一定要15V工作,只有加升压芯片

PIC12F508:8脚,2-55V

PIC10F200:6脚,2-55V

P89LPC01:8脚,24-36V,除电压外,与PC12F508 pin-to-pin兼容

MC9RS08KA1:6或8脚,18-55V

主要有:

MOV P1,#0AAH

ACALL延迟

MOV P1,#55H

ACALL延迟

SJMP主要

延迟:MOV R7,#0FFH /> DE:MOV R6

DJNZ R6,#0FFH,

DJNZ R7,

RET

最后,这是你想要的效果,不妨试试哦!

以上就是关于pic单片机用什么开发软件(pic单片机开发环境)全部的内容,包括:pic单片机用什么开发软件(pic单片机开发环境)、怎样在我的电脑中找到pic.h头文件、pic单片机程序不同能用吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10059712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存