PIC单片机入门_C语言编程技术

1.为什么也是C语言?

用C 语言来开发单片机系统软件最大的好处是编写代码效率高、软件调试直观、维护升级方便、代码的重复利用率高等,因此C 语言编程在单片机系统设计中越来越广泛的运用。PIC 单片机的软件开发,同样可以用C 语言实现。
Microchip 公司没有自行开发PIC单片机的C 语言编译器,但其他公司有开发众多支持PIC 单片机的C 语言编译器,常见的有Hitech、CCS、IAR、Bytecraft 等公司。其中最常用的是Hitech 公司的PICC 编译器,它稳定可靠,编译生成的代码效率高,在用PIC 单片机开发者中得到广泛认可。
Hitech-PICC 编译器基本上符合ANSI C标准,但是不支持函数的递归调用。其主要原因是因为PIC 单片机特殊的堆栈结构。PIC 单片机的堆栈是硬件实现的,其深度已随芯片固定,无法实现需要大量堆栈操作的递归算法。  成的代码效率高,在用PIC 单片机开发者中得到广泛认可。

2.MpLab中配置PIC C编译环境,并进行项目开发

为便于PICC编译器的编译环境设置,应先在MPLAB IDE集成开发环境下创建一个PICC  C编译器的项目。
1.启动MPLAB IDE7.00集成开发环境窗口。选择集成开发环境中的Project->New菜单项,打开如下所示的新项目对话框,在此对话框中设置项目名和项目路径。

在项目名文本框中输入项目名led,在项目路径文本框中输入项目路径D:\led,也可以通过单击Browse按钮选择项目名的保存路径。
2.器件选择,其操作过程如下所示。首先在MPLAB集成开发环境中打开Configure菜单,然后单击Select Device菜单项,弹出如下所示的器件选择对话框。此处可以选择PICl6F877A作为开发芯片。

3.设置项目
在创建项目和选定器件后,接下来就可以设置工程的编译环境。首先进行语言组件的设置。
在Active Toolsuite下拉列表框中选择HI-TECH PICC Toolsuite作为开发工具组件,然后在Toolsuite Contents列表框中选择PICCCompiler项,如下图所示。  

3.PICC基本编程

3.1 PICC 中的基本变量类型

PICC 支持的基本变量类型见下表:

3.2 PICC 中的高级变量

基于上表的基本变量,除了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;
};

3.3 PICC 对数据寄存器bank 的管理

在PIC单片机编程时,单片机数据寄存器的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 中

3.4 volatile 修饰词 

PICC 中还有一个特殊的变量修饰词“volatile”,用来说明一个变量的值是会随机变化的,即使程序没有刻意对它进行任何赋值操作。
在单片机中,作为输入的IO 端口其内容将是随意变化的;很多特殊功能寄存器的值也将随着指令的运行而动态改变。所有这种类型的变量必须将它们明确定义成“volatile”类型,例如:
volatile unsigned char STATUS @ 0x03;
volatile bit commFlag;

3.5 标准库函数

PICC 提供了较完整的C 标准库函数支持,其中包括数学运算函数和字符串操作函数。在程序中使用这些现成的库函数时需要注意的是入口参数必须在bank0 中。
如果需要用到数学函数,则用 “#include <math.h>” 包含头文件;如果要使用字符串操作函数,就需要包含“#include <string.h>”头文件。在这些头文件中提供了函数类型的声明。直接查看这些头文件就可以知道PICC 提供了哪些标准库函数。
C 语言中的格式化输出函数“printf/sprintf”用在单片机的程序中时要特别谨慎。printf/sprintf 是一个非常大的函数,一旦使用,你的程序代码长度就会增加很多。 

4.C和汇编混合编程

