PIC16f串口通信程序
pic单片机16F877与spi接口的eeprom读写C程序

TRISC4=1;
SSPCON=0b00100000;
INTCON=0x00;
SSPSTAT=0b11000000;
ADCON1=0b00000110;
TRISA1=0;
}
//*----spi comuncation
void spi_com(unsigned char x)
{
SSPBUF=x;
TRISD=0b00110000;
unsigned char d=4,one,ten,hund,thou;
unsigned char seg8[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,
0x07,0x7F,0x67};//显示比划代码
one=x%10;
ten=x/10%10;
while(SSPIF==0);
SSPIF=0;
}
//-----------spi enable
void spi_en()
{
RA1=0;
spi_com(0x06);//WREN code
RA1=1;
nop();
}
//send data ========
void send(unsigned char data,unsigned char add)
delay(300);
//for see to delay
RD2=0;//stop display ten
delay(4);
//stop to delay
PORTB=seg8[hund];
//display hund code to PORTB
RD1=1;
//begain to display
PIC16F877A功能及其编程

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
PIC16F877 MSSP模块之SPI通信

PIC16F877 MSSP 模块之SPI 通信SPI 模式允许同时、同步发送和接收8 位数据。
支持SPI 的所有四种模式。
一般用以下三个引脚来完成通信:串行数据输出(SDO) 串行数据输入(SDI) 串行时钟(SCK)当工作在从动模式时,可能还需要第4 个引脚:从动选择(SS)结构框图:SSP 模块由一个发送/接收移位寄存器(SSPSR)和一个缓冲寄存器(SSPBUF)组成。
SSPSR 用于器件输入和输出数据的移位,高位在前。
在新的数据接收完毕前,SSPBUF 保存上次写入SSPSR 的数据。
一旦8 位新数据接收完毕,该字节被送入SSPBUF 寄存器。
同时缓冲区满标志位BF(SSPSTAT )和中断标志位SSPIF 置1。
这种双重缓冲接收方式,允许接收数据被读走之前,开始接收下一个数据。
在数据发送/接收期间,任何试图写SSPBUF 寄存器的操作都无效,却会将写冲突检测位WCOL(SSPCON)置1。
此时用户必须用软件将WCOL 位清零,以判别下一次对SSPBUF 的写操作是否成功完成。
为确保应用软件有效地接收数据,应该在新数据写入SSPBUF 之前,将SSPBUF 中的数据读走。
缓冲区满标志位BF(SSPSTAT)用于表示SSPBUF 是否已经载入了接收的数据(发送完成)。
当SSPBUF 中的数据被读取后,BF 位即被清零。
如果SPI 仅仅作为一个发送器,则不必理会这一位。
通常可用SSP 中断来判断发送或接收是否完成。
如果需要接收数据,可从SSPBUF 中读取。
SSP 中断一般用来确定发送/接收何时完成。
必须对SSPBUF 进行读和/写。
如果不打算使用中断方法,用软件查询方法同样可确保不会发生写冲突。
主控模式的操作因为主控制器控制着SCK 信号,所以它可以在任何时候启。
pic16f单片机例程 -回复

pic16f单片机例程-回复如何使用PIC16F 单片机编写程序。
第一步:了解PIC16F 单片机的基本知识PIC16F 是一种低功耗、高性能的单片机芯片,由美国微芯科技公司开发。
它拥有多种功能和较大的内存空间,适用于很多应用场景,如家电、汽车电子、工业控制等。
该单片机的主要特点包括:8 位的CPU,最多可存储8KB 的程序代码,具备各种输入/输出接口,支持多种通信协议,并且能够与外部设备进行数据交互。
第二步:准备开发工具和环境在编写PIC16F 单片机程序之前,我们需要准备好相应的开发工具和环境。
常用的工具包括MPLAB X IDE(集成开发环境)、XC8 C 编译器(用于编译C 语言代码),以及一个PICkit 编程器(用于将程序烧录到单片机上)。
安装MPLAB X IDE 后,在软件中选择合适的PIC16F 型号,创建一个新的项目,并将XC8 编译器与之关联。
第三步:编写程序代码在MPLAB X IDE 中,我们可以使用C 语言来编写PIC16F 的程序代码。
以下是一个简单的示例,用于控制一个LED 灯的开关:c#include <xc.h>配置LED 引脚#define LED_PIN RA0#define LED_TRIS TRISA0void main(void) {配置引脚为输出模式LED_TRIS = 0;主循环while (1) {点亮LEDLED_PIN = 1;延时一段时间__delay_ms(1000);熄灭LEDLED_PIN = 0;延时一段时间__delay_ms(1000);}}在这个示例中,我们首先通过宏定义来配置LED 对应的引脚和寄存器。
然后,在主函数中,我们将引脚配置为输出模式,并进入一个无限循环。
在循环中,我们先点亮LED,延时一段时间后再熄灭LED,并再次延时,以实现LED 的闪烁效果。
第四步:编译和烧录程序在编写完程序代码后,我们可以使用MPLAB X IDE 的XC8 编译器对代码进行编译。
PIC单片机串口通讯程序

