PIC单片机自学手记之串口通信.doc

//////////以下字符里面的0x0d,0x0a是换行符////////// #includepic.h #define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31); uchar LED_CODE[]={I,.,L,O,V,E,.,Y,O,U,0x0d,0x0a,k}; void delay500us(uchar r); void senddata(); void init(); void main() { init();//系统初始化 while(1) { //等待发送 } } void init() { TRISC=0xFF;//注意接收端一定要设置成输入不然不能接收操作 TRISB=0xFF;//B端口设置成输入(按键操作发送用途) TRISD=0x00;//D端口设置成输出 PORTD=0xFF;//D端口初始输出高 TRISA=0x00;//A端口设置成输出 PORTA=0x00;//A端口初始输出高 TXSTA=0x24;//发送数据控制位配置 0B 0010 0100 RCSTA=0x90;//接收数据控制位配置 0B 1001 0000 SPBRG=25;//波特率设置9600 RCIE=1;//接收使能 TXIE=1;//发送使能 PEIE=1;//外中断使能 GIE=1;//总中断开启 } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·// //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// /*void interrupt rc()//串口接收中断 { if(RCIERCIF)//判断接收中断是否置位 { uchar temp;//定义个字符型临时变量 temp=RCREG;//将接收到的串口数据存到临时变量里面以便后面操作 TXREG=PORTD=temp; //=temp; while(!TRMT); } }*/ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~·// //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// void interrupt tx()//串口发送中断 { if(TXIETXIF)//判断发送中断是否置位 { if(RB0==0)//检测按键0是否按下 { delay500us(20);//按键被按下后延时消抖 if(RB0==0)//再次判断是否按下 { senddata();//调用发送一个字符串的子函数 } } while(!RB0);//按键松手检测 } } void delay500us(uchar r)//500US延时子函数 { uint p,m; for(p=0;pr;p++) for(m=0;m28;m++); } void senddata()//发送一个字符串的子函数 { uchar i=0;//定义一个临时字符变量,并且赋0值 while(LED_CODE[i]!=k)//判断i的值是否不等于k将I LOVE YOU 这个字符串一个个装入移位寄存器 { TXREG=LED_CODE[i];//发送字符串I LOVE YOU 到PC机 while(!TRMT);//检测移位寄存器是否发完 发完为1 没有发完是0 i++;//i的值加1 } }

文档评论(0)

1亿VIP精品文档

相关文档