一個單片機與PC機通信的程序,pc機程序用c語言來編寫,單片機程序用匯編語言來編寫
1. PC機編程PC采用Toubr C 進行編寫。程序如下:#include#defineport0x3f8int 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);outportb(port+1,0x00);outportb(port+3,0x03);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);for(i=0;i<6;i++){a=b[i];while(!(inportb(port+5)&0x20))delay(100);outportb(port,a);printf("%d\n",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);for(j=0;j<9;j++){while(!(inportb(port+5)&1));ch[j]=inportb(port);}for(j=0;j<9;j++)printf("\n %d\n",ch[j]);getch();break;}}}}2. 單片機與PC機通信之單片機程序LISTP=16F876#INCLUDEP16F876.INCCBLOCK 0X24COUNTTEMPENDCORG0X0000NOPSTARTGOTOMAINORG0X020MAINMOVLW0X30;將RAM單元初始化MOVWFFSRBCFSTATUS,RP0MOVLW0X22MOVWFCOUNTINTRAMMOVFCOUNT,0MOVWFINDFINCFCOUNT,1INCFFSR,1BTFSSFSR,7GOTOINTRAMBANKSELTXSTA;波特率設置為9 600 bpsMOVLW0X19MOVWFSPBRG;異步高速方式MOVLW0X04MOVWFTXSTABCFSTATUS,RP0MOVLW0X80;串行口使能MOVWFRCSTAMOVLW0X30MOVWFFSRBSFRCSTA,CREN;接收允許BSFSTATUS,RP0BSFTXSTA,TXEN;發(fā)送允許BCFSTATUS,RP0WAITBTFSSPIR1,RCIF;接收PC機命令GOTOWAITMOVFRCREG,0MOVWFTEMPMOVWFINDFINCFFSRDECFSZTEMP;接收到的數(shù)據為1,則接收GOTOTXW;否則發(fā)送數(shù)據MOVLW0X06MOVWFTEMPWAIT1BTFSSPIR1,RCIF;接收一個數(shù)據GOTOWAIT1MOVFRCREG,0MOVWFCOUNTMOVWFTXREGLOOPTXBTFSSPIR1,TXIF;將接收到的數(shù)據送回PC機GOTOLOOPTXMOVFCOUNT,0MOVWFINDFINCFFSRDECFSZTEMPGOTOWAIT1GOTOOVER;處理完畢TXWMOVLW0X09;向PC機發(fā)送9個數(shù)據MOVWFTEMPMOVLW0X30MOVWFFSRTXW0MOVFINDF,0MOVWFTXREGINCFFSRTXW1BTFSSPIR1,TXIFGOTOTXW1DECFSZTEMPGOTOTXW0OVERBCFRCSTA,CREN;通信任務完成,關接受和發(fā)送允許BSFSTATUS,RP0BCFTXSTA,TXENBCFSTATUS,RP0CALLLED;調用顯示子程序,將發(fā)送(或接收)的數(shù)據顯示出來END;程序完
關鍵詞:
單片機PC機通