BSF RCSTA,CREN ;接收允许 BSF STATUS,RP0 BSF TXSTA,TXEN ;发送允许 BCF STATUS,RP0 WAIT BTFSS PIR1,RCIF ;等待接收数据 GOTO WAIT MOVF RCREG,0 ;读取数据 MOVWF INDF ;将接收到的响应字节存入 PIC2 的 RAM INCF FSR MOVWF TXREG ;发送响应字节 LOOPTX BTFSS PIR1,TXIF ;等待写入完成 GOTO LOOPTX BTFSS FSR,7 ;全部数据接收否? GOTO WAIT1 ;没有,继续接收其它数据 BCF RCSTA,RCEN ;接收完,则关断接收和发送数据允许 BSF STATUS,RP0 BCF PIE1,TXEN BCF STATUS,RP0 CALL LED ;调用显示子程序,将接受到的数据显示出来 END ;程序完
2. 单片机 PIC2 编程(接收部分)
LIST P=16F876 #INCLUDE P16F876.INC CBLOCK 0X24 COUNT ENDC ORG 0X0000 NOP START GOTO MAIN MAIN BSF STATUS,RP0 ;初始化程序同发送子程序 MOVLW 0X19 ;波特率设置与 PIC1 相同 MOVWF SPBRG MOVLW 0X04 ;异步高速传输 MOVWF TXSTA BCF STATUS,RP0 MOVLW 0X80 ;串行口工作使能 MOVWF RCSTA BSF STATUS,RP0 BSF TRISC,7 ;与外接电路隔离 BSF TRISC,6 BCF STATUS,RP0 MOVLW 0X30 ;从 30H 单元开始存放发送来的数据 MOVWF FSR
第三章 PIC16F887功能及编程

0:计时
01-1:4
… 1111-1:16
1X-1:16
福州大学电气工程与自动化学院
• TMR0是个8位计数/定时器,有可编程预分频率 器,可对外部脉冲计数或对内部指令脉冲计数的 功能。
• 当对外部脉冲计数时,符合一定要求的外部脉冲 送到RA4/T0CKI,且OPTION_REG(<T0CS>)要 置1,且该口(RA4)要设置为输入。
• TMR0寄存器的地址在01H、101H。 • TMR0有溢出中断功能。
中断 信接收 信发送 行通信 模块 溢出 溢出 使能 中断 中断 中断 中断 中断 中断
使能 使能 使能 使能 使能 使能
福州大学电气工程与自动化学院
bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
- ADIF RCIF TXTF SSPIF CCP1IF TMR2IF TMR1IF - AD转换 串行通 串行通 同步串 CCP1 TMR2 TMR1
• 恢复被保护的相关寄存器 • 程序执行到”RETFIE”时后入先出的原则,从堆栈
中弹出地址给PC,GIE=1,程序返回到中断前 要执行的程序,程序恢复中断前程序的运行状 态。
福州大学电气工程与自动化学院
PIC16F887有17个中断源,每个中断源都有自 己的使能控制位(IE)和中断标志位(IF)。包括:
• 假设当前TRM1H、TMR1L=0x01FF,则在读取TMR1时 就可能发生错误:
• 如先读低字节,得到0xFF,假设此时发生进位,则再读 高字节时得到0x02,总的结果是0x2FF,显然是错误的。
• 如先读高字节,得到0x01,假设此时发生进位,则再读低 字节得到0x00,总的结果是0x100,也是错误的。
PIC16程序设计及应用

PIC16程序设计及应用PIC16程序设计及应用第一章简介本文档旨在介绍PIC16系列微控制器的程序设计及应用。
针对初学者和有一定基础的开发人员,详细讲解了PIC16微控制器的相关知识和使用方法。
第二章 PIC16微控制器基础1.PIC16微控制器概述1.1.什么是PIC16微控制器1.2.PIC16微控制器的特点和优势1.3.PIC16微控制器的应用领域2.PIC16微控制器的硬件结构2.1.CPU和存储器单元2.2.输入输出端口2.3.定时器和计数器2.4.串行通信接口2.5.其他外设模块3.PIC16微控制器的指令集3.1.指令的格式和操作类型3.2.常用指令的详细介绍3.3.寄存器和存储器的访问方法第三章 PIC16程序设计基础1.开发环境搭建1.1.编程工具的选择1.2.编程环境的配置2.PIC16程序结构和编写规范2.1.基本程序框架和流程2.2.常用编程指导原则3.输入输出操作3.1.数字输入输出3.2.模拟输入输出3.3.中断输入输出4.定时器和计数器的应用4.1.延时功能的实现4.2.定时器中断的使用4.3.计数器的应用案例5.串行通信接口的使用5.1.串口通信的原理和标准5.2.串口通信的配置和编程6.其他外设模块的应用6.1.脉宽调制模块(PWM)6.2.电源管理6.3.LCD显示控制第四章 PIC16程序的调试和优化1.调试方法和工具1.1.硬件调试工具1.2.软件调试工具2.程序优化技巧2.1.代码效率的优化2.2.内存使用的优化附件:________本文档涉及的附件包括:________1.示例代码2.应用案例3.参考资料法律名词及注释:________1.版权:________指宪法或法律规定的对作品的独占权利,包括复制、发行、展览、表演、广播、改编等权利。
2.商标:________指用于标识商品和服务来源的标志,如商号、商品名称、服务名称、包装等。
PIC16程序设计及应用简版

