• 本次学习采用PIC16F877A芯片及HJ-5G 开发板

一、IO口操作

1.1 设置I/O口方向:input or output

TRISx 方向寄存器 (Transport and Receive Index Storage)

1.2 设置I/O口的数值

PORTx 数值寄存器 端口

P.S.复位后初始状态:输入 数值为1 (记忆方法 input 1;output 0)
//流水灯

void main(void)
{
uint8 i = 0;
TRISD = 0X00; // while(1)
// {
//
// for(i=0;i<8;i++)
// {
// PORTD =~(1<<i);
// Delay(500);
// }
// for(i=0;i<8;i++)
// {
// PORTD =(0x80>>i);
// Delay(500);
// }
// } while(1)
{
PORTD=0x01;
for(i=8;i>0;i--)
{
Delay(200);
PORTD=PORTD<<1;
}
} }

1.3 共阴极数码管模块

1.4 其他

  • ULM2003芯片为反相器

  • 跳线帽 硬件设置需正确

  • 动态数码管显示——当IO口不够用时,可利用人眼的影像残留和数码管的余晖动态轮转显示

四、中断

4.1 中断响应,中断处理,中断返回

4.2 中断函数无须声明

4.3 不论中断使能位如何,当某一中断源发出请求时,中断标志位都会被设置为1,只是系统不一定会对该请求做处理。

4.4 中断服务程序中使用的所有子函数在主函数中不能出现(因为PICC编译器不支持函数的重载?需定义两个一样的延时函数)

五、计时器

TMR 模块

5.1 TMR0工作模式选择 OPTION_REG寄存器的T0CS位

T0CS = 0 —— 定时器(触发信号来源于单片机内部)

T0CS = 1 —— 计数器(触发信号来源于外部)

5.2 TMR0 8位,TMR1 16位

5.3 TMR0寄存器 存放着TMR0计数的初始值

5.4 计数溢出时,TMR0溢出中断标志位置1,(此时若溢出使能位T0IE 和总中断使能位GIE置1,系统将接受TMR0中断请求)

5.5 固定时延计算 n位TMR寄存器

分频比(2^n)指令周期

eg. 4MHz 晶振 指令周期为1微秒,对于16位TMR1,分频比为8

(65536-X)81 = 100 000 (每次100ms,X为寄存器初值)

P.S.分频比

eg.分频比1:8 必须等待8个脉冲到来,计数器才会加1(高频——>低频)

六、串口通信

6.1 异步/同步

异步通信:发送与接收方使用各自的控制时钟(两者时钟大约一致即可)

同步通信:发送方对接收方时钟直接控制,时钟完全一致

6.2 奇偶校验

奇校验:数据中"1"的个数与校验位"1"的个数之和为奇数

6.3 传输速率

P.S.比特率和波特率的区别

  • 比特率 (单个调制状态对应的二进制位数)

    在数字信道中,比特率是数字信号的传输速率,它用单位时间内传输的二进制代码的有效位(bit)数来表示,其单位为每秒比特数bit/s(bps)、每秒千比特数(Kbps)或每秒兆比特数(Mbps)来表示(此处K和M分别为1000和1000000,而不是涉及计算机存储器容量时的1024和1048576)。
  • 波特率 (每秒传播调制状态个数)

    波特率指数据信号对载波的调制速率,它用单位时间内载波调制状态改变次数来表示,其单位为波特(Baud)。
  • 波特率与比特率的关系为:比特率=波特率X单个调制状态对应的二进制位数。

P.S. 波特率:单片机或计算机在串口通信时的速率

波特率,可以通俗的理解为一个设备在一秒钟内发送(或接收)了多少码元的数据。它是对符号传输速率的一种度量,1波特即指每秒传输1个码元符号(通过不同的调制方式,可以在一个码元符号上负载多个bit位信息),1比特每秒是指每秒传输1比特(bit)。 单位“波特”本身就已经是代表每秒的调制数,以“波特每秒”(Baud per second)为单位是一种常见的错误。

波特率越高 不容易出现乱码

6.4 相关寄存器

6.4.1 TXSTA寄存器:TRANSMIT STATUS AND CONTROL REGISTER(发送状态与控制寄存器)

6.4.2 RCSTA寄存器:RECEIVE STATUS AND CONTROL REGISTER

6.4.3 BRG波特率发生器 :Baud Rate Generator波特率控制寄存器

6.5 USART模块(F877A芯片自带)

6.6 计算机端 RS232电平 (15v) ————> 单片机端 TTL电平 (5V)

利用MAX232进行电平转换

6.7 端口复用

RC6 —— TX 发送 Transmit

RC7 —— RX 接收 Receive

其他

1.OPTION ——> OPTION_REG (编译器不识别时)

