PIC16F877A串口通信C#温度实时曲线
- 格式:pdf
- 大小:333.92 KB
- 文档页数:12
#include<htc.h> //包含单片机内部资源预定义#include<stdio.h>__CONFIG(0x3b31);#define uchar unsigned char#define uint unsigned intuint led_ct=0;//led状态存储#define RXMAX 64 //长度64位unsigned char pRx,RxBuf[RXMAX];//就收缓存函数//延时函数void delay(uint x){uint a,b;for(a=x;a>0;a--)for(b=110;b>0;b--);}//初始化函数void init(){TRISA=0XFF;ADCON1=0x80;// ADCON0=0x41;TRISC=0XCF; //设置C口方向全为输出1100 0111 RC7 RC6串口模式必须设置为输出SPBRG=25; //设置波特率TXSTA=0X24; //使能串口发送,选择高速波特率RCSTA=0X90; //使能串口工作,连续接收RCIE=1; //使能接收中断GIE=1; //开放全局中断PEIE=1; //使能外部中断delay(10);}//接受中断函数void interrupt com(void){if(RCIE&&RCIF)//判断是否为串口接收中断{if(pRx<RXMAX) RxBuf[pRx++]=RCREG;RCIF=0;}}/*===================================命令代码处理函数===================================*//*等待pRx(接收字节数)到某个数目,最多等待200ms.return:0=ok,1=error*/ unsigned char delay4bytes(unsigned char n){unsigned char nms=0;while(pRx<n){nms++;if(nms>100) return 1;delay(2);}return 0;}//清除接受缓存区void clrRxBuf(void){while(pRx) RxBuf[pRx--]=0;RxBuf[0]=0;pRx=0;}uint getad0() //模拟通道1{uint i=0,a,adval0;for(a=0;a<30;a++){ADCON0=0x41; //0100 0001GO=1;delay(1);while(GO);adval0=ADRESH;//00000000 00000011adval0=adval0<<8|ADRESL;//00000011 11111111adval0=adval0/4;i=i+adval0;}adval0=i/30;return (adval0);}uint getad1()//模拟通道2{uint i=0,a,adval1;for(a=0;a<30;a++){ADCON0=0x49; //0100 1001GO=1;delay(1);while(GO);adval1=ADRESH;//00000000 00000011adval1=adval1<<8|ADRESL;//00000011 11111111adval1=adval1/4;i=i+adval1;}adval1=i/30;return (adval1);}uint getad2()//模拟通道3{uint i=0,a,adval2;for(a=0;a<30;a++){ADCON0=0x51; //0100 0001GO=1;delay(1);while(GO);adval2=ADRESH;//00000000 00000011adval2=adval2<<8|ADRESL;//00000011 11111111adval2=adval2/4;i=i+adval2;}adval2=i/30;return (adval2);}uint getad3()//数字通道1{uint adval3;if(RC1==1)adval3=0xAA;if(RC1==0)adval3=0x00;return (adval3);}uint getad4()//数字通道2{uint adval4;if(RC2==1)adval4=0xAA;if(RC2==0)adval4=0x00;return (adval4);}uint getad5()//数字通道3{uint adval5;if(RC3==1)adval5=0xAA;if(RC3==0)adval5=0x00;return (adval5);}void main(){int temp[6];init();while(1) //等待中断{led_ct++;if(led_ct<50) RC4=0;else if(led_ct<100) RC4=1; else led_ct=0;//依据led变量的状态,改变led控制脚if(pRx)//如果有接收字节{if(RxBuf[0]==0xab){if(!delay4bytes(2)){//等待接收到5个字节,如果超时则不处理,清除缓冲区if(RxBuf[1]==0x42){while(1){while(GO)ADCON0=0x41;delay(1);temp[0]=getad0();delay(10);while(GO)ADCON0=0x49;delay(1);temp[1]=getad1();delay(1);while(GO)ADCON0=0x51;delay(1);temp[2]=getad2();delay(1);temp[3]=getad3();delay(1);temp[4]=getad4();delay(1);temp[5]=getad5();delay(1);TXREG=79;delay(1);TXREG=75;delay(1);TXREG=temp[0];delay(1);TXREG=temp[1];delay(1);TXREG=temp[2];delay(1);TXREG=temp[3];delay(1);TXREG=temp[4];delay(1);TXREG=temp[5];delay(1);clrRxBuf(); delay(500);if(pRx)//如果有接收字节{if(RxBuf[0]==0xab){if(!delay4bytes(2)){//等待接收到5个字节,如果超时则不处理,清除缓冲区if(RxBuf[1]==0x43){// asm("goto 0");asm("ljmp 0");}}}}}}}}// clrRxBuf();}}}。
最新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单片机一样,在配置结构上可分为通用寄存器和特殊功能寄存器两大类。
PIC196F877A串口通信程序今天上午完成PIC16F877A 与上位机的串口通信程序!注意:使用MPLAB IDE C 语言编程时,自定义头文件要使用”“包含不能使用串口与单片机的连线原理图串口通信头文件#ifndef T232_H#define T232_H#include “main.h”//定义一帧的开始和结束#define FRAME_BEGIN 0x28//开始帧标志#define FRAME_END 0x29//结束帧标志void init_232() ;void send_str(const char *str) ;char get_char() ;void get_string(char *temp) ;void put_char(char temp) ;#endif串行通信子程序//基于TPDEM1,通过串口调试助手等串口观察软件观察程序,//将TPDEM1通过ICD2 配送的串口延长线与PC 的串口连接,设置PC 的串口为默认设置,如波特率9600,数据位8,无校验位,使用FIFO#include “t232.h”/**Function:init seriel port*/void init_232(){ INTCON=0; TRISC7=1; //RX 置输入TRISC6=0; //TX 清成输出RCSTA=0x90;//连续接受多位数据TXSTA=0x24; SPBRG=25; //9600=4000000/(16*(X+1))->X=25,high speed mode// INTCON=0xC0;//开GIE,外围中断PEIE //RCIE=1; //开接收中断}/**Fuction:send const string to seriel port/void send_str(const char *p){while((*p)!=/0){put_char(*p++) ;}}/Function:get charactor from serial port*/char get_char(){char temp ;while(!RCIF) ; /* set when register is not empty */temp = RCREG ; return RCREG; /* RXD9 and FERR are gone now */}。
PIC16F877学习开发板简介P S / 2 接 口 8路高亮LED 6位数码管 蜂 鸣 器 1 2 8 6 4 液 晶 I C S P PIC16F877A R S 2 3 2接口 红 外 接 收 IIC (24C02) U S B 口 P L 2 3 0 3 AD 电压调节D A C 0 8 3 2 电源切换开关 外接电源插硬件分布图一、资源模块介绍1. 八位LED 指示灯2. 六位数码管3. 4个独立按键4. 一体化红外接收头5. 蜂鸣器声音输出6. DS18B20温度传感器7. DS1302实时时钟电路8. 1602液晶显示模块9. 128*64液晶显示模块10. 4*4矩阵键盘扫描11. RS232串口模块可与PC通讯12. 一路A/D转换13. DAC0832 D/A转换14. 24C01 IIC EEPROM15. ICSP接口,可在线调试和编程二、实例(C语言)实验一:LED灯闪烁实验实验二:LED流水灯实验实验三:静态数码管实验实验四:动态数码管实验实验五:蜂鸣器实验实验六:独立按键实验实验七:矩阵键盘实验实验八:串口实验实验九:AD模数转换实验实验十:PS2键盘接口实验实验十一:DAC0832数模转换实验实验十二:HS0038红外接收一体头实验实验十三:AT24C02(I2C协议)实验实验十四:DS1302(SPI协议)实验实验十五:DS18B20温度传感器实验实验十六:lcd1602液晶实验实验十七:lcd12864液晶实验产品性能优点:1、支持ISP在线下载,直接把程序写到单片机中,不需要用户购买编程器,直接USB下载程序,初学者无需再购买任何仿真器或编程器等开发工具,只要有一台计算机(笔记本即可),就可以实践学习电子方面的知识。
2、 功能齐全,基本上涵盖了所有典型的外围接口电路,方便用户学习各样的硬件电路知识和软件编程,是市面上难见的多功能开发学习板。
3、配套光盘包含丰富的学习资料,其中包括:①学习板实验程序例程(C语言),注释详细,方便初学者学习阅读;②开发者多年积累的大量经典PIC单片机学习资料,使读者看完能有一想不到的收获。
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单片机一样,在配置结构上可分为通用寄存器和特殊功能寄存器两大类。
PIC单片机串口通讯程序单片机串口通讯是一个常用的程序模块。
PIC单片机是一款常用的单片机。
在网上搜索到一个PIC单片机串口通讯程序。
这个PIC单片机串口通讯程序站长没有验证,应该是正确的。
假如大家有更好的PIC单片机串口通讯程序,请向我推荐。
1. 单片机PIC1编程(发送部分)LIST P=16F877#INCLUDE P16F876.INCCBLOCK 0X24 ;保留三个字节作为显示用COUNT ;作计数器或暂存器用ENDCORG 0X0000 ;程序复位入口NOPSTART GOTO MAINORG 0X20MAIN MOVLW 0X30 ;以下将RAM内容初始化MOVWF FSR ;从30H单元开始MOVLW 0X30 ;将值30H赋给单元30HMOVWF COUNTINTRAM MOVF COUNT,0 ;将30H~7FH赋给单元30H~7FHMOVWF INDFINCF COUNT,1INCF FSR,1BTFSS COUNT,7GOTO INTRAMBSF STATUS,RP0 ;将SCI部件初始化MOVLW 0X19 ;将传输的波特率设为约9600 bpsMOVWF SPBRGMOVLW 0X04 ;选择异步高速方式传输8位数据MOVWF TXSTABCF STATUS,RP0MOVLW 0X80 ;允许同步串行口工作MOVWF RCSTABSF STATUS,RP0BSF TRISC,7 ;将RC6、RC7设置为输入方式,断绝与外接电路的连接BSF TRISC,6BCF STATUS,RP0MOVLW 0X30 ;30H作为同步字符发送MOVWF FSRMOVF INDF,0MOVWF TXREG ;将待发送的数据写入发送缓冲器TXREGBSF STATUS,RP0BSF TXSTA,TXEN ;发送允许BCF STATUS,RP0BSF RCSTA,CREN ;接收数据允许LOOPTX BTFSS PIR1,RCIF ;等待PIC2的响应字节GOTO LOOPTXMOVF RCREG,0 ;读响应字节,清RCIFLOOPTX1 BTFSS PIR1,TXIF ;发送下一字节GOTO LOOPTX1INCF FSRMOVF INDF,0MOVWF TXREGBTFSS FSR,7 ;30H~7FH单元的内容是否发送完?GOTO LOOPTX ;没有,继续下一字节的发送BSF STATUS,RP0 ;如果是,则停止发送BCF TXSTA,TXENBCF STATUS,RP0 ;数据发送完毕CALL LED ;调用显示子程序,将发送的数据显示出来END ;程序完2. 单片机PIC2编程(接收部分)LIST P=16F876#INCLUDE P16F876.INCCBLOCK 0X24COUNTENDCORG 0X0000NOPSTART GOTO MAINMAIN BSF STATUS,RP0 ;初始化程序同发送子程序MOVLW 0X19 ;波特率设置与PIC1相同MOVWF SPBRGMOVLW 0X04 ;异步高速传输MOVWF TXSTABCF STATUS,RP0MOVLW 0X80 ;串行口工作使能MOVWF RCSTABSF STATUS,RP0BSF TRISC,7 ;与外接电路隔离BSF TRISC,6BCF STATUS,RP0MOVLW 0X30 ;从30H单元开始存放发送来的数据MOVWF FSRBSF RCSTA,CREN ;接收允许BSF STATUS,RP0BSF TXSTA,TXEN ;发送允许BCF STATUS,RP0WAIT BTFSS PIR1,RCIF ;等待接收数据GOTO WAITMOVF RCREG,0 ;读取数据MOVWF INDF ;将接收到的响应字节存入PIC2的RAM INCF FSRMOVWF TXREG ;发送响应字节LOOPTX BTFSS PIR1,TXIF ;等待写入完成GOTO LOOPTXBTFSS FSR,7 ;全部数据接收否?GOTO WAIT1 ;没有,继续接收其它数据BCF RCSTA,RCEN ;接收完,则关断接收和发送数据允许BSF STATUS,RP0BCF PIE1,TXENBCF STATUS,RP0CALL LED ;调用显示子程序,将接受到的数据显示出来END ;程序完PIC单片机双机同步通信1. 单片机PIC1编程(主控发送)LIST P=16F876#INCLUDE P16F876.INCCBLOCK 0X24 ;保留三个字节作为显示用COUNT ;作计数器或暂存器用ENDCORG 0X0000 ;程序复位入口NOPSTART GOTO MAINORG 0X0100MAIN MOVLW 0X30MOVWF FSR ;以下将从30H单元开始的RAM内容初始化MOVLW 0X30 ;将值30H赋给单元30HMOVWF COUNTINTRAM MOVF COUNT,0 ;将30H~7FH赋给单元30H~7FH MOVWF INDFINCF COUNT,1INCF FSR,1BTFSS COUNT,7GOTO INTRAMBSF STATUS,RP0 ;将SCI部件初始化MOVLW 0X19 ;将传输的波特率设为约9600 bpsMOVWF SPBRGMOVLW 0X94 ;选择同步高速方式传输8位数据MOVWF TXSTABCF STATUS,RP0MOVLW 0X80 ;允许同步串行口工作MOVWF RCSTABSF STATUS,RP0BSF TRISC,7 ;将RC6、RC7设置为输入方式,断绝与外接电路的连接BSF TRISC,6BSF STATUS,RP0MOVLW 0X30 ;将从30H单元开始的内容传送到PIC2MOVWF FSRMOVF INDF,0MOVWF TXREG ;将待发送的数据写入发送缓冲器TXREGBSF STATUS,RP0BSF TXSTA,TXEN ;发送允许BCF STATUS,RP0TX1 BTFSS PIR1,TXIF ;等待上一个数据写完GOTO TX1INCF FSR ;准备发送下一个数据MOVF INDF,0MOVWF TXREG ;将新的数据写入TXREGBTFSS FSR,7 ;判断所有30H~7FH单元的内容是否发送完毕?GOTO TX1 ;没有,则继续发送其它字节TX2 BTFSS PIR1,TXIF ;等所有要求发送的数据已经发送完,再额外GOTO TX2 ;写一个字节到TXREG,使最后一个数据能够顺利发送MOVWF TXREGNOP ;延时几个微秒后,关发送允许NOPNOPNOPNOPBSF STATUS,RP0BCF TXSTA,TXENBCF STATUS,RP0CALL LED ;调用显示子程序,将发送的数据显示出来END ;程序完2. 单片机PIC2编程(从动接收)LIST P=16F876#INCLUDE P16F876.INCCBLOCK 0X24COUNTENDCORG 0X0000NOPSTART GOTO MAINORG 0X0100MAIN BSF STATUS,RP0MOVLW 0X10 ;选择同步从动方式MOVWF TXSTABCF STATUS,RP0MOVLW 0X80 ;串行口使能MOVWF RCSTABSF STATUS,RP0BSF TRISC,7 ;关断与外部电路的联系BSF TRISC,6BCF STATUS,RP0MOVLW 0X30 ;从30H单元开始存放接收的数据MOVWF FSRBSF RCSTA,CREN ;接收允许WAIT BTFSS PIR1,RCIF ;等待接收GOTO WAITMOVF RCREG,0 ;读取接收到的数据MOVWF INDF ;将接收到的数据存入PIC2的RAMINCF FSRBTFSS FSR,7 ;所有的数据是否已接收完?GOTO WAIT ;没有,继续接收其它字节NOP ;延时数微秒后,清接收允许位NOPNOPNOPBCF RCSTA,RCENCALL LED ;调用显示子程序,将接受到的数据显示出来END ;程序完PIC单片机与PC机通过串口通信1. PC机编程PC采用Toubr C 进行编写。
PIC16F877A-UART#include #define unchar unsigned char#define uint unsigned intunchar RC_label;//标志位起始位为1 结束位为0unchar caiji_label;//采集帧格式标志位正确为1 错误为0unchar data RC[100];//存储接收到的数据unchar data TX1[100];//存储自身参数unchar data TX2[100];//存储出错指示ERRORint RC_buff;//inti=0,j=0,k=0;////*****串口初始化**********void initRS232(){//设置TXSTACSRC=0;//TX9=0;//8 位数据发送TXEN=1;//发送使能SYNC=0;//选择异步模式BRGH=1;//高速TRMT=1;//发送寄存器空TX9D=0;////设置RCSTASPEN=1;//允许串口工作RX9=0;//接收8 位数据SREN=1;//CREN=1;//使能连续接收ADDEN=0;//FERR=0;//OERR=0;//无超速错误RX9D=0;//TRISC=0X80;//设置C 口SPBRG=0X19;//设置波特率为9600}//*******延时*********void delay(int i){for(i;--i;) continue;}//******中断初始化******void int_interrupt(void){GTE=1;//PEIE=1;//RCIE=1;//}//********中断服务子程序*********void interrupt receive(void){if(OERR==1)//判断有无超速错误{CREN=0;CREN=1;}if(RCIF==1){RC_buff=RCREG;if(RC_buff==0x2a)//判断是否是起始标志*{RC_label=1;}if(RC_buff==0x23)//判断是否是结束标志#{RC_label=0;}}if(RC_label==1)RC[k++]=RC_buff;//将接收到的数据存储在数组中else if(RC_label==0)k=0;if(RC[1]==0XFE&&RC[2]==0XC0&&RC[3]==0X34&&RC[5]==0X12)//判断数据采集帧格式是否正确caiji_label=1;elsecaiji_label=0;}//********参数发送子程序开始**********void TX_serve(void){TX1[ ]={0X2A,0XFD,0X26,0X30,0X31,0X32};//自身参数存储在TX1 中TX2[ ]={0X56,0X52,0X52,0X4F,0X52};//出错指示存储在TX2 中if(caiji_label==1)//如果数据采集帧格式正确则发送自身参数帧{for(j=0;j<6;j++){TXREG=TX1[j];。
基于PIC16F877的以太网通讯设计与应用以太网是当今最常用的局域网技术,它能够实现高速、稳定的数据传输。
在嵌入式系统中,以太网也广泛应用。
本文将介绍如何利用PIC16F877单片机设计实现以太网通讯功能,并探讨其在实际应用中的运用。
首先,需要用到的硬件是以太网芯片ENC28J60和PIC16F877单片机。
ENC28J60是一款非常流行的以太网芯片,它具有低功耗、小封装、支持SPI通讯等优势,适合用于嵌入式系统等场景。
而PIC16F877单片机是一款高性能、低功耗的微处理器,适用于各种应用,尤其擅长数据采集和控制。
以太网芯片ENC28J60采用SPI接口与PIC16F877单片机进行通讯。
具体实现过程如下:1.初始化以太网芯片在使用以太网芯片前,需要对其进行初始化。
初始化过程包括设置寄存器值、设置MAC地址、授权等操作。
2.建立连接建立连接是以太网通讯的关键。
建立连接包括获取IP地址、建立TCP连接、处理数据等步骤。
连接成功后,可以发送和接收数据。
3.发送数据发送数据是以太网通讯的核心部分。
在PIC16F877单片机中,需要将要发送的数据打包成一个数据帧,并通过SPI接口发送给ENC28J60芯片。
4.接收数据接收数据同样也很关键。
在PIC16F877单片机中,需要不断通过SPI接口接收ENC28J60芯片发送过来的数据。
接收到数据后,需要对其进行处理,并进行相应的操作。
除了上述步骤外,以太网通讯中还有许多其它的操作,比如数据加密、数据解密、数据压缩、数据解压缩等。
这些操作都需要PIC16F877单片机完成。
以太网通讯在实际应用中有着广泛的运用。
例如,在工业控制系统中,可以利用以太网通讯实现各个设备之间的数据交换和控制。
在智能家居系统中,可以利用以太网通讯实现各种家居设备之间的联动和远程控制。
总结起来,以太网通讯是当今最重要的局域网技术之一,利用PIC16F877单片机设计实现以太网通讯功能,能够实现高效、稳定、快速的数据传输。
#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串口通信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单片机与PC机的串行通信
南光群;吴鸿霞
【期刊名称】《湖北理工学院学报》
【年(卷),期】2005(021)006
【摘要】介绍了PIC16F877单片机与PC机实现串行通信的一种方法,并给出了硬件接口电路及通信源程序.
【总页数】4页(P31-34)
【作者】南光群;吴鸿霞
【作者单位】黄石理工学院电气与电子信息工程学院,湖北,黄石,435003;黄石理工学院电气与电子信息工程学院,湖北,黄石,435003
【正文语种】中文
【中图分类】TP368.1
【相关文献】
1.Ti DM642芯片与PIC16F877单片机之间的异步串行通信 [J], 倪炜;李维
2.51单片机与上位PC机的串行通信技术 [J], 张岩
3.基于Proteus仿真软件实现单片机与PC机多字节串行通信 [J], 王忠远;张凤桐
4.用VC++实现PC机与单片机的串行通信 [J], 许江宁
5.利用VB8.0实现PC机与多单片机串行通信的方法 [J], 王平根
因版权原因,仅展示原文概要,查看原文内容请购买。
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单片机一样,在配置结构上可分为通用寄存器和特殊功能寄存器两大类。
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], 郭继红;李虹飞
因版权原因,仅展示原文概要,查看原文内容请购买。