PIC单片机与PIC单片机C语言编程简介

article/2025/10/24 11:14:17

对于计算机学院与电子学院相关的同学来说,单片机一定不是一个陌生的概念。在大学的学习生涯中,经常用于教学的是MCS-51系列单片机。其实,除了MCS-51单片机外,还有一类单片机——PIC单片机。

PIC单片机,英文名为Peripheral Interface Controller,翻译为“开发和控制外围设备用集成电路”,可以看作是一种高度集成化的小型计算机,拥有CPU、寄存器、内存单元、串口并口等一系列计算机运行时需要依赖的硬件设备。

二、PIC单片机与MCS-51单片机的区别

相较于51系列单片机,PIC单片机的区别主要有3点:

1.总线结构。51系列单片机采用的是经典的“冯诺依曼体系结构”,而PIC单片机则是采用“哈佛体系结构”。这里简单介绍一下两种体系结构的不同:冯诺依曼体系结构是单总线结构,即数据传输与指令传输共用一条总线;而哈佛体系结构则是双总线结构,即数据传输与指令传输分别使用一条总线。由于采用哈佛体系结构,所以PIC单片机的数据总线和指令总线位数(宽度)可能不同。

2.流水线结构。51系列单片机采用的是单流水线结构,即在一条指令完全执行完毕后才会执行。而PIC单片机则有二级流水结构,可以在一定程度上实现指令并发(虽然不如x86/64系列CPU或者ARM系列CPU)。

3.汇编指令。51系列单片机大约有一百多条汇编指令,基本包含了在程序运行中需要用到的绝大多数汇编指令。而PIC的汇编只有35条,功能较少(例如没有常用的乘除功能,需要使用循环加/减实现乘除功能)。但是PIC的指令执行较快,PIC单片机一个指令的执行只需一个指令周期,而51系列单片机则需要2至4个指令周期。

除了以上区别,在保密性方面,PIC单片机不如51系列单片机,PIC单片机比较不能抗干扰,也很容易被解密。

三、PIC单片机环境C语言编程简介(pic单片机c语言)

相较于其他编程语言,使用C语言开发PIC单片机程序有许多优点:

1.相较于汇编语言来说,使用C语言这类高级编程语言进行编程比较简单方便。使用汇编语言编程需要掌握一定的CPU运行知识,而且对寄存器、运算器、指令集等都需要有一定的了解,编程时也需要时刻思考汇编指令的运行流程。而使用C语言编程时则只需将精力放在程序运行逻辑即可。

2.相较于C++、Java等面向对象编程语言来说,C语言更加贴近底层运行逻辑,没有封装、继承等更加高级的语法,更加纯粹地关注程序的执行流程。

PIC单片机环境下的C语言编程与我们平时使用的C语言在语法上大致类似,不过仍有些许不同。下面对PIC单片机的C语言编程做简要介绍。

1.编译器配置。由于PIC单片机有独特的CPU架构,因此不同于传统的gcc或者vc++编译器进行编译,PIC单片机环境下的C语言有专门的C语言编译器PICC Compiler。

2.PIC单片机C语言同样支持常见的short、int、long、float等基本数据类型。不过需要注意的是,PIC单片机C语言的int类型为16位存储,long类型为32位存储,float类型为24位存储。

3.除了基本数据类型外,PIC单片机C语言也同样支持数组、结构体和联合体等复合数据类型。

4.PIC单片机C语言有一个特殊的数据寄存器bank,该寄存器由程序员管理,在定义变量时必须指定变量存储位置,若不指定则默认存储在bank0中。

若定义存储于其他bank寄存器的变量,则需要在定义变量时指定bank寄存器编号。例如:

bank1 unsigned char buffer[32];

bank2 int flag1, flag2;

5.PIC单片机C语言保留volatile关键字,用于告知某些特殊的值可能会发生改变。(pic单片机c语言)

6.使用PIC单片机C语言编程时,虽然也可调用标准库函数,不过由于PIC单片机性能有限,由于诸如scanf()/printf()等库函数的代码比较繁杂,因此在调用这些库函数时需要额外谨慎,可能会造成程序运行时间大幅度增加甚至宕机。

7.PIC单片机C语言支持C语言与汇编语言混合编程。若在C语言内插入汇编语言代码,则需要使用asm关键字标识。

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。(点击找小助理领取)icon-default.png?t=M85Bhttp://makerschool.mikecrm.com/olf7geW

 


http://chatgpt.dhexx.cn/article/f9bQWT7p.shtml

相关文章

PIC单片机应用开发实践教程(三): MCU配置位与烧录

1 编译 工程建好并把相应的 .c和.h文件都加载到工程后,如下图 试试编译,如果没有语法错误,编译结果如下 到这里,是不是可以进行烧录了呢?不急,还有很重要的一个步骤,MCU配置位的设置&#xff0…

PIC单片机应用开发实践教程(一):MPLAB X IDE 开发环境安装

源码基于 PIC16F15355开发板,想了解详情,请点 PIC16F15355开发板 1 准备电脑一台 2 下载开发环境 MPLAB-X-IDE 点Download后,自动下载。 3 下载C编译器(以8位MCU用的xc8编译器为例) MPLAB XC8 Compiler 4 安装MP…

PIC单片机入门教程(一)—— 准备工作