PIC16程序设计及应用PIC16程序设计及应用简介PIC16(Peripheral Interface Controller)是一种微控制器,由美国Microchip公司推出。
它采用RISC架构,具有较低的功耗、高速执行、丰富的外设等特点。
PIC16系列微控制器常应用于各种嵌入式系统中,例如家电控制、汽车电子、安防设备等领域。
本文档将介绍PIC16程序设计的基本概念及应用。
PIC16架构概述PIC16微控制器采用Harvard结构,具有独立的程序存储器和数据存储器。
它采用8位指令集,具有128个字节的RAM和4KB的闪存。
PIC16还拥有多种外设,例如定时器、串口通信接口、模拟比较器等。
PIC16程序设计基础1. 开发环境搭建要进行PIC16程序设计,首先需要安装PIC16开发环境。
Microchip官方提供了一款集成开发环境MPLAB X,可以用于编写、调试和PIC16程序。
安装完成后,还需要配合相应型号的编程器才能对PIC16进行编程。
2. 编写第一个程序下面将介绍一个简单的PIC16程序示例。
首先,我们需要创建一个新的源文件并命名为`mn.c`。
```cinclude <xc.h>void mn(void) {TRISBbits.TRISB0 = 0; // 将RB0引脚设置为输出模式 while (1) {TB0 = 1; // 将RB0引脚输出高电平__delay_ms(1000); // 延时1秒TB0 = 0; // 将RB0引脚输出低电平__delay_ms(1000); // 延时1秒}}```上述程序使用了XC8编译器提供的部分库函数。
首先,我们将RB0引脚设为输出模式,并在一个无限循环中不断将RB0引脚输出高低电平。
3. 编译和程序编译PIC16程序可通过MPLAB X提供的编译器进行,具体方法如下:1. 打开MPLAB X并创建一个新的项目。
2. 将前面编写的`mn.c`文件添加到项目中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <pic.h>
#define INIT_OSC() OSCCON = 0x77
unsigned char error=0x00; //错误数据帧,丢弃
bit Q=0; //一次数据帧接收完成标志位unsigned char data;
void interrupt isr(void) //接收中断处理
{
unsigned char Temp;
if(RCIF&&RCIE)
{
if(FERR)//监测是否有帧错误
{
error=RCREG;
}
if(OERR)
{
CREN=0 ;
CREN=1 ; //接收模块被复位重置,OERR清零}
data=RCREG; //保存每一次接收到的数据
Q=1;
}
if(T0IF) //TIME0
{
T0IF = 0;
}
else
{
if(RBIF )
{
Temp = PORTB;
RBIF = 0;
}
}
}
void usart_init() //串口初始化
{
INIT_OSC();
//InitPort();
INTCON=0 ; // 关闭所有的中断
TRISC6=0 ;//TX脚输出
TRISC7=1 ;//RX脚输入
RC6=1;
RC7=1;
//SPBRG=51;//波特率9600,6M时钟
SPBRG=51;//波特率9600,8M时钟
BRGH=1; //高速波特率
SYNC=0;
SPEN=1; //异步串口工作方式
TXEN=1; //USART工作于发送器方式
TXIE=0; //发送不需要中断处理
RCIE=1; //接收需要中断处理
CREN=1; //激活接收器
PEIE = 1;
GIE = 1;
}
void putch(unsigned char byte) //发送一个字节的数据{unsigned int t=0;
TXREG = byte;
for(t=0;t<50000;t++)
{
if(TRMT==1)
{
asm("nop");
break;
}
}
}
void main() //将上位机发送的数据通过串口显示{
unsigned int t=0; unsigned char x=0;
usart_init();
for(x=0;x<5;x++)
{
for(t=0;t<10000;t++) {;}
for(t=0;t<10000;t++) {;}
}
while(1)
{
if(Q==1)
{putch(data);Q=0;
}
}
}。