用PIC16F877单片机与PC串口通信,谁能帮忙写代码?要用C语言编写的

如题所述

第1个回答  2013-04-11
#include<stdio.h>
#define port 0x3f8 /*利用串口 1 进行通信*/
int 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); /*波特率设置为 9600bps*/
outportb(port+1,0x00);
outportb(port+3,0x03); /*8 位数据,无奇偶检验,1 位停止位*/
outportb(port+1,0x00); /*关中断*/
inportb(port+5); /*读一次线路状态寄存器,使其复位*/
for(;;){
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));
outportb(port,0x02); /*发送数据 02,通知单片机发送数据*/
for(j=0;j<9;j++) { /*共接收 9 个数据*/
while(!(inportb(port+5)&1));
ch[j]=inportb(port);
}
for(j=0;j<9;j++) printf("\n %d\n",ch[j]);
getch();
break;
}
}
}
}追问

抱歉,我说的不详细,我要的是下位机PIC单片机上的程序.这个是上位机C的程序吧

相似回答