天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術熱線: 4007-888-234

技術支持

單片機與PC機通訊的源程序

更新時間: 2019-03-25

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      STATUSRP0
      MOVLW   0X22
      MOVWF   COUNT
INTRAM   MOVF   COUNT0
      MOVWF   INDF
      INCF      COUNT1
      INCF      FSR1

BTFSS   FSR7
      GOTO   INTRAM
      BANKSEL   TXSTA         ;波特率設置為9 600 bps
      MOVLW   0X19
      MOVWF   SPBRG         ;異步高速方式
      MOVLW   0X04
      MOVWF   TXSTA
      BCF   STATUSRP0
      MOVLW   0X80            ;串行口使能
      MOVWF   RCSTA
      MOVLW   0X30
      MOVWF   FSR
      BSF      RCSTACREN      ;接收允許
      BSF      STATUSRP0
      BSF      TXSTATXEN      ;發送允許
      BCF      STATUSRP0
WAIT   BTFSS   PIR1RCIF      ;接收PC機命令
      GOTO   WAIT
      MOVF   RCREG0
      MOVWF   TEMP
      MOVWF   INDF
      INCF   FSR

 DECFSZ   TEMP         ;接收到的數據為1,則接收
      GOTO   TXW            ;否則發送數據
      MOVLW   0X06
      MOVWF   TEMP
WAIT1   BTFSS   PIR1RCIF      ;接收一個數據
      GOTO   WAIT1
      MOVF   RCREG0
      MOVWF   COUNT
      MOVWF   TXREG
LOOPTX   BTFSS   PIR1TXIF      ;將接收到的數據送回PC
      GOTO   LOOPTX
      MOVF   COUNT0
      MOVWF   INDF   
      INCF      FSR
      DECFSZ   TEMP
      GOTO   WAIT1
      GOTO   OVER         ;處理完畢
TXW      MOVLW   0X09            ;向PC機發送9個數據
      MOVWF   TEMP
      MOVLW   0X30
      MOVWF   FSR
TXW0   MOVF   INDF0

  MOVWF   TXREG
      INCF      FSR
TXW1   BTFSS   PIR1TXIF
      GOTO   TXW1
      DECFSZ   TEMP
      GOTO   TXW0   
OVER   BCF      RCSTACREN      ;通信任務完成,關接受和發送允許
      BSF      STATUSRP0
      BCF      TXSTATXEN
      BCF      STATUSRP0
      CALL   LED            ;調用顯示子程序,將發送(或接收)的數據顯示出來
      END                  ;程序完



P C 機 程 序
PC采用Toubr C 進行編寫。程序如下:
#include
#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;
     }
    }
  }
}



404
返回首頁 |  返回上一頁
联系我们: 江城| 寻乌县| 郯城县| 英山县| 阳新县| 大冶市| 伽师县| 宁城县| 荃湾区| 南漳县| 南宁市| 同仁县| 交城县| 汾阳市| 麻江县| 于田县| 龙井市| 汪清县| 邵阳县| 无锡市| 灵石县| 湘潭县| 常德市| 成武县| 安岳县| 芒康县| 郴州市| 调兵山市| 女性| 沁阳市| 陈巴尔虎旗| 焉耆| 依安县| 普兰县| 裕民县| 日照市| 五寨县| 基隆市| 银川市| 莱西市| 乐清市|