PIC16F877A.H头文件详细注释

合集下载

第1章 PIC16F877单片机实验板介绍

第1章  PIC16F877单片机实验板介绍

第1章PIC16F877单片机实验板介绍美国微芯公司推出的CMOS 8位PIC系列单片机,采用精简指令集(RISC)、哈佛总线结构、2级流水线取指令方式,具有实用、低价、指令集小、简单易学、低功耗、高速度、体积小、功能强等特点,体现了单片机发展的一种新趋势,深受广大用户的欢迎,已逐渐成为单片机发展的新潮流。

PIC16F87X是微芯公司的中档产品。

它采用14位的类RISC指令系统,在保持低价格的前提下,增加了A/D转换器、内部E2PROM存储器、比较输出、捕捉输入、PWM 输出(加上简单的滤波电路后还可以作为D/A输出)、I2C总线和SPI总线接口电路、异步串行通信(USART)接口电路、模拟电压比较器、LCD驱动、FLASH程序存储器等许多功能,可以方便地在线多次编程和调试,特别适用于初学者学习和在产品的开发阶段使用;它也可以作为产品开发的终极产品。

微芯公司还将FLASH芯片做成与OTP芯片价格相近,以致可用FLASH芯片代替OTP芯片。

微芯公司的单片机是品种最丰富的单片机系列之一,被广泛地应用于各种仪器和设备中。

这种单片机具有如下显著的特点:开发容易,周期短:由于PIC采用类RISC指令集,指令数目少(PIC16F87X 仅35条指令),且全部为单字长指令,易学易用;相对于采用CISC(复杂指令集)结构的单片机可节省30 %以上的开发时间、2倍以上的程序空间。

高速:PIC采用哈佛总线和类精简指令集,逐步建立了一种新的工业标准,指令的执行速度比一般的单片机要快4~5倍。

低功耗:PIC采用CMOS电路设计,结合了诸多的节电特性,使其功耗很低;100 %的静态设计可进入休眠(Sleep)省电状态,而不会影响激活后的正常运行。

微芯公司的单片机是各类单片机中低功耗设计最好的产品之一。

低价实用:PIC配备有OTP(One Time Programmable)型、EPROM型及FLASH型等多种形式的芯片,其OTP型芯片的价格很低。

PIC16F877A功能及其编程

PIC16F877A功能及其编程
RA3=1; NOP(); RA4=0;
4.1.1 端口A
因此,在使用RA口时,除了要设置TRISA外,有 时相关寄存器也要设置。
注意:在上电复位时,与AN有关的端口的默认 设置是作为模拟端口,即ADCON1(见4.6)中默认 值为0b00xx0000,这个值的设置结果是除RA4外的所 有的RA引脚都作为模拟输入。
信的时钟线; RC7/RX/DT:IO引脚、异步串行通信的接收、同步串行通
信的数据线。
4.1.4 端口D
端口D有8个引脚,它除了作为普通IO口外, 还能作为并行从动口使用。
4.1.5 端口E 端口E只有3个引脚,它们都可以作为AD转换
的模拟电压输入口,功能如下:
RE0/RD/AN5:IO引脚、并行从动口的读控制、 模拟电压输入通道AN5;
➢ 中断的特点:可返回性。中断处理结束后必须能 回到原先的程序,并且能继续运行原先的程序,
这就需要在中断时能进行现场保护与恢复。
中断的执行过程
➢ 中断发生:程序执行到某行,突然事件(能够产 生中断的事件)发生,产生中断。
➢ 断点保护:CPU自动将中断时刻即将要执行的下 一条指令的地址压入堆栈。
➢ 中断响应:CPU自动将PC强制设为0X0004,且GIE =0。执行中断服务程序(自动完成现场保护与恢 复,手动清中断标志位)。
将被调试系统占用,因此在调试时此二个引脚暂 不能使用。
3、8个引脚具有内部弱上拉使能控制 由OPTION_REG寄存器的第7位RBPU控制,如果弱 上拉使能,作为输入的RB口在端口悬空时将被上拉 到高电平。以RB0为例,如下图所示:
4、RB0/INT具有外部中断功能。
5、RB的的高4位还具有电平变化中断功能
ADIE

PIC16F877A定时器的学习

PIC16F877A定时器的学习

PIC16F877A定时器的学习由于实时数据的仿真需要用到定时器产生数据,今天晚上完成PIC16F877A 产生正弦波形,并将波形数据发送到上位机!这是一个三角波的仿真程序,并通过串口发送到上位机#include #include #include#include “main.h”#include“t232.h”#include“lcd.h”#include“timer.h”//define global variablebank1 uchar flag =0 ;//利用flag 判断中断时间是否到了!bank1 char dat[6] ;bank2 char str[]=“shan dong qing gong ye xue yuan”;bank2 char str1[]=“Starting........”;bank2 char str2[]=“Capturing.......”;bank2 char str3[]=“Stop..........” ;//bank2 float test = 0;//bank2 float t1 ;bank2 uchar t1 =0 ;bank2 uchar t2=0 ;bank1 uchar state = READY ;//当前状态bank1 uchar frame[3] ;//帧缓冲bank1 uchar temp ;//ms 级延时程序void DelayMS(uint ms){ uint i; while(ms--){ for(i=0;i//10us 级延时程序void Delay10US(uint us){ uchar i; for(i=0;iwhile(1) {while((t1>=-20)&&(state==CAPTURE)){t1++ ;sprintf(dat,”(%d)”,t1) ;send_str(dat);if(t1==20)break ;}while((t1}tips:感谢大家的阅读,本文由我司收集整编。