2.数据类型 unsigned char 是无符号字符,数据长度是8位,表示值范围从0~255

  unsigned int 是无符号整数,数据长度是16位(或者32位,看单片机的型号而定),表示范围从065535(或者04294967295)

【PIC单片机】Pic单片机基础知识的更多相关文章

  1. 【单片机通信协议】CAN总线基础知识

    CAN总线基础知识(一) 1.1 CAN总线是什么? CAN(Controller Area Network)是ISO国际标准化的串行通信协议.广泛应用于汽车.船舶等.具有已经被大家认可的高性能和可靠 ...

  2. 【分享】4412开发板-嵌入式Linux开发须要掌握的基础知识和技能

    本文转自迅为电子论坛:http://www.topeetboard.com 1.Linux 基础 安装Linux操作系统 Linux文件系统 Linux经常使用命令 Linux启动过程具体解释 熟悉L ...

  3. React Native 入门基础知识总结

    中秋在家闲得无事,想着做点啥,后来想想,为啥不学学 react native.在学习 React Native 时, 需要对前端(HTML,CSS,JavaScript)知识有所了解.对于JS,可以看 ...

  4. 使用寄存器点亮LED——前言基础知识

    在点亮LED之前,我们需要具备一些基础知识: GPIO—general purpose intput output 是通用输入输出端口的简称,简单来说就是软件可控制的引脚,STM32芯片的GPIO引脚 ...

  5. FreeRTOS基础知识

    前面一篇文章介绍了一些命名规范之类的基础知识,但是我觉得还缺少一定前言知识,就是裸机和操作系统有什么区别,为什么我们需要学freertos,因为招聘要求?那么为什么招聘网又会有这个要求呢?所以我们为什 ...

  6. 【千纸诗书】—— PHP/MySQL二手书网站后台开发之基础知识

    前言: 在具体回顾每一个功能的实现前,还是有必要先温习一些项目涉及到的PHP.MySQL[语法基础].项目github地址:https://github.com/66Web/php_book_stor ...

  7. 「Java面试题/知识点精华集」20000+字的Java基础知识篇(2020最新版) !

    本文已经收录进我的 79K Star 的 Java 开源项目 JavaGuide:https://github.com/Snailclimb/JavaGuide (「Java学习+面试指南」一份涵盖大 ...

  8. FreeRTOS学习笔记——FreeRTOS 任务基础知识

    RTOS 系统的核心就是任务管理,FreeRTOS 也不例外,而且大多数学习RTOS 系统的工程师或者学生主要就是为了使用RTOS 的多任务处理功能,初步上手RTOS 系统首先必须掌握的也是任务的创建 ...

  9. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  10. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

随机推荐

  1. 创建React工程

    下载 main.jsBundle 包curl http://localhost:8081/index.ios.bundle -o main.jsbundle <!DOCTYPE html> ...

  2. springcloud整合bus

    bus的使用主要是配合springcloud config部分来一起使用,并没有单独使用 首先建立服务端: <dependency> <groupId>org.springfr ...

  3. SSM整合dubbo 进行分页查询

    1.先书写Mapper和sql语句 public interface ActEntityMapper { int deleteByPrimaryKey(String actId); int inser ...

  4. flask 的上下文管理

    Flask的上下文对象 Flask有两种Context(上下文),分别是 RequestContext 请求上下文 Request 请求的对象,封装了Http请求(environ)的内容 Sessio ...

  5. 老男孩python作业7-开发一个支持多用户在线的FTP程序

    作业6:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp s ...

  6. vue 子页面,向父页面 传值...

    子组件 通过 事件 向父组件传值..... 父组件 方法: methods: { appendData: function (list) { console.log(list); for (var i ...

  7. PHP_$_SERVER中QUERY_STRING,REQUEST_URI的用法

    $_SERVER存储当前服务器信息,其中有几个值如 $_SERVER["QUERY_STRING"], $_SERVER["REQUEST_URI"], $_S ...

  8. 详解Oracle hints PQ_DISTRIBUTE

    PQ_DISTRIBUTE是并行的hints中稍微复杂一点的一个 下面就这个hints做以下说明: 1.使用格式 /+ PQ_DISTRIBUTE(tablespec outer_distributi ...

  9. PIE SDK分类统计

    1. 算法功能简介 分类统计功能是将分类后的结果统计输出. PIE SDK支持算法功能的执行,下面对分类统计算法功能进行介绍. 2. 算法功能实现说明 2.1. 实现步骤 第一步 算法参数设置 第二步 ...

  10. SQL Server 2008 SQL2012 SQL2014 收缩日志 清空删除大日志文件

    SQL2008 SQL2012 SQL2014 的收缩日志 由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消:(SQL2005)Bac ...