PIC单片机入门教程(一)—— 准备工作 1、电脑一台(推荐运行Windows 7 旗舰版 64位系统) 2、选择合适的烧录/调试工具 2.1 “Device Support.html”文件列举了所有器件能支持哪些烧录/调试工具,文件官方版本说明包里 下…

PIC单片机入门教程(三)—— 安装编译器(MPLAB XC Compilers)

PIC单片机入门教程(三)—— 安装编译器(MPLAB XC Compilers) 1、下载编译器(MPLAB XC Compilers) XC8、XC16和XC32对应8位、16位和32位PIC单片机,按实际使用的单片机选择下载最新版本即可。 截…

PIC单片机入门教程(四)—— 第一个工程

PIC单片机入门教程(四)—— 第一个工程 1、新建工程 1.1 菜单栏“文件”->“新建项目” 1.2 “Microchip嵌入式”->“独立项目”->“下一步” 1.3 在器件栏直接输入你的单片机型号,这里以PIC12F675为例。输入“PIC12F675”->“下…

PIC单片机入门_指令系统

1.前文回顾 前面学习了PIC单片机的系统框架,也介绍了程序存储器、数据存储器的组织形式。这里需要补充一点的就是寻址方式,之前仅仅提到了立即数寻址、直接寻址。其实还有几个比较重要的寻址方式,PC相对寻址&间接寻址! 1.1 PC…

Demand management

需求管理(Demand Management)用于连接计划需求,销售需求和物料计划(MPS和MRP)。

Data Quality Services

Data Quality Services 简介 SQL Server 2012 其他版本 使用 Data Quality Services (DQS) 提供的数据质量解决方案,数据专员或 IT 专业人员可以维护数据的质量并确保数据满足业务使用的要求。 DQS 是一种知识驱动型解决方案,该解决方案通过计算机辅助方…

MySql: In aggregated query without GROUP BY...;this is incompatible with sql_mode=only_full_group_by

错误原因 这是MySql5.7以上的版本特性导致的。 解决方案 执行下面这段代码 SET sql_mode(SELECT REPLACE(sql_mode,ONLY_FULL_GROUP_BY,));运行一下然后就可以了,完。

Terms-level Query之Exists Query

​Exists Query属于Term-level Query查询, 查询某字段值不为空的文档。脑图如下: 内容说明: 本文内容同微信公众号【凡登】,关注不迷路,欢迎加入一起共同学习。原文链接:Terms-level Query之Exists Query 目录 一、语法&#xf…

Android Query managedQuery

今天说一下以下两种方式query数据: Java代码 Cursor c1 mContext.getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder); Cursor c2 mActivity.managedQuery(uri, projection, selection, sortOrder); 使用方法一&#xf…

Android开发managedQuery方法过时如何解决

今天在获取手机相册照片的时候用到了managedQuery,然后发现managedQuery过时了,如下图所示: 于是就百度了一下解决办法,其实也挺简单的。用getContentResolver().query()来代替managerQuery(),参数什么的都一样。 如上…

括号匹配的检验

[TO在这/.按“3.2.2 括号匹配的检验”中的思路&#xff0c;写一个函数“bool check(char* line)” //检查输入的字符串line中的括号是否匹配&#xff0c;不匹配则check函数返回false&#xff0c;否则返回true #include <stdio.h> #include <stdlib.h> #include &l…

括号匹配C语言实现

若你掌握以下知识&#xff0c;你可以更好地理解此篇文章&#xff1a; 1.C语言基本语法。 2.栈的核心思想与栈的构建。 分割线/ 相信看此篇文章的朋友很多是从书本过来的&#xff0c;书本那段描述真的晦涩难懂&#xff0c;什么紧迫性123456的&#xff0c;什么被需要&#xff0…

c语言括号匹配的检验,检验括号匹配的算法

用栈实现检验括号匹配的算法没啥具体描述&#xff0c;数据结构的知识&#xff0c;急用&#xff0c;有重赏 思想是 先进栈&#xff0c;获取第一个半边括号&#xff0c;标记一下&#xff0c;继续进栈直到获取到第二个与之匹配的另一外括号&#xff0c;然后出栈&#xff0c;取出内…

栈和括号匹配

栈是一种符合先进后出原则的数据结构 主要操作氛围进栈和弹栈。规则是栈顶元素先弹出而后进栈&#xff0c;进栈就是一个新的元素取代原本的栈顶元素。 栈可以用来进行最基本的括号匹配操作&#xff0c;栈的图示为&#xff1a;&#xff08;转载&#xff09; 具体代码如下 //定…

C++ 括号匹配

给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串&#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。 示例…

栈以及括号匹配

栈以及括号匹配 一、栈&#xff1a;二、定义&#xff1a;三、入栈&#xff1a;四、出栈&#xff1a;五、测试代码&#xff1a;六、括号匹配七、测试代码八、总代码九、测试结果 一、栈&#xff1a; 栈&#xff08;stack&#xff09;又名堆栈&#xff0c;它是一种运算受限的线性…

括号匹配问题详解

直接看题&#xff01;&#xff01; typedef char STDataType;typedef struct Stack {STDataType* a;int top; //栈顶的位置int capacity; //容量 }ST;void StackInit(ST* ps) {assert(ps);ps->a NULL;ps->top 0;ps->capacity 0;}void StackDestroy(ST* ps) {asse…

括号匹配

题目 给定一个只包括 (&#xff0c; )&#xff0c; {&#xff0c; }&#xff0c; [&#xff0c; ] 的字符串&#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效…