当前位置:首页 » 编程软件 » pic单片机编程

pic单片机编程

发布时间: 2024-01-08 08:57:44

‘壹’ PIC单片机编程软件

KEIL没办法编译PIC的任何单片机的程序
用PIC单片机生产商MICROCHIP公司自己推出的MPLAB ide软件开发程序,免费的。
但这个软件默认安装的没有C编译器(默认的只能编译汇编文件)。你还得去Microchip那里下载PICC for PIC18(HI-TECH公司做的,这公司被MICROCHIP收购了),或者是Microchip公司自己开发MPLAB C18编译器。这些编译器安装后自动嵌入到MPLAB内部。
反正这两个都是收费的(最便宜的PICC买800rmb)。但网上有很多关于他们的破解版

‘贰’ microchip单片机pic怎么编程

microchip 的PIC 单片机,使用 MPLAB 编译器进行程序编译。
比较cao蛋的是,MPLAB 具有多种编译器,版本相互不兼容。
其中市场主打 的PIC16F 系列,多数采用 MPLAB IDE 编译器(本人用V8.8版本(破解的,嘘),新的应该是V8.9版本,不过本人没多关注,也不知道正不正确)。
MPLAB 编译器,在编程的时候,必须选择单片机型号,而本人使用的IDE V8.8版,并不能支持所有的PIC16系列单片机型号(最起码,最近使用的PIC16F1513就没有支持,在MPLAB X IDE里有支持)
而microchip 的高级单片机 PIC18系列,则以 MPLAB X IDE 编译器为主(行业称“十”版本),不过用了IDE V8.8后,再下载使用 IDE 10(就是上面的十版本)。你会觉得画风突变,完全找不着北,连配置字、用户程序版本号都没法兼容使用。前面熟悉的IDE,完全没法发挥任何作用。你又得重新开始学习一个新的编程软件(害得哥在新项目上浪费了N多时间)。
最可恨的是,IDE 10 把市场上销售的PICKIT 3 的离线脱机下载功能给搞死了(一插上KIT 3,IDE 10就自动升级KIT 3 的内部固件程序)。然后哥只能给它贴上“研发专用”标签!
PIC 的单片机很多地方要注意的,不用的特殊功能(特别是AD)不是你不开就好的,而是你必须关闭才行。
PIC 单片机有自己的一套 汇编,如果你用汇编,你必须重新学习它的汇编语言。如果你使用C,那还好,多数是兼容的(除了 程序续行(就是单行程序太长,进行多行显示))。不过哥没整好它的混编(不知道是哥能力不够,还是破解安装少东西,都是编译错误),没法发挥它的高效。PIC 单片机的 除法运算1000个周期、左右移16位无法编译、硬堆栈层限制(就是函数内 调用函数 调用函数 调用函数……,最明显的就是递归调用被限死)…………一堆弱点!

‘叁’ pic系列单片机用c语言编程时,让他执行A/D转换的指令是什么

AD转换不是一条指令就可以完成的,它要先经过端口设置,AD设置等过程后才能准备进入AD转换,下例是从北航的<PIC16单片机C程序设计与PROTEUS仿真>一书中得到的启发编制的程序,希望对你能有帮助.建议你看一下这本书,对初学和想进一步提高在PIC单片机应用编程等会有用的.

附图是对应程序的,在仿真时调整电位器可以看到AD结果的变化,并通过计算器可以验证程序的正确性.

//ADl转换示例,可以改变输入电压、AD通道、结果对齐方式等,看其变化

#include<pic.h>

__CONFIG(0x3F39);//配置位设置

voidmain(void)

{ chari,X,Y;

TRISA=0xFF; //将所有的A口设置为输入

TRISE=0x03; //将所有的E口设置为输入

TRISD=0; //C口与D口全为输出

TRISC=0;

ADCON1=0b10000000; //设置AD结果对齐方式、AD时钟选择(与ADCON0的位7,6一起),AD端口设置等

ADCON0=0b01011001; //AD时钟选择(与ADCON1的位6一起),通道选择,AD模块使能

while(1)

{ NOP();

for(i=0;i<3;i++) //延时时间大约20us

NOP();

ADGO=1; //开始AD

while(ADGO==1); //等待AD转换完成

ADIF=0;

X=ADRESH; //读取AD结果高字节至C口

PORTC=X;

Y=ADRESL; //读取AD结果低字节至D口

PORTD=Y;

};

}

‘肆’ 一般8位PIC单片机使用C语言还是汇编语言编程,好像编译器不是支持所有类型的单片机

PIC单片机的C语言编译器是分类支持各类PIC单片机的。
一般做工业产品的公司大多用汇编来编写程序,原因有:
1:pic的8位单片机一般ROM和RAM都相对较小,而现在的PIC的C编译器在优化方面做的不是很好,简单的一个C语句编译器能编出很多行汇编代码。所以有些开发人员认为用c还不如直接用汇编写。
2:因为PIC的C编译器不是免费的,破解版的又存在一些逻辑漏洞什么的。而用pic单片机应用的大多是一些需要稳定性极高的控制场合,所以很多开发公司都干脆直接使用汇编来写。

‘伍’ 求PIC单片机汇编示例程序

想知道哪种,给你粘贴,下面是一些计算子程序
;******************************************************************
;一、十六位二进制转换为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
;8*8位乘法宏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

‘陆’ PIC单片机C语言编程,二进制如何转换成十六进制。

二进制到十六进制不需要转换,C语言的十六进制在计算机中也是作二进制处理。
ADC的转换值通过液屏显示,你需要把ADC值转换为字符的ASCII码。
比如ADC=123,你要把123的二进制码转换为123字符对应的二进制码。
方法1:
使用#include<stdio.h>中 的字符串转换函数sprintf:
sprintf的一个功能:
int a = 12345;
char s[10] = "";
sprintf(s,"%d",a);
那么此时有
s[0]=1; s[1]=2; s[2]=3; s[3]=4; s[4]=5;
char s[10] = "12345 ";

也就是把一个int型按逐个字符转换成了char型,存在数组中的是字符型,ASC码
这样就能把字符的ASC码直接写入屏显示了。

2.把ADC的每一位值抠出,再每位数加上'0':
如ADC=123,
a=ADC/100=123/100=1,A=a+'0',就得到ADC 的最高位字符,就是'1'.
b=ADC/10%10=123/10%10,就得到ADC 的第二位字符'2' .

‘柒’ pic单片机可以用c编程吗用什么编译软件他是属于51系列的吗

PIC单片机可以用C,
编译环境(也就是编程软件)为MPLAB,他不属于51系列.

热点内容
厨房需要配置什么喷淋头 发布:2024-11-16 20:39:02 浏览:297
酒瓶解压 发布:2024-11-16 20:29:20 浏览:729
视频怎样上传到手机 发布:2024-11-16 20:26:30 浏览:258
怎么把ppt文件压缩 发布:2024-11-16 20:22:30 浏览:685
linux大内存 发布:2024-11-16 20:22:28 浏览:950
屏蔽迅雷上传 发布:2024-11-16 19:49:17 浏览:599
java怎么定义方法 发布:2024-11-16 19:48:15 浏览:143
我的世界国际版为什么连接不到服务器 发布:2024-11-16 19:44:18 浏览:854
购物导航源码 发布:2024-11-16 19:35:48 浏览:145
打账号密码是什么 发布:2024-11-16 19:26:07 浏览:290