PIC16f877中文资料1

PIC16f877中文资料1

PIC16F877原理简介1.1 PIC16F877特性:PIC16F877是由Microchip公司所生产开发的新产品,属于PICmicro系列单片微机,具有Flash program程序内存功能,可以重复烧录程序,适合教学、开发新产品等用途;而其内建ICD(In Circuit Debug)功能,可以让使用者直接在单片机电路或产品上,进行如暂停微处理器执行、观看缓存器内容等,让使用者能快速地进行程序除错与开发。

如图1为PIC16F877的40根接脚图,PDIP是指一般最常见的DIP(Dual In Line Package)包装,而PIC单片机也有PLCC(Plastic Leaded Chip Carrier)与QFP(Quad Flat Package)两种形式的包装,依照不同的需求,寻找不同的包装形式。

如图所示,每根接脚都有其特定功能,例如Pin11与Pin32(VDD)为正电源接脚,Pin12与Pin31(VSS)为地线接脚;而有些接脚有两种甚至三种以上功能,例如Pin2(RA0/AN0)代表PORTA的第一支接脚,在系统重置(Reset)后,可自动成为模拟输入接脚,接收模拟讯号,也可经由程序规划为数字输出输入接脚。

图1. PDIP40引脚PIC16F877接脚说明图2. PDIP28和SOIC28引脚PIC16F877接脚图说明图3. PLCC44引脚PIC16F877脚位图说明图4. QFP44引脚PIC16F877引脚图说明PIC16F877属于闪控式(Flash)单片机,可以重复烧录,其ROM的容量总共是8K words,以2K为一个page,区分为4个pages;内部RAM总共有512个字节(00f~1FFh),以128个字节为一个Bank,共区分为4个Bank,如图5所示,每个Bank的前半段都有其特殊用途,分别连接到其特殊功能模块,例如I/O、CCP、Timer、USART、MSSP等。

第四章PIC16F877A功能及其编程

第四章PIC16F877A功能及其编程

WDT倍率 1:01
采用1:40M2 Hz晶 最振大,1:延用04时TM多R少0?
1:08 1:16 1:32 1:64 1:128
TMR0的预分频系数范围为2-256,如何获得1:1的倍率?
例:假设晶振振荡频率fosc=4MHz,求TMR0最大延 时时间是多少?
信的时钟线; RC7/RX/DT:IO引脚、异步串行通信的接收、同步串行通
信的数据线。
4.1.4 端口D
端口D有8个引脚,它除了作为普通IO口外, 还能作为并行从动口使用。
4.1.5 端口E 端口E只有3个引脚,它们都可以作为AD转换
的模拟电压输入口,功能如下:
RE0/RD/AN5:IO引脚、并行从动口的读控制、 模拟电压输入通道AN5;
与中断直接相关的位为INTEDG,它涉及到外 部中断(RB0/INT)的中断边沿选择,0为下降沿。
OPTION_REG=0b10111111; //等效 INTEDG=0
注意: ➢ 进入中断后硬件自动屏蔽全局中断,即中断后GIE=0,
中断返回后自动恢复全局中断允许,GIE=1。
➢ 因此,PIC16单片机不允许中断嵌套!也就是说,在 中断服务程序未退出时,即使有新的中断发生,也不 能进入中断。等当前的中断处理完成退出中断后才能 重新进入中断。
工作原理:递加计数。即由计数初值开始,每来若 干个计数脉冲(和预分频比有关),计数值+1,直 到255。若再加1,溢出,同时使计数当前值等于0
TMR0有溢出中断功能,T0IF将自动置1
若要对外部脉冲计数,必须 ①编程OPTION_REG ,(<T0CS>)置1 ②编程TRISA , RA4/T0CKI引脚设置为输入 ③硬件电路:符合一定要求的外部脉冲送RA4/T0CKI

PIC16f877中文资料

PIC16f877中文资料

PIC16f877中文资料PIC16F877原理简介1.1 PIC16F877特性:PIC16F877是由Microchip公司所生产开发的新产品,属于PICmicro系列单片微机,具有Flash program程序内存功能,可以重复烧录程序,适合教学、开发新产品等用途;而其内建ICD(In Circuit Debug)功能,可以让使用者直接在单片机电路或产品上,进行如暂停微处理器执行、观看缓存器内容等,让使用者能快速地进行程序除错与开发。

如图1为PIC16F877的40根接脚图,PDIP是指一般最常见的DIP(Dual In Line Package)包装,而PIC单片机也有PLCC(Plastic Leaded Chip Carrier)与QFP(Quad Flat Package)两种形式的包装,依照不同的需求,寻找不同的包装形式。

如图所示,每根接脚都有其特定功能,例如Pin11与Pin32(VDD)为正电源接脚,Pin12与Pin31(VSS)为地线接脚;而有些接脚有两种甚至三种以上功能,例如Pin2(RA0/AN0)代表PORTA的第一支接脚,在系统重置(Reset)后,可自动成为模拟输入接脚,接收模拟讯号,也可经由程序规划为数字输出输入接脚。

