PIC16f串口通信程序

合集下载

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

pic单片机16F877与spi接口的eeprom读写C程序
TRISC5=0;
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功能及其编程

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

PIC16F877 MSSP模块之SPI通信

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 单片机的基本知识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单片机串口通讯程序

PIC单片机串口通讯程序
PDF 文件使用 "pdfFactory Pro" 试用版本创建
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功能及编程

第三章 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微控制器的相关知识和使用方法。

第二章 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程序设计及应用简介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`文件添加到项目中。

PIC单片机与触摸屏串行通信MODBUS协议

PIC单片机与触摸屏串行通信MODBUS协议

PIC单片机与触摸屏串行通信MODBUS协议技术分类:嵌入式系统微处理器与DSP | 2006-02-12来源:CE china工控中经常需要观察系统的运行状态或者修改运行参数。

触摸屏能够直观、生动地显示运行参数和运行状态,而且通过触摸屏画面可以直接修改系统运行参数,人机交互性好。

单片机广泛应用于工控领域中,与触摸屏配合,可组成良好的人机交互环境。

触摸屏和单片机通信,需要根据触摸屏采用的通信协议为单片机编写相应的通信程序。

Modbus协议是美国Modicon公司推出的一种有效支持控制器之间以及控制器经由网络(例如以太网)和其它设备之间进行通信的协议。

本文以PIC16F877单片机和人机电子有限公司的eView MT510T 型触摸屏为例,介绍其通信程序的开发过程。

1 系统结构实现触摸屏与单片机的通讯,主要是解决通讯协议的问题。

本文使用开放的Modbus 通讯协议,以触摸屏作主站,单片机作从站。

eView触摸屏本身支持Modbus通讯协议,如果单片机也支持Modbus协议,就可以进行通信了。

触摸屏与单片机之间采用的RS-232C兼容接口直接连接,传输速率设置为9600kb/s。

图1为该系统的电路图。

将PIC16F877单片机RC6、RC7口设置为异步串行通信模式,经过MAX232芯片将TTL 电平转换为RS232电平,再与eView触摸屏PLC[RS-232]接口相连,即完成了硬件连接。

eView 触摸屏PLC[RS-232]接口的管脚2为TXD,管脚3为RXD。

2 Modbus通信协议介绍Modbus通信协议是一种串行的主从通信协议,网络里仅有一台设置可作为主机(称Master),其它设备作为从机(称Slaver),主机不需编号,从机必须编号。

协议定义了主机查询及从机应答的信息帧格式。

通信时,主机首先向从机发出请求信息,符合相应地址码的从机接收通讯命令,并除去地址码,读取信息,如果没有出错,则执行相应的任务,然后把执行结果返给主机。

pic16f mcp3421 例程

pic16f mcp3421 例程

标题:使用PIC16F和MCP3421的电路设计与例程第一部分:介绍PIC16F和MCP34211.1 PIC16F介绍PIC16F是一种低成本、低功耗的8位微控制器,由Microchip Technology Inc.生产。

它具有丰富的外设功能和低功耗特性,适用于各种嵌入式控制系统。

1.2 MCP3421介绍MCP3421是一款精密24位ΔΣ型模数转换器,由Microchip Technology Inc.生产。

它具有低噪音、低漂移和高精度的特点,适用于各种精密测量和数据采集应用。

第二部分:PIC16F与MCP3421的接口电路设计2.1 电路设计的目的我们将使用PIC16F与MCP3421进行通信和数据传输,因此需要设计合适的接口电路。

接口电路的设计目的是实现PIC16F与MCP3421之间的可靠通信,并保证数据传输的精确性和可靠性。

2.2 接口电路的设计原理我们将采用I2C总线协议进行PIC16F与MCP3421之间的通信。

接口电路将使用PIC16F的I2C接口引脚与MCP3421的SCL和SDA引脚相连。

通过合理的电路设计,可以实现PIC16F与MCP3421之间的稳定通信和数据传输。

2.3 接口电路的具体设计方案我们将根据PIC16F和MCP3421的冠方数据手册,设计出合适的电路连接方案。

在设计过程中,需考虑电路布局、信号线路长度和终端电路等因素,以确保接口电路的稳定性和可靠性。

第三部分:PIC16F与MCP3421的例程编写与调试3.1 例程编写的基本思路我们将使用PIC16F的编程语言和MCP3421的通信协议,编写出实现PIC16F与MCP3421通信的例程。

例程编写的基本思路是通过I2C 总线协议发起读写操作,实现数据的传输和采集。

3.2 例程编写的具体步骤首先需初始化PIC16F的I2C接口和MCP3421的工作模式。

然后通过合适的例程编程,实现PIC16F向MCP3421发送命令并接收相应的数据。

PIC单片机串口通讯程序

PIC单片机串口通讯程序
PDF 文件使用 "pdfFactory Pro" 试用版本创建
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 ;程序完
PIC 单片机串口通讯程序
单片机串口通讯是一个常用的程序模块。PIC 单片机是一款常用的单片机。在网 上搜索到一个 PIC 单片机串口通讯程序。这个 PIC 单片机串口通讯程序站长没有 验证,应该是正确的。假如大家有更好的 PIC 单片机串口通讯程序,请向我t ch[15]; main () { int a; int i,j; int b[6]={88,15,38,26,20,0}; char c; clrscr(); outportb(port+3,0x80); /*准备设置波特率*/ outportb(port,0x0C); /*波特率设置为 9 600 bps*/ outportb(port+1,0x00); outportb(port+3,0x03); /*8 位数据位,奇偶检验,1 位停止位*/ outportb(port+1,0x00); /*关中断*/ inportb(port+5); /*读一次线路状态寄存器,使其复位*/ { printf("\t\tsend data or receive data: (s or r?)\n\n\n"); c=getchar(); switch(c) { case ’s’: case ’S’: { while(!(inportb(port+5)&0x20)); /*发送保持器满则等待*/ outportb(port,0x01); /*否则发送数据 01 通知单片机准备接收*/ for(i=0;i<6;i++) /*共发送 6 个数据*/ { a=b[i]; while(!(inportb(port+5)&0x20)) delay(100); /*发送保持器满,等待*/ outportb(port,a); /*发送 a*/ printf("%d\n",a); /*显示 a*/ while(!(inport(port+5)&1)); /*接收单片机送回的数据*/ ch[i]=inport(port); /*保存*/ } delay(10); for(j=0;j<8;j++) /*显示接收的回送数据*/ printf("\n%d\n",ch[j]); getch(); break; } case’r’: /*接收数据*/ case’R’: { while(!(inportb(port+5)&0x20));

PIC16F877ASPI通信C程序

PIC16F877ASPI通信C程序
char number;//存放PORTD的数,全局变量
void main(void)
{
CSH();//初始化
number=0x0D;
while(1)
{
if(b==1)//若按键,则进行读写操作
{
WRITE(number);//发送数据
//RB5=1;
DELAY(1);
ERROR=0;//错误标志位清零
PORTD=0;
SSPEN=1;//相应的引脚为一般的I/O口
CKP=1;//空闲时钟为高电平
SMP=1;//在数据信号的末端采样
CKE=1;//下降沿发送数据
SSPCON+=0b0001;//主控模式,时钟为fosc/16
}
char SPI_WRITE(char R )
{char BUF;
SSPBUF=R;//要发的数写入SSPBUF寄存器
{
for (k=1024;k>0;k--)NOP();//DELAY(30);//防抖动
INTF=0;//清标志位
b=1;
}
}
//延时(n)ms
void DELAY(unsigned int n)
{unsigned int j;
char k;
for (j=0;j<n;j++)
for (k=246;k>0;k--)NOP();
char SPI_WRITE(char R); //SPI发送函数
void WRITE(char number);//SPI写函数
void READ(void);//SPI接收函数
void interrupt ISR(void);//按键中断程序

PIC16系列单片机与PC机串行通信的软硬件实现

PIC16系列单片机与PC机串行通信的软硬件实现

PIC16系列单片机与PC机串行通信的软硬件实现————————————————————————————————作者:————————————————————————————————日期:摘要介绍一种运用PIC16F84单片机实现与PC机串行通信的方法,并给出其硬件接口电路及通信源程序。

1 前言美国Microchip公司的PIC16系列单片机是一种新型的CMOS工艺的8位单片机.其中,PIC16FXX单片机的程序存储器为电可擦除闪速存储器(flash),可多次修改程序,甚至可以在线编程。

PIC16F83和PIC16F84片内数据存储器除RAM外,还有64字节的EEPROM,可以当作一般的或非易失性的数据存储器使用,简单方便。

它还具有片内上电复位、延时电路、看门狗电路等。

另外,PIC16系列单片机功耗极低,因而是一种非常适合在各种便携式设备中使用的高性价比的单片机,并已经得到了越来越广泛的应用.但是在许多需要大量计算的运用中,还必须借助微机的强大数据处理能力。

这样必须通过通信电路实现PIC 单片机与微机间的可靠数据传输。

有的PIC16单片机内并没有提供串行口,所以串行通信必须通过自己设计的硬件电路和通信软件来实现。

下面介绍用查询法实现异步串行通讯的方法。

同时给出了用PIC16F84单片机的两个I/O口模拟2线串行口的硬件接口电路、程序流程框图、单片机内通信程序以及微机内的通信程序等。

2 硬件实现方法与电路PIC16F84单片机的程序存储器由1K×14的闪速(flash)存储器构成,它只有13条I/O口,1个定时器,为了尽量节省单片机的软硬件资源,采用下述异步串行通信的实现方法.如图1所示,PIC16F84在4MHz时钟下,采用半双工方式,可实现9600波特率的异步串行数据通信,1位停止位,8位数据位,无校验位.接收和发送以低位在先(一般模式),采用软件延时。

为节省篇幅,单片机内的通信程序中未提供任何握手协议,用户可根据自己的需要在软件中加入握手方式。

PIC16f串口通信程序

PIC16f串口通信程序

#include <pic.h>#define INIT_OSC() OSCCON = 0x77unsigned 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;}}}。

基于PIC16F877A和TL16C754的异步通信串口扩展及实现

基于PIC16F877A和TL16C754的异步通信串口扩展及实现
可达3Mb s p.
2 硬件简介
2 1 PC 6 87 介 绍 . I 1 F 7 A
PC6 87 I1F7 A是 Miohp公 司生 产 的使 用 高 c ci r 性能 RS P ICC U核心 的微 处理器 , 工作频 率范 围 其 为D C一2 H , 0M z 内置 P R( o e O Pw r—o ee) nR st 和 B R( rw O Bo n—ot ee) u st两种 复位功 能和上 电延时 R
第 1 期 21 0 0年 o 3月



ቤተ መጻሕፍቲ ባይዱ统
No 1 . M a" l .2O1 0
E e t n c a d E e to o t a y t ms lcr i n l cr - pi lS se o c
基于 P 1F7A和 T 1C5 的异步通信串1扩展及实现 I 687 C L674 3
时器 ( sia rS r— pTm r S ) 除 了一 个 O clt tt u ie,O C , lo a
1 引言
在 工程 实践 中 , 主机 与外 设 之 间 有 许 多 采 用 串 口进 行通 信的实 例 。当与 主 机连 接 的外 设较 多 时 , 要进行 串 口扩展 , 主 机与 外设 之 间 的数 就需 对 据通讯 进行 管 理 , 据 通 信 协议 分 发 相 关 信 息 给 根 主机 或外设 。本文介 绍 的 内容 正是 基 于这 样 的应 用背景 进行 的 , 同时 减 轻 了 主机 和 外 设 对 数 据 它 处理 的负担 , 实现 了串 口服 务 的功能 。
周 军华 , 树 科 , 韩 宋建云 , 王 艺 , 谢 安
中 国电子科 技 集 团公 司第二十 七研 究所 , 州 4 0 4 郑 507

PIC16F877A串口通信C#温度实时曲线

PIC16F877A串口通信C#温度实时曲线

PIC16F877A串口通信C#温度实时曲线__77A串口通信C#温度实时曲线、RS232串口通信上位机界面下位机电路图,可以仿真利用虚拟端口仿真效果__77A串口通信C#温度实时曲线、RS232串口通信上位机C#源程序//包含画图程序using System;using System.Collections.Generic;using .cnponentModel;using System.Data;using System.Drawing;using System.Drawing.Drawing2D;using System.Text;using System.Windows.Forms;using System.IO.Ports;namespace CommPort{public partial class Form2 : Form{private int txd;private int rxd;public float pon;//存?放¤?数y据Y的?变?量? private int n;private float x1, x2, y1, y2,y11, y21 ;//画-线?的?坐?标¨private Pen Mypen1;//画-笔¨private Pen Mypen2;//private Graphics grfx;public Point ptlist;//存?放¤?坐?标¨圆2点?__77A串口通信C#温度实时曲线、RS232串口通信// Random rm = new Random();//随?机¨数y产¨生¨器//Timer mytimer = new Timer();//定§时器public Form2(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e) {txd = 0;//接¨收?字?符¤?个?数y计?数y变?量?rxd = 0;//发¤é送¨字?符¤?个?数y计?数y变?量?//count = 0;ptlist = new Point(0, this.pictureBox1.Height);x1 = ptlist.X;x2 = ptlist.X;y1 =ptlist.Y;Mypen1 = new Pen(Color.Blue,1);Mypen2 = new Pen(Color.Red, 2);//y2 =ptlist.Y;string[] ports = System.IO.Ports.SerialPort.GetPortNames();//获?取¨?当前计?算?机¨的?串?行D端?口¨名?称?数y组¨,ê?存?在¨数y组¨里¤?mycomm.ReadTimeout = 32;//设¨¨置?读¨取¨?操¨作未完¨成¨时发¤é生¨超?时之?前的?毫¨秒?数y。

PIC16F877单片机中串行通讯模块的应用

PIC16F877单片机中串行通讯模块的应用

PIC16F877单片机中串行通讯模块的应用
麻恒进
【期刊名称】《电子世界》
【年(卷),期】2002(000)001
【摘要】@@ PIC16F877单片机具有通过两个端口线即可进行在线串行编程、在线调试的特点,因而出现了相对便宜的快速开发工具MPLAB-ICD.该芯片集成了多种外围功能模块,如十位多通道A/D转换模块、同步串行口SSP(synchronous serial port)部件、通用同步异步收发器部件USART(universal
synchronous/asynchronous receiver transmitter)等,从而减少了构成系统时所需的外部器件,提高了设计的速度.随着器件的减少,系统的稳定性也得到了提高.本文将讨论经常用到的USART模块及使用中应注意的几个问题.
【总页数】1页(P30)
【作者】麻恒进
【作者单位】中国航空精密机械研究所第四研究室
【正文语种】中文
【中图分类】TP3
【相关文献】
1.PIC16F877单片机在Scorpion采集站中的应用 [J], 周阿群;祝彩霞;吴秀琴
2.PIC16F877单片机在地震预测系统中的应用 [J], 王一飞;章勇
3.PIC16F877单片机在智能站用电源系统中的应用 [J], 皮大能;南光群;闵小玲
4.PIC16F877单片机在智能站用电源系统中的应用 [J], 皮大能;南光群;闵小玲
5.PIC16F877A单片机在软起动控制器中的应用 [J], 郭继红;李虹飞
因版权原因,仅展示原文概要,查看原文内容请购买。

PIC单片机控制Modem的串行通信设计.

PIC单片机控制Modem的串行通信设计.

PIC单片机控制Modem的串行通信设计在工程中,常采用Modem通过模拟线路进行数据的远程传输。

我们用工业级PIC16F87系列单片机控制Modem完成串行异步/同步通信,在较低速率的线路上实现了数据的实时传输,收到了很好的效果。

本文就系统中PIC单片机控制Modem的串行通信技术,在硬件、软件两方面进行了分析。

1 PIC单片机及其同步/异步串行接口USART模块功能简介PIC16F877A单片机内部有8K*14的FLASH程序存储器和512字的RAM数据存储器:不仅采用哈佛体系结构,而且还采用哈佛总线结构,流水线操作,PIC16F877A大大提高了指令执行速度,PIC单片机的系统时钟可以工作在DC- 20MHz的频率范围之内。

优化的CPU结构,加上精简指令集(RISC)技术,更加快了指令执行速度,这为复杂控制算法的实现提供了良好的条件。

本系统采用的是PIC16F87系列单片机,其内部集成了同步/异步串行接口USART模块,适合同单片机外部扩展独立的外设部件进行串行通信。

并且可以定义三种工作方式:全双工异步、半双工同步主控和半双工同步从动方式。

2 PIC单片机控制Modem 实现异步串行通信利用PIC单片机,可实现对Modem的控制,从而进行异步通信。

USART模块在单片机的RX引脚上接收,在TX引脚上发送,串行信息的编码方式采用1 位起始位、8位数据位和1位停止位。

片内提供了一个专用的8位波特率发生器BRG,利用来自时基振荡器的系统时钟信号,产生标准的波特率时钟。

USART 模块的接收和发送数据顺序是地位在前。

即首先发送最低位(LSB)。

USART模块的接收器和发送器在功能上是相互独立的,但是它们所用的数据格式与波特率是相同的。

2.1异步串行通信硬件连接PIC控制Modem串行通信的原理图如图1。

PIC将要发送的数据通过串口送给本端Modem,将数字信号调制成可在模拟线路上传输的模拟信号,并通过模拟线路传给远方的Modem。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;
}
}
}。

相关文档
最新文档