用C 语言进行单片机应用程序开发时经常要使用汇编语句。比如,单片机的一些特殊指令操作在标准的C 语言语法中没有直接对应的描述,例如PIC 单片机的清看门狗指令“clrwdt”和休眠指令“sleep”。这样,一个项目中就会出现C 和汇编混合编程的情形,我们在此讨论一些混合编程的基本方法和技巧。
在C 原程序中直接嵌入汇编指令是最直接最容易的方法。如果只需要嵌入少量几条的汇编指令,PICC 提供了一个类似于函数的语句:
asm(“clrwdt”)  ;
双引号中可以编写任何一条PIC 的标准汇编指令。例如:
for (;;) {
asm("clrwdt"); //清看门狗
asm("sleep"); //休眠
asm(“nop”); //空操作延时 }
如果需要编写一 段连续的汇编指令,PICC 支持另一种语法描述:用 “#asm”开始指令段,用 “#endasm”结束。
例如下面的一段嵌入汇编指令实现了将0x20~0x7F 间的RAM 全部清零:
#asmmovlw 0x20movwf  _FSRclrf  _INDFincf _FSR, fbtfss _FSR,7goto  $-3
#endasm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/250845.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

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

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

Python知识回顾(10)

Day 10 本节主要讲解的是Python中文件操作(IO 技术)方面的知识。 文章目录 1.文件的处理1.1.1 文本文件和二进制文件1.1.2 文件操作相关模块概述1.3 创建文件对象 open()1.4 文本文件的写入1.5 常用编码介绍1.5.1 中文乱码问题1.5.2 write()/writelines()写入数据1.5.3 close(…

安卓手机阅读器_得到电纸书阅读器到底如何,值不值得买?使用一个月后,我告诉你答案!...

1 电纸书墨水屏的发展 一直以来,这世界上只有两种电纸书阅读器(电子书阅读器),一种是Kindle,另一种是其他。当然索尼的电子纸也不错,不过它的定位和价格已经不是普通的看电子书了。 自2007年第一代Kindle问世,如今已经将近13年过去了。Kindle有了更高的知名度,也有了更…

HNU-电子测试平台与工具2-串口实验5次

计算机串口使用与测量 【实验属于电子测试平台与工具】 湖南大学信息科学与工程学院 计科 210X wolf (学号 202108010XXX) 0.环境搭建 在实验开始之前,安装好Ubuntu 20.04操作系统。(这个没有难度) 但要提醒的是,这个ubuntu是xubuntu,而且虚拟硬盘只有10GB的大小…

Java开发 - 让你少走弯路的Redis的主从复制

前言 大家举举手&#xff0c;让我看看还有多少人不会配置Redis的主从&#xff0c;主主这些的。故事发生在前段时间&#xff0c;小伙伴看到了博主的MySQL主从&#xff0c;就问博主有没有Redis的主从配置教程&#xff0c;本以为网上到处都是教程的博主打开网页一搜&#xff0c;好…

程序员の诗 - 启蒙

启蒙 一入挨踢&#xff08;IT&#xff09;门&#xff0c;从此断红尘。 网络席卷人生路&#xff0c;代码看似少年梦。 面朝电脑黑眼圈&#xff0c;一坐又是一整天。 错把代码当成梦&#xff0c;写尽半生皆是空。 然&#xff0c; 机器识 0 1&#xff0c;吾辈创世界&#xf…

linux恶搞指令

alias 指令 linux命令提供了一个有用的工具alias,让我们将需要频繁使用但又过于冗长的命令设置一个别名&#xff0c;以后只需要输入一个简单的别名就可以达到同样的作用 alias 查看当前设置的所有别名 alias cdtest‘cd /src/www/app/account’ 等号两边不能有空格 unalias c…

我爱优雅的代码,我爱搞笑的诗词

天王盖地府&#xff0c;小鸡炖蘑菇&#xff0c;拿了此大奖&#xff0c;才是最幸福。 也不知道什么原因&#xff0c;平时总爱写写各种好玩的东西&#xff0c;作为程序员&#xff0c;也许是一个放松的方式吧&#xff0c;我不喜欢做一个只会写代码的码农&#xff0c;我喜欢能在各个…

用计算机术语写诗,网上盛行写诗软件 电脑作诗毫无逻辑令人喷饭

自从“诗坛芙蓉”赵丽华(BLOG)红遍网络之后&#xff0c;诗歌——一个几乎被忽略的文学体裁又重新引起了大家的关注。 昨日(27日)&#xff0c;记者在浏览网站时发现&#xff0c;目前网络上一款写诗软件十分盛行&#xff0c; 只要输入几个关键字&#xff0c;电脑就自动写出一首诗…

机器学习知识经验分享之五:R语言安装

python语言用于深度学习较为广泛&#xff0c;R语言用于机器学习领域中的数据预测和数据处理算法较多&#xff0c;后续将更多分享机器学习数据预测相关知识的分享&#xff0c;有需要的朋友可持续关注&#xff0c;有疑问可以关注后私信留言。 目录 一、R语言介绍 二、R语言安装…

上海斯歌K2 x 赛博威 | 战略合作深度交流暨签约仪式

2月16日&#xff0c;上海斯歌K2与赛博威进行了战略合作深度交流&#xff0c;并在赛博威广州科学城办公室举办战略合作签约仪式。 为满足客户在数智化建设过程中的多元化需求&#xff0c;上海斯歌K2与赛博威曾多次产生交集。凭借双方多年合作的良好基础&#xff0c;自2022年始&a…

Eclipse教程 Ⅸ

今天继续来学习Eclipse 快速修复、Eclipse 浏览菜单、Eclipse 查找以及Eclipse 悬浮提示的内容&#xff01;老规矩&#xff0c;废话不多说&#xff0c;开始吧。 Eclipse 快速修复 使用快速修复 在 Eclipse 编辑器中当你输入字母时&#xff0c;编辑器会对你输入的内容进行错误…

matplotlib常用功能汇总

文章目录 1.IDE里的1.1 显示模式&#xff08;plt.ion()和plt.ioff()&#xff09;1.2 backend说明 2 jupyter里的3 通用的3.1 cmap3.2 subplot()相关3.3 绘制动态图&#xff08;Animation类&#xff09;3.4 matplotlib利用rcParams配置样式参数 4. 与opencv连用可能遭遇的问题1.…

再谈Linux epoll惊群问题的原因和解决方案

差别是什么&#xff1f;差别只是西装&#xff01; 缘起 近期排查了一个问题&#xff0c;epoll惊群的问题&#xff0c;起初我并不认为这是惊群导致&#xff0c;因为从现象上看&#xff0c;只是体现了CPU不均衡。一共fork了20个Server进程&#xff0c;在请求负载中等的时候&…

自适应网格搜索的多目标粒子群优化(MOPSO)

此博客中对文档的翻译为博主自己学习时意译的&#xff0c;仅用于学习用途&#xff0c;如有侵权请联系博主删除。如果有不足的地方&#xff0c;欢迎大家评论指出&#xff0c;与博主共同学习。 MOPSO对多目标粒子群优化的一个小建议 这篇文章提出了一个建议是扩展粒子群优化的启…

Python 极简socket多人聊天群

前言 别看目录又臭又长&#xff0c;其实可以直接从 第二章 开始看&#xff0c;因为 第一章 主要讲述socket的基础概念。但如果你只是想参考一下&#xff0c;可以直接跳到最后一章。 整个项目只使用了python的标准库&#xff0c;并建议初学者看完第一章 注&#xff1a;写这篇教程…

微信群机器人微云助手微小云如何设置群内积分兑换

经常有用户咨询我们询问积分有什么用,小编沉思之后只能说,没什么卵用…… 不过现在不一样了,微小云在新版本中推出了积分商城,积分商城可以让群友使用群内产生的积分兑换礼品了 具体怎么使用呢 首先点击登录的机器人,然后就可以看到积分商城的设置部分了 积分商城一共有4个功…

【继承】【群主发红包案例】

一、题目要求&#xff1a; 群主发普通红包。某群有多名成员&#xff0c;群主给成员发普通红包。普通红包的规则: ①.群主的- -笔金额&#xff0c; 从群主余额中扣除&#xff0c;平均分成n等份&#xff0c;让成员领取。 ②.成员领取红包后&#xff0c;保存到成员余额中。 请…

如何区分企业微信的内部群和外部群

企微内部群主要分成3种&#xff1a;全员群、部门群、内部群 1&#xff0c;全员群&#xff1a;上限10000人&#xff0c;群名会有【全员】标记 企业全员群&#xff0c;新入职的员工将自动加入此群&#xff0c;离职后将自动退群。加入的同事可以看到历史的群聊消息。全员群人数上限…

QQ群主怎么清理群里的不良内容(怎么一次性全部删除QQ群不良信息)

今天突然发现加我们的QQ群的人数减少了&#xff0c;打开群属性看到了如下信息&#xff0c;该群在群搜索结果中的排名将不予展示&#xff0c;群内一下内容模块存在较多不良内容&#xff0c;清理并通过审核可解除搜索屏蔽并提升星级。显示是4星&#xff0c;最优是5星&#xff01;…