您的位置:首页单片机PIC单片机
内容搜索:
阅读内容
背景:#EDF0F5 #FAFBE6 #FFF2E2 #FDE6E0 #F3FFE1 #DAFAF3 #EAEAEF 默认  

PIC单片机与PC机通讯的程序

[日期:2008-03-04 ] [来源:net 作者:佚名] [字体: (投递新闻)
16F876单片机的程序



LIST      P=16F876

#INCLUDE    P16F876.INC

CBLOCK 0X24

COUNT  

TEMP

ENDC

ORG   0X0000

NOP

START   GOTO   MAIN

ORG      0X020

MAIN   MOVLW   0X30            ;将RAM单元初始化

MOVWF   FSR

BCF      STATUS,RP0

MOVLW   0X22

MOVWF   COUNT

INTRAM   MOVF   COUNT,0

MOVWF   INDF

INCF      COUNT,1

INCF      FSR,1

BTFSS   FSR,7

GOTO   INTRAM

BANKSEL   TXSTA         ;波特率设置为9 600 bps

MOVLW   0X19

MOVWF   SPBRG         ;异步高速方式

MOVLW   0X04

MOVWF   TXSTA

BCF   STATUS,RP0

MOVLW   0X80            ;串行口使能

MOVWF   RCSTA

MOVLW   0X30

MOVWF   FSR

BSF      RCSTA,CREN      ;接收允许

BSF      STATUS,RP0

BSF      TXSTA,TXEN      ;发送允许

BCF      STATUS,RP0

WAIT   BTFSS   PIR1,RCIF      ;接收PC机命令

GOTO   WAIT

MOVF   RCREG,0

MOVWF   TEMP

MOVWF   INDF

INCF   FSR

DECFSZ   TEMP         ;接收到的数据为1,则接收

GOTO   TXW            ;否则发送数据

MOVLW   0X06

MOVWF   TEMP

WAIT1   BTFSS   PIR1,RCIF      ;接收一个数据

GOTO   WAIT1

MOVF   RCREG,0

MOVWF   COUNT

MOVWF   TXREG

LOOPTX   BTFSS   PIR1,TXIF      ;将接收到的数据送回PC机

GOTO   LOOPTX

MOVF   COUNT,0

MOVWF   INDF  

INCF      FSR

DECFSZ   TEMP

GOTO   WAIT1

GOTO   OVER         ;处理完毕

TXW      MOVLW   0X09            ;向PC机发送9个数据

MOVWF   TEMP

MOVLW   0X30

MOVWF   FSR

TXW0   MOVF   INDF,0

MOVWF   TXREG

INCF      FSR

TXW1   BTFSS   PIR1,TXIF

GOTO   TXW1

DECFSZ   TEMP

GOTO   TXW0  

OVER   BCF      RCSTA,CREN      ;通信任务完成,关接受和发送允许

BSF      STATUS,RP0

BCF      TXSTA,TXEN

BCF      STATUS,RP0

CALL   LED            ;调用显示子程序,将发送(或接收)的数据显示出来

END                  ;程序完







P C 机 程 序

PC采用Toubr C 进行编写。程序如下:www.dangdangdz.com

#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);               /*波特率设置为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;

while(!(inportb(port+5)&0x20))

delay(100);                  /*发送保持器满,等待*/

outportb(port,a);               /*发送a*/

printf("%d\n",a);               /*显示a*/

while(!(inport(port+5)&1));         /*接收单片机送回的数据*/

ch=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;

}

}

}

}
阅读:
录入:petta

推荐 】 【 打印
本文评论
      全部评论
发表评论


点评: 字数
姓名:
赞助商广告