图1. PDIP40引脚PIC16F877接脚说明图2. PDIP28和SOIC28引脚PIC16F877接脚图说明图3. PLCC44引脚PIC16F877脚位图说明图4. QFP44引脚PIC16F877引脚图说明PIC16F877属于闪控式(Flash)单片机,可以重复烧录,其ROM 的容量总共是8K words,以2K为一个page,区分为4个pages;内部RAM总共有512个字节(00f~1FFh),以128个字节为一个Bank,共区分为4个Bank,如图5所示,每个Bank的前半段都有其特殊用途,分别连接到其特殊功能模块,例如I/O、CCP、Timer、USART、MSSP等。

pic16f877a程序笔记

pic16f877a程序笔记
}
void main()
{
uchar i;
TRISD=0x00;
while(1)
{
PORTD=0x01;
for(i=8;i>0;i--)
{
delay(200);
PORTD=PORTD<<1;
}
}
}
矩阵+蜂鸣器+数码管程序设计
#include<pic.h>
#define uchar unsigned char
{
PORTD=table[num1];//显示第一个数码管
PORTA=0x20;//0010 0000
delay(2);
PORTD=table[num2];//显示第二个数码管
PORTA=0x10;//0001 0000
delay(2);
PORTD=table[num3];//显示第三个数码管
PORTA=0x08;//0000 1000
void delay(uint x);
void init();
void scan();
void didi(uchar num);
void disp(uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6);
void main()
PORTA=0x01;//0000 0001
delay(2);
}
{
init();
while(1)
{
scan();
disp(key_num,2,3,4,5,6);
}
}
void delay(uint x)
{
uint a,b;

PIC16F877A开发学习板用户手册

PIC16F877A开发学习板用户手册

KEY_LED 实验步骤: 短接跳线 J23 将 hex 文件下载到单片机中 实验现象:按下 GPIO 键,松开后,led 点亮;按下 INT 健,松开后,led 灭 KEY_ZTJ 10、 矩阵键盘实验 KEY_JZH 实验步骤: 短接跳线 J50 的 LED_ON 和中间脚 将 hex 文件下载到单片机中 实验现象:按下按键,数码管显示键值 11、 定时器/计数器 T0 实验 T0_DSQ 实验步骤: 短接跳线 J23 将 hex 文件下载到单片机中 实验现象:下载代码,运行程序,LED 闪烁 T0_JS_1 实验步骤: 短接跳线 J50 的 LED_ON 和中间脚
断电后数据保持,上电后,从断电时的值开始加(写入 24C02 的数据为 1 递加到 99,LCD1602 从 24C02 中读数据之后显示)
AT24C02 实验步骤: 短接跳线 J18 上面两个引脚和 J22 上面两个引脚 将 hex 文件下载到单片机中 将 1602 液晶屏插入 1602 接口 如果此时没有显示则按复位键便可正常显示 实验现象:1602 第一行显示数值,数值从 1 加到 99, 断电后数据保持,上电后,从断电时的值开始加 17、 模数转换 AD 实验 AD_1
将 hex 文件下载到单片机中 实验现象:LED 灯依次点亮 2、 数码管实验 SMG 实验步骤: 短接跳线 J50 的 LED_ON 和中间脚 将 hex 文件下载到单片机中 实验现象:8 个数码管依次显示 0~7 SMG_JT 实验步骤: 短接跳线 J50 的 LED_ON 和中间脚 将 hex 文件下载到单片机中 实验现象:数码管静态显示一个数字 74HC595_SMG 实验步骤: 短接跳线 J50 的 LED_ON 和中间脚 将 hex 文件下载到单片机中 实验现象:8 位数码管显示 0-7 3、 蜂鸣器实验 BUZZER 实验步骤: 短接跳线 J6

第二讲,PIC16F877的硬件系统,20090714

第二讲,PIC16F877的硬件系统,20090714

一、PIC16F877核心区域的 核心区域的 部件及其功能
程序存储器:8K*14 flash程序区 PC指针:程序计数器。 硬件堆栈:共有8层,在调用子程序时自动保存 主程序断点处的地址。至于其它的寄存器的内 容则需要用软件编程来保存。 指令寄存器: 暂存从程序存储器中取出的指令,并将指令 分解为操作码和操作数<或者操作数的地址>, 分别送到不同的目的地。
PIC16F877(A)具有8*13的独立堆栈空间, 不占用程序存储器和数据存储器的区域,也 不需要进栈出栈的指令,在调用和返回时自 动实现入口地址的进出栈操作,遵循“后进 先出”的规则。
六、数据存储器
数据存储器的特点
PIC单片机内的数据寄存器分为两种: 一是工作寄存器,只有W寄存器; 一是数据寄存器RAM,又叫文件寄存器,它包 括所有的特殊功能寄存器、通用寄存器以及所有的 输入输出端口。PIC中的RAM除了具备普通RAM可读 可写的功能外,还能实现移位、置位、清位、位测 试等一系列其它单片机中“工作寄存器”的功能。 掉电后,RAM中的内容消失。
RAM数据存储器结构 数据存储器结构
PIC16F877结构 —— 时钟电路
PIC16F877的时钟按提供时钟的速度快慢分成四种模式,模式 的时钟按提供时钟的速度快慢分成四种模式, 的时钟按提供时钟的速度快慢分成四种模式 的选用是由单片机中配置字中FOSC0位和 位和FOSC1位来设定: 位来设定: 的选用是由单片机中配置字中 位和 位来设定 LP模式 模式——低功耗振荡器(Low Power Crystal) 低功耗振荡器( 模式 低功耗振荡器 ) XT模式 模式——标准的振荡器 谐振器(Crystal/Resonator) 标准的振荡器/谐振器 模式 标准的振荡器 谐振器( ) HS模式 模式——高速振荡器 谐振器(High speed 高速振荡器/谐振器 模式 高速振荡器 谐振器( Crystal/Resonator ) RC模式 模式——低成本的电阻器 电容器(Resistor/Capacitor) 低成本的电阻器/电容器 模式 低成本的电阻器 电容器( )

PIC16F877A单片机中文文献

PIC16F877A单片机中文文献

PIC16F877A单片机是microchip公司的产品,它采用14位的RISC指令系统,内部集成了A/D转换器、EEPROM、模拟比较器、带比较和捕捉功能的定时器/计数器、PWM输出、异步串行通信电路等。

1.程序存储器程序存储器和堆栈PIC16F877A单片机内部具有8K×14位的Flash程序存储器,程序存储器具有13位宽度的程序计数器地址范围:0000H-1FFFH。

由程序计数器提供13条地址线进行单元选择,每个单元宽14位,即PIC16F877A的指令字节宽度为14位,能够存放一条PIC单片机系统指令。

在系统上电或其他复位情况下,程序计数器均从0000H地址单元开始工作。

如果遇到调用子程序或系统发生事件中断时,将把当前程序断点处的地址送入8级×14位的堆栈区域进行保护。

堆栈是一个独立的存储区域,在调用的子程序或中断服务程序执行完后,再恢复断点地址。

通过14位程序总线,取出对应程序之灵的机器码,送入指令存储器,将组成的操作码和操作数进行有效分离。

如果操作数为地址,则进入地址复用器;如果操作数为数据,则进入数据复用器。

而操作码将在指令译码和控制单元中转化为相应的功能操作。

PIC的多数指令均是顺序执行,即使条件跳转也是隔行间接跳转。

具有大范围转移功能的指令只有两条:无条件GOTO语句和调用子程序CALL语句。

但它们受到2KB范围的约束。

所以必须将整个程序存储器以2KB为单位进行分页。

PIC16F877A单片机的上电复位地址是0000H,中端口地址是0004H,中断产生时PC指针会自动指向该地址。

在进行中断应用时,特别是涉及多个中断同时打开时,必须要逐个对中断标志进行判断。

编程时,在0000H-0003H单元内要放置一条GOTO跳转指令,跳转到主程序,以避开0004H存储器单元。

2.数据存储器数据存储器PIC单片机的数据存储器与传统的MCS-51单片机一样,在配置结构上可分为通用寄存器和特殊功能寄存器两大类。

PIC16F877A.H头文件详细注释

PIC16F877A.H头文件详细注释

PIC16F877A.H头文件详细注释/* Header file for the Microchip* PIC 16F873A chip* PIC 16F874A chip* PIC 16F876A chip* PIC 16F877A chip* Midrange Microcontroller*/#if defined(_16F874A) || defined(_16F877A)#define __PINS_40#endifstatic volatile unsigned char INDF @ 0x00; //间接寻址寄存器static volatile unsigned char TMR0 @ 0x01; //定时器0static volatile unsigned char PCL @ 0x02; //低8位程序计数器static volatile unsigned char STA TUS @ 0x03; //程序状态寄存器static unsigned char FSR @ 0x04; //特殊功能寄存器static volatile unsigned char PORTA @ 0x05; //端口A寄存器static volatile unsigned char PORTB @ 0x06; //端口B寄存器static volatile unsigned char PORTC @ 0x07; //端口C寄存器#ifdef __PINS_40static volatile unsigned char PORTD @ 0x08; //端口D寄存器static volatile unsigned char PORTE @ 0x09; //端口E寄存器#endifstatic unsigned char PCLATH @ 0x0A; //高5位程序计数器static volatile unsigned char INTCON @ 0x0B; //中断控制寄存器static volatile unsigned char PIR1 @ 0x0C; //中断标志寄存器PIR1static volatile unsigned char PIR2 @ 0x0D; //中断标志寄存器PIR2static volatile unsigned char TMR1L @ 0x0E; //低字节计数寄存器static volatile unsigned char TMR1H @ 0x0F; //高字节计数寄存器static volatile unsigned char T1CON @ 0x10; //TMR1控制寄存器static volatile unsigned char TMR2 @ 0x11; //定时/计数器TMR2static volatile unsigned char T2CON @ 0x12; //TMR2控制寄存器static volatile unsigned char SSPBUF @ 0x13; //收/发数据缓冲器static volatile unsigned char SSPCON @ 0x14; //同步串口控制寄存器,对MSSP模块的功能和指标进行设置和定义。

第1章PIC16F877单片机实验板介绍

第1章PIC16F877单片机实验板介绍

第1章PIC16F877单⽚机实验板介绍第1章PIC16F877单⽚机实验板介绍美国微芯公司推出的CMOS 8位PIC系列单⽚机,采⽤精简指令集(RISC)、哈佛总线结构、2级流⽔线取指令⽅式,具有实⽤、低价、指令集⼩、简单易学、低功耗、⾼速度、体积⼩、功能强等特点,体现了单⽚机发展的⼀种新趋势,深受⼴⼤⽤户的欢迎,已逐渐成为单⽚机发展的新潮流。

PIC16F87X是微芯公司的中档产品。

它采⽤14位的类RISC指令系统,在保持低价格的前提下,增加了A/D转换器、内部E2PROM存储器、⽐较输出、捕捉输⼊、PWM 输出(加上简单的滤波电路后还可以作为D/A输出)、I2C总线和SPI总线接⼝电路、异步串⾏通信(USART)接⼝电路、模拟电压⽐较器、LCD驱动、FLASH程序存储器等许多功能,可以⽅便地在线多次编程和调试,特别适⽤于初学者学习和在产品的开发阶段使⽤;它也可以作为产品开发的终极产品。

微芯公司还将FLASH 芯⽚做成与OTP芯⽚价格相近,以致可⽤FLASH芯⽚代替OTP芯⽚。

微芯公司的单⽚机是品种最丰富的单⽚机系列之⼀,被⼴泛地应⽤于各种仪器和设备中。

这种单⽚机具有如下显著的特点:开发容易,周期短:由于PIC采⽤类RISC指令集,指令数⽬少(PIC16F87X 仅35条指令),且全部为单字长指令,易学易⽤;相对于采⽤CISC(复杂指令集)结构的单⽚机可节省30 %以上的开发时间、2倍以上的程序空间。

⾼速:PIC采⽤哈佛总线和类精简指令集,逐步建⽴了⼀种新的⼯业标准,指令的执⾏速度⽐⼀般的单⽚机要快4~5倍。

低功耗:PIC采⽤CMOS电路设计,结合了诸多的节电特性,使其功耗很低;100 %的静态设计可进⼊休眠(Sleep)省电状态,⽽不会影响激活后的正常运⾏。

微芯公司的单⽚机是各类单⽚机中低功耗设计最好的产品之⼀。

低价实⽤:PIC配备有OTP(One Time Programmable)型、EPROM型及FLASH型等多种形式的芯⽚,其OTP型芯⽚的价格很低。

PIC16F877A单片机中文文献

PIC16F877A单片机中文文献

PIC16F877A单片机是microchip公司的产品,它采用14位的RISC指令系统,内部集成了A/D转换器、EEPROM、模拟比较器、带比较和捕捉功能的定时器/计数器、PWM输出、异步串行通信电路等。

1.程序存储器程序存储器和堆栈PIC16F877A单片机内部具有8K×14位的Flash程序存储器,程序存储器具有13位宽度的程序计数器地址范围:0000H-1FFFH。

由程序计数器提供13条地址线进行单元选择,每个单元宽14位,即PIC16F877A的指令字节宽度为14位,能够存放一条PIC单片机系统指令。

在系统上电或其他复位情况下,程序计数器均从0000H地址单元开始工作。

如果遇到调用子程序或系统发生事件中断时,将把当前程序断点处的地址送入8级×14位的堆栈区域进行保护。

堆栈是一个独立的存储区域,在调用的子程序或中断服务程序执行完后,再恢复断点地址。

通过14位程序总线,取出对应程序之灵的机器码,送入指令存储器,将组成的操作码和操作数进行有效分离。

如果操作数为地址,则进入地址复用器;如果操作数为数据,则进入数据复用器。

而操作码将在指令译码和控制单元中转化为相应的功能操作。

PIC的多数指令均是顺序执行,即使条件跳转也是隔行间接跳转。

具有大范围转移功能的指令只有两条:无条件GOTO语句和调用子程序CALL语句。

但它们受到2KB范围的约束。

所以必须将整个程序存储器以2KB为单位进行分页。

PIC16F877A单片机的上电复位地址是0000H,中端口地址是0004H,中断产生时PC指针会自动指向该地址。

在进行中断应用时,特别是涉及多个中断同时打开时,必须要逐个对中断标志进行判断。

编程时,在0000H-0003H单元内要放置一条GOTO跳转指令,跳转到主程序,以避开0004H存储器单元。

2.数据存储器数据存储器PIC单片机的数据存储器与传统的MCS-51单片机一样,在配置结构上可分为通用寄存器和特殊功能寄存器两大类。

PIC16F877A 单片机为控制核心语音小车

PIC16F877A 单片机为控制核心语音小车

PIC16F877A 单片机为控制核心,用语音识别芯片RSC-364、射频发送模块F05C 、编码芯片PT2262 组成语音无线遥控器(用于对控制指令的采集);采用射频接收模块J05C 和解码芯片PT2272 组成无线接收模块(用于对控制指令的接收);采用三节干电池串联(约4.5V)的方式对系统供电的语音控制小车。

经试验证实小车能实现语音无线控制,根据事先录制的语音指令能够实现前进、退后和左右转。

通过自制的编码盘小车还附加有测速及路程显示功能。

经测试,小车反应灵敏,运行稳定。

关键词:语音控制;PIC16F877A;RSC -364;测速显示0 引言随着现代科技的发展,仪器产品的智能化已经是一个不可避免的趋势。

智能仪器在一些特殊的场合,它可以按照预先设定的模式在一个环境里自动的运作,基本不需要人为的管理。

本文设计的语音控制智能小车,就是这样的一种装置。

小车以PIC16F877A 单片机为控制核心,加上语音识别芯片RSC-364、射频发送模块F05C 、编码芯片PT2262 组成语音无线遥控器,并且采用射频接收模块J05C 和解码芯片PT2272 组成无线接收模块,实现小车和控制者的互动,小车能根据命令实现前进、后退和左右转等动作。

通过外围电路又可以实现自动测速并显示等功能。

1 小车整体框架及原理本设计语音控制小车系统主要由PIC16F877A 为核心的车载控器部分、遥控器携带语音控制部分两大控制单元和车体部分组成小车硬件控制系统结构示意图如下:图1 控制系统结构示意图1.1 车载控制单元车载控制部分包括无线接收电路(由射频接收模块J05C 和解码芯片PT2272 组成) 、车载主控芯片电路、电机驱动电路及测速显示电路。

工作流程:接收遥控器发出的无线电信号,解码后送入车载主控芯片,经过计算产生相应的控制信号,驱动两个电机工作,使小车产生预期的动作。

本设计使用了两个电机控制小车的动作,具体在驱动部分讲述。

PIC单片机 配置位中文资料16F87XA

PIC单片机 配置位中文资料16F87XA

PIC16F877A配置位中文说明PIC16F876A配置位中文说明PIC16F874A配置位中文说明PIC16F873A配置位中文说明Configuration BitsREGISTER14-1:CONFIGURATION WORD(ADDRESS2007h)bit13CP:Flash Program Memory Code Protection bit程序存储器保护位1=Code protection off保护位关闭可以读出代码0=All program memory code-protected保护位开启代码保护读出全0bit12Unimplemented:Read as‘1’未使用设置1bit11DEBUG:In-Circuit Debugger Mode bit在线调试模式位1=In-Circuit Debugger disabled,RB6and RB7are general purpose I/O pins在线调试关闭RB6和RB7通用IO端口0=In-Circuit Debugger enabled,RB6and RB7are dedicated to the debugger在线调试开启RB6和RB7调试专用端口bit10-9WRT1:WRT0Flash Program Memory Write Enable bits WRT0Flash程序存储器的写使能位For PIC16F876A/877A:11=Write protection off;all program memory may be written to by EECON control写保护关闭全部存储空间可通过EECON控制写入。

10=0000h to00FFh write-protected;0100h to1FFFh may be written to by EECON control0000h to00FFh写保护;0100h to1FFFh可通过EECON 控制写入01=0000h to07FFh write-protected;0800h to1FFFh may be written to by EECON control0000h to07FFh写保护;0800h to1FFFh可通过EECON 控制写入00=0000h to0FFFh write-protected;1000h to1FFFh may be written to by EECON control0000h to0FFFh写保护;1000h to1FFFh可通过EECON 控制写入For PIC16F873A/874A:11=Write protection off;all program memory may be written to by EECON control10=0000h to00FFh write-protected;0100h to0FFFh may be written to by EECON control01=0000h to03FFh write-protected;0400h to0FFFh may be written to by EECON control00=0000h to07FFh write-protected;0800h to0FFFh may be written to by EECON controlbit8CPD:Data EEPROM Memory Code Protection bit EEPROM存储器保护位1=Data EEPROM code protection off EEPROM存储器保护位关闭可读写0=Data EEPROM code-protected EEPROM存储器保护位关闭不可读bit7LVP:Low-Voltage(Single-Supply)In-Circuit Serial Programming Enable bit低电压(单电源)在电路中的串口编程使位1=RB3/PGM pin has PGM function;low-voltage programming enabled开启RB3端口PGM低电压编程功能0=RB3is digital I/O,HV on MCLRmust be used for programmingRB3数字I/O MCLR必须使用高编程电压才可以bit6BOREN:Brown-out Reset Enable bit欠压/掉电复位使能1=BOR enabled欠压/掉电复位功能开0=BOR disabled欠压/掉电复位功能关bit5-4Unimplemented:Read as‘1’未使用设置1bit3PWRTEN:Power-up Timer Enable bit上电延时使能1=PWRT disabled上电延时使能关0=PWRT enabled上电延时使能开bit2WDTEN:Watchdog Timer Enable bit看门狗定时使能1=WDT enabled看门狗定时使能开0=WDT disabled看门狗定时使能关bit1-0FOSC1:FOSC0:Oscillator Selection bits振荡器类型选择11=RC Resistor/Capacitor oscillator RC阻容振荡器10=HS High-Speed Crystal/Resonator oscillator高频率石英晶体振荡器4-20MHZ01=XT Crystal/Resonator oscillator石英晶体振荡器200k-4MHZ00=LPr Low-Power Crystal oscillato低功耗方案振荡器32-200khzLegend:R=Readable bit P=Programmable bit U= Unimplemented bit,read as‘0’-n=Value when device is unprogrammed u=Unchanged from programmed stateNote1:The erased(unprogrammed)value of the Configuration Word is3FFFh.。

PIC16F877A数字时钟时钟程序

PIC16F877A数字时钟时钟程序

;Digit clock;-----------------------------------------------;DA TE :20101205;Author:Tang HS;M C U :PIC16F877A;FileName : ClockPIC.ASM;-----------------------------------------------------------;Date: {2010/12/07.14:35}-V er01--CS-ICD:0xAFCE---ISP:0xb7ce----;功能: 1.LED显示:时分秒;格式:[ hh mm ss ] 备注:按键未定义;------------------------------------------------------------;-----------------------------------------------------------;Date: {2010/12/07.22:15}-V er01--CS-ICD:0xAFCE---ISP:0xb7ce----;功能: 1.LED显示:时分秒;格式:[ hh mm ss ] 备注:按键未定义; 2.RB0-SET_KEY;RB1-ADD_KEY;RB2-SUB_KEY;RB3-EXIT_KEY;------------------------------------------------------------;Date: {2010/12/09.18:06}-V er02--CS-ICD:0xAFCE---ISP:0xef0e----;************************************************************;Date: {2010/12/10.00:47}-V er03--CS-ICD:0xb08d---ISP:0xfaa7----;功能: 1.LED显示:时分秒;格式:[ hh mm ss ] 备注:按键未定义; 2.RB0-SET_KEY;RB1-ADD_KEY;RB2-SUB_KEY;RB3-EXIT_KEY 都OK ; 3.MOVLW 纠正MOVV REG,1 引起的SUB_不良;;--------------------------------------------------------------;Date: {2010/12/10.13:10}-V er03.1--CS-ICD:0xb08b---ISP:0xfaa4----; 4.时差。

最新PIC16F877A单片机中文文献

最新PIC16F877A单片机中文文献

PIC16F877A单片机是microchip公司的产品,它采用14位的RISC指令系统,内部集成了A/D转换器、EEPROM、模拟比较器、带比较和捕捉功能的定时器/计数器、PWM输出、异步串行通信电路等。

1.程序存储器程序存储器和堆栈PIC16F877A单片机内部具有8K×14位的Flash程序存储器,程序存储器具有13位宽度的程序计数器地址范围:0000H-1FFFH。

由程序计数器提供13条地址线进行单元选择,每个单元宽14位,即PIC16F877A的指令字节宽度为14位,能够存放一条PIC单片机系统指令。

在系统上电或其他复位情况下,程序计数器均从0000H地址单元开始工作。

如果遇到调用子程序或系统发生事件中断时,将把当前程序断点处的地址送入8级×14位的堆栈区域进行保护。

堆栈是一个独立的存储区域,在调用的子程序或中断服务程序执行完后,再恢复断点地址。

通过14位程序总线,取出对应程序之灵的机器码,送入指令存储器,将组成的操作码和操作数进行有效分离。

如果操作数为地址,则进入地址复用器;如果操作数为数据,则进入数据复用器。

而操作码将在指令译码和控制单元中转化为相应的功能操作。

PIC的多数指令均是顺序执行,即使条件跳转也是隔行间接跳转。

具有大范围转移功能的指令只有两条:无条件GOTO语句和调用子程序CALL语句。

但它们受到2KB范围的约束。

所以必须将整个程序存储器以2KB为单位进行分页。

PIC16F877A单片机的上电复位地址是0000H,中端口地址是0004H,中断产生时PC指针会自动指向该地址。

在进行中断应用时,特别是涉及多个中断同时打开时,必须要逐个对中断标志进行判断。

编程时,在0000H-0003H单元内要放置一条GOTO跳转指令,跳转到主程序,以避开0004H存储器单元。

2.数据存储器数据存储器PIC单片机的数据存储器与传统的MCS-51单片机一样,在配置结构上可分为通用寄存器和特殊功能寄存器两大类。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//PIC16F877A.H头文件详细注释/* Header file for the Microchip* PIC 16F873A chip* PIC 16F874A chip* PIC 16F876A chip* PIC 16F877A chip* Midrange Microcontroller*/#if defined(_16F874A) || defined(_16F877A)#define __PINS_40#endifstatic volatile unsigned char INDF @ 0x00; //间接寻址寄存器static volatile unsigned char TMR0 @ 0x01; //定时器0static volatile unsigned char PCL @ 0x02; //低8位程序计数器static volatile unsigned char STA TUS @ 0x03; //程序状态寄存器static unsigned char FSR @ 0x04; //特殊功能寄存器static volatile unsigned char PORTA @ 0x05; //端口A寄存器static volatile unsigned char PORTB @ 0x06; //端口B寄存器static volatile unsigned char PORTC @ 0x07; //端口C寄存器#ifdef __PINS_40static volatile unsigned char PORTD @ 0x08; //端口D寄存器static volatile unsigned char PORTE @ 0x09; //端口E寄存器#endifstatic unsigned char PCLA TH @ 0x0A; //高5位程序计数器static volatile unsigned char INTCON @ 0x0B; //中断控制寄存器static volatile unsigned char PIR1 @ 0x0C; //中断标志寄存器PIR1static volatile unsigned char PIR2 @ 0x0D; //中断标志寄存器PIR2static volatile unsigned char TMR1L @ 0x0E; //低字节计数寄存器static volatile unsigned char TMR1H @ 0x0F; //高字节计数寄存器static volatile unsigned char T1CON @ 0x10; //TMR1控制寄存器static volatile unsigned char TMR2 @ 0x11; //定时/计数器TMR2static volatile unsigned char T2CON @ 0x12; //TMR2控制寄存器static volatile unsigned char SSPBUF @ 0x13; //收/发数据缓冲器static volatile unsigned char SSPCON @ 0x14; //同步串口控制寄存器,对MSSP模块的功能和指标进行设置和定义。

static volatile unsigned char CCPR1L @ 0x15; //捕获/比较/PWM寄存器低字节static volatile unsigned char CCPR1H @ 0x16; //捕获/比较/PWM寄存器低字节static volatile unsigned char CCP1CON @ 0x17; //CCP1CON寄存器static volatile unsigned char RCSTA @ 0x18; //USART接收控制兼状态寄存器static volatile unsigned char TXREG @ 0x19; //USART发生缓冲器static volatile unsigned char RCREG @ 0x1A; //USART接收缓冲器static volatile unsigned char CCPR2L @ 0x1B; //捕获/比较/PWM寄存器低字节static volatile unsigned char CCPR2H @ 0x1C; //捕获/比较/PWM寄存器低字节static volatile unsigned char CCP2CON @ 0x1D; //CCP2CON寄存器static volatile unsigned char ADRESH @ 0x1E; //ADC转换结果寄存器高字节static volatile unsigned char ADCON0 @ 0x1F; //A/D转换器开关位。

/* bank 1 registers */static unsigned char bank1 OPTION @ 0x81; //选择寄存器,用于配置TMR0/WDT预分频系数、外部INT中断、TMR0和端口B的弱上拉。

static volatile unsigned char bank1 TRISA @ 0x85; //A口方向寄存器static volatile unsigned char bank1 TRISB @ 0x86; //B口方向寄存器static volatile unsigned char bank1 TRISC @ 0x87; //C口方向寄存器#ifdef __PINS_40static volatile unsigned char bank1 TRISD @ 0x88; //D口方向寄存器static volatile unsigned char bank1 TRISE @ 0x89; //E口方向寄存器#endifstatic volatile unsigned char bank1 PIE1 @ 0x8C; //中断允许寄存器PIE1static volatile unsigned char bank1 PIE2 @ 0x8D; //中断允许寄存器PIE2static volatile unsigned char bank1 PCON @ 0x8E; //电源控制状态寄存器static volatile unsigned char bank1 SSPCON2 @ 0x91; //MSSP控制寄存器2static volatile unsigned char bank1 PR2 @ 0x92; //TMR2周期寄存器static volatile unsigned char bank1 SSPADD @ 0x93; //同步串口地址寄存器static volatile unsigned char bank1 SSPSTA T @ 0x94; //同步串口状态寄存器static volatile unsigned char bank1 TXSTA @ 0x98; //USART发生控制兼状态寄存器static volatile unsigned char bank1 SPBRG @ 0x99; //USART波特率发生器初值寄存器static volatile unsigned char bank1 CMCON @ 0x9C; //比较控制寄存器static volatile unsigned char bank1 CVRCON @ 0x9D; //比较电压参考控制寄存器static volatile unsigned char bank1 ADRESL @ 0x9E; //ADC转换结果寄存器低字节static volatile unsigned char bank1 ADCON1 @ 0x9F; //ADC控制寄存器ADCON1/* bank 2 registers */static volatile unsigned char bank2 EEDA TA @ 0x10C; //EEPROM数据寄存器低字节static volatile unsigned char bank2 EEADR @ 0x10D; //EEPROM地址寄存器低字节static volatile unsigned char bank2 EEDA TH @ 0x10E; //EEPROM数据寄存器高字节static volatile unsigned char bank2 EEADRH @ 0x10F; //EEPROM地址寄存器高字节/* bank 3 registers */static volatile unsigned char bank3 EECON1 @ 0x18C; //EEPROM控制寄存器1static volatile unsigned char bank3 EECON2 @ 0x18D; //EEPROM控制寄存器2//* STA TUS bits状态寄存器*/static volatile bit IRP @ (unsigned)&STA TUS*8+7; //寄存器bank选择位(用于间接寻址)。

0:bank0,1;1:bank2,3static volatile bit RP1 @ (unsigned)&STA TUS*8+6; //寄存器bank选择位(用于直接寻址)。

PR1:PR0:00:BANK0;01:BANK1;10:BANK2;11BANK3.static volatile bit RP0 @ (unsigned)&STA TUS*8+5; //static volatile bit TO @ (unsigned)&STA TUS*8+4; //超时位。

0:WDT超时发生;1:上电后,执行了CLRWDT或者SLEEP指令static volatile bit PD @ (unsigned)&STA TUS*8+3; //掉电标志位。

0:执行完SLEEP指令;1:上电后或者执行CLRWDT指令static volatile bit ZERO @ (unsigned)&STA TUS*8+2; //零标志位。

0:算术或逻辑操作结果不为0;1:反之。

static volatile bit DC @ (unsigned)&STA TUS*8+1; //数字进位/退位标志位。

0:结果的低4位没有发生进位;1:反之。

static volatile bit CARRY@ (unsigned)&STA TUS*8+0; //进位/退位标志位。

相关文档
最新文档