【单片机原理及其应用】第二章PIC16F887的基本介绍

计算机基础知识

单片机的基础架构
单片机的基础架构主要由两种:分别是冯 纽曼架构还有哈佛架构
冯纽曼架构:将数据存储器还有程序存储器结合起来,CPU通过同一条总线进行取值还有取操作数
哈佛架构:CPU通过两条不同的总线连接数据存储器还有程序存储器
架构
总线分为:数据总线地址总线控制总线,各个器件通过总线连接在一起。
总线的作用
机器字长是指计算机进行一次整数运算所能处理的二进制数据的位数(整数运算即定点整数运算),通常也是CPU内部数据通道的宽度。

PIC16F887

在pic16f887(microship的pic系列的8位机)中采取的是哈佛架构,此时程序存储器和数据存储器可以分开,这样子提高了运行的速度。
机器周期和指令周期
Tosc:振荡器时钟周期,也称为机器周期
Tcy:指令周期
Tcy=4Tosc
机器周期
PIC16F887系列芯片的时钟信号可以由内部振荡器还有外部振荡电路产生。外部振荡电路一般采用皮尔斯振荡电路
皮尔斯振荡电路
对于PIC系列的8位机器,非跳转指令均为单指令周期指令,跳转指令为双指令周期指令。
PIC16系列特性:内部32k~8MHz振荡器,8/16位定时器,比较器,8级硬件堆栈,中断功能, 10/12位AD转换器,USART,SPI,I2C,电压参考模块,比较器模块,最大时钟20MHz,35条指令。
在这里插入图片描述
其中有/的是对该引脚的复用
PIC16F887系列的主要参数
PIC16F887具体参数
1Byte(字节)=8bit(位)
在887里面,1字=14位
887中程序存储器(ROM)占8K字(8
2^10字)等于8K14bit
一个字存放一条指令,最多可以存放8192条指令
数据存储器共512Byte(字节),其中EEPROM占256字节,SRAM占368字节
PIC16F887的特点
①8位机代表数据总线是8位(根),即可直接访问8位数据存储器
RAM:512字节(1字节=8位),其中通用寄存器
368字节
②程序存储器:8K字(1字≠16位),而是与指令位长对应。
由于16系列指令位长14位,所以程序存储器容量
8K
14位
③引脚数:40/44。
I/O数(指用户可以用于编程的引脚数):35
35个既可以作为输出引脚又可以作为输入引脚
输入引脚:36个
输出引脚:35个
其中一号引脚RE3只能作为输入引脚
主要功能
◆3个定时器,2个8位,1个16位;
◆2个CCP模块,即捕捉、比较、脉宽调制模块;
◆1个同步串行接口,SPI与I2C;
◆1个通用同步/异步串行通信接口USART;
◆上电复位(POR);
◆掉电复位(BOR);
◆低功耗睡眠工作方式;
◆14路10位AD转换器;
◆2个模拟电压比较器;
◆1个参考电压发生器;
◆8级硬件堆栈;
◆可擦写10万次的FLASH程序存储器;
◆可擦写100万次的EEPROM,数据保持40年以上;
◆可自编程及在线编程;
◆看门狗电路WDT;
◆程序代码保护
程序存储器
1.程序计数器(Program Counter)
定义:用于存放下一条指令所在单元的地址的地方。
887系列的PC为13位,刚刚好可以存放对应程序存储器的8192个指令的地址值
2.堆栈
887的硬件为8级堆栈,意味着除中断外,能最多嵌套连续7级的子程序调用。那个少掉的一级是主函数main。堆栈是一个类似弹夹的结构,先入后出。当堆栈被填满后,就会出现溢出。这告诉我们在单片机中不能像计算机C语言中对函数大幅度的调用
我们可以通过使用宏定义等方式实行替代
3.复位向量
PIC16系列单片机的复位向量为0,当各种原因产生单片机复位时,程序是从复位向量即
0单元开始执行的。
4.中断向量
16系列单片机的中断向量为0x0004。当单片机产生中断时,硬件将PC指针强制指向该中断
向量,即程序自动跳转到0x0004。
5.程序存储器
程序存储器为4页,每页2k字。从页0到页3
程序存储器
数据存储器
数据存储器
说明:
①数据存储器分为4个体(bank):bank0~bank3,也称为体0~体3。
②特殊功能寄存器:图中已命名的单元;
通用寄存器:图中未命名的单元,可供用户自由使
用(共368单元=96+80+96+96);
未定义:图中灰色单元,不能使用;
映射:图中体1~体3各有16个单元映射到体0的
70h~7Fh,它们可以在不同的体中直接存取,便于编程。
③图中的特殊功能寄存器名称是在汇编程序中定义的,XC8中定义的绝大部分与之相同,但也有个别不同,在用XC8语言编程中要引起注意。(学会查看XC8安装目录下include------>后缀名为“.h”的头文件)
常用的SFR介绍
SFR全程为special function register
STATUS 状态 用于检测程序执行的情况
STATUS
OPTION_REG
选择寄存器
分频器
分频器的介绍
分频器的比率

XC8基本介绍

主要介绍几个概念,其他的知识在C语言笔记中都可以学习到。
变量的类型
几个变量及其长度

	__bit i; //__两条短的下划线_
	int a ;
    float b;
    char c;
    double e;

位变量,是XC8语言中特有的。有了位变量,就可
以方便进行位操作,如对某一引脚设置为高电平或低电平就很方便了。有了位变量,就没有必要用一个8位的变量表示,只要一位就可以表示的内容,可以节省单片机的内存。位变量可以类比布尔值理解,占1bit空间。
变量的转化
自动类型转换的转换规则是:
⑴实型赋予整型,只赋整数部分,舍去小数部分
⑵整型赋予实型,数值不变,但将以浮点形式存放,小数部分值为0
⑶字符型赋予整型,由于字符型为单字节,而整型为双字节,故将字符型的值放到整型量的低8位中,高8位为0
⑷整型赋予字符型,把低8位赋予字符型变量,高8位无效
变量修饰关键词
1.extern 外部变量声明
如果在一个C程序文件中要使用一些由其他文件定义的变量或者引用由嵌入汇编程序定义的变量,那么在本程序文件中要将这些变量声明成“extern”外部类型。
sub1.c

char var1,var2;

在sub2.c中可以引用

extern  char var1,var2;

2.volatile 易变型变量声明
告诉编译器,这些变量是随机的,不要对这些变量进行优化处理。
因为在单片机运行过程中可能需要多次地对端口进行读取值,如果按照标准C里面来说,编译器优化,会导致只能执行最后一条读取指令。
为了方便单片机的使用,在相关的头文件中,所有的特殊功能寄存器都已经被定义成volatile型。
此外,当子程序定义的变量在主程序中没有用
到时,不用” volatile”关键字定义时,这些变量
会被忽略,即在观察窗口中看不到它们!当在定义变量时用了” volatile”关键字时,可以在观察窗口中见到它们。

3.const 常数型变量声明

  1. 单片机的常数实际上是存于程序存储器的,这是因为通常单片机的程序存储器相对数据存储器大,可以存入较多的常数。
  2. 常数在程序存储器中是以查表的形式返回值。
  3. 一个程序存储器单元(字,14位)只能存储一个8位的字节常数(字符型),即一个整形常数必须存放在两个连续的程序存储器单元中!
    ⒋. persistent 非初始化变量声明
    标准C语言的程序在开始运行前首先要把所有定义的但没有赋初值的变量全部清零。但在单片机中,有的变量是不能清零的,如有的端口的值是由外部线路确定的,有的寄存器内容在非上电复位时是不改变的。
    xc8提供了“persistent”修饰词以声明此类变量无需在复位时自动清零,并且在退出某些函数时这类变量仍然保留。
    5.static 静态变量声明
    如在声明中加了静态变量修饰词“static”后,则在退出函数后,这类变量仍然保留。延长局部变量的生命周期。
    小结
    共用体
    共用体
    带参数的宏定义
#define PI 3.1415926 //不带参数的宏定义
#define S(a,b) a*b//带参数的宏定义
#define BITSET(Var,Bitno) ((Var) |= 1<<(Bitno))
#define BITCLR(Var,Bitno) ((Var) &= ~(1<<(Bitno)))
#define SEND_ONE(a) \
TXREG=a; \
while(TRMT==0)

运算符号及其优先级
逻辑运算

  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值