音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

PIC單片機(jī)通訊例程(3)---單片機(jī)與PC機(jī)通信

作者:BLACKHILL 欄目:單片機(jī)
PIC單片機(jī)通訊例程(3)---單片機(jī)與PC機(jī)通信
單片機(jī)與PC機(jī)通信
1. PC機(jī)編程
PC采用Toubr C 進(jìn)行編寫。程序如下:
#include<stdio.h>
#define    PORT     0x3f8                    /*利用串口1進(jìn)行通信*/
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);                    /*準(zhǔn)備設(shè)置波特率*/
  outPORTb(PORT,0x0C);                    /*波特率設(shè)置為9 600 bps*/
  outPORTb(PORT+1,0x00);
  outPORTb(PORT+3,0x03);                    /*8位數(shù)據(jù)位,奇偶檢驗(yàn),1位停止位*/
  outPORTb(PORT+1,0x00);                    /*關(guān)中斷*/
  inPORTb(PORT+5);                        /*讀一次線路狀態(tài)寄存器,使其復(fù)位*/
  {
    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));            /*發(fā)送保持器滿則等待*/
       outPORTb(PORT,0x01);                /*否則發(fā)送數(shù)據(jù)01通知單片機(jī)準(zhǔn)備接收*/
       for(i=0;i<6;i++)                    /*共發(fā)送6個(gè)數(shù)據(jù)*/
    {
      a=b[i];
      while(!(inPORTb(PORT+5)&0x20))
      delay(100);                        /*發(fā)送保持器滿,等待*/
      outPORTb(PORT,a);                    /*發(fā)送a*/
      printf("%d\n",a);                    /*顯示a*/
      while(!(inPORT(PORT+5)&1));            /*接收單片機(jī)送回的數(shù)據(jù)*/
      ch[i]=inPORT(PORT);                    /*保存*/
      }
      delay(10);
      for(j=0;j<8;j++)                    /*顯示接收的回送數(shù)據(jù)*/
      printf("\n%d\n",ch[j]);
      getch();
      break;
      }
      case'r':                            /*接收數(shù)據(jù)*/
      case'R':
      {
        while(!(inPORTb(PORT+5)&0x20));        
        outPORTb(PORT,0x02);                /*發(fā)送數(shù)據(jù)02通知單片機(jī)發(fā)送數(shù)據(jù)*/
        for(j=0;j<9;j++)                    /*共接收9個(gè)數(shù)據(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. 單片機(jī)編程
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            ;波特率設(shè)置為9 600 bps
        MOVLW    0X19
        MOVWF    SPBRG            ;異步高速方式
        MOVLW    0X04
        MOVWF    TXSTA
        BCF    STATUS,RP0
        MOVLW    0X80      
2樓: >>參與討論
wyhfly
很好!
 
3樓: >>參與討論
poor
都用C寫就好了
 
4樓: >>參與討論
wogudan
1
1

* - 本貼最后修改時(shí)間:2003-1-25 11:53:15 修改者:wogudan

5樓: >>參與討論
wogudan
用兩根口線模擬串口與電腦通信,調(diào)試通過(電腦端用串口助手)
;=========================================================
;RS232通訊程序!波特率=9600bit/s                  (2003-1-17)
;原理:發(fā)送時(shí),通過使數(shù)據(jù)發(fā)送端為低電平并保持s秒(9600波特
;率時(shí)為104μs)來發(fā)送起始位。隨后每s秒鐘通過置位或清零發(fā)送端
;把數(shù)據(jù)發(fā)送出去,再發(fā)送停止位(1).這里的s是指一位所持續(xù)
;的時(shí)間(s=1/波特率);接收時(shí),數(shù)據(jù)接收端如果檢測(cè)到起始位(0),
;則在大約1.5s秒(9600波特率時(shí)為156μs)后檢測(cè)第一位數(shù)據(jù)位,
;隨后每s秒鐘檢測(cè)一次其它的數(shù)據(jù)位(總共8位)!
;注意:時(shí)間要精確,發(fā)送要有停止位!
;===========================================================

        LIST    P=16F84
                INCLUDE <PICREG.H>
;***********************端口定義***************************
RXD_PORT    EQU    B_RB5    ;接收端口!
TXD_PORT    EQU    B_RB4    ;發(fā)送端口!

;***********************寄存器定義*************************
;BUF_TXRX:發(fā)送接收二級(jí)緩沖區(qū)!  BUF_DATA:發(fā)送接收一級(jí)緩沖區(qū)!
    CBLOCK    0CH    
        TEMP,BUF_TXRX,BUF_DATA,COUNT_DATA,DEL_TEMP
    ENDC    
;**********************************************************
        ORG    0000H
        GOTO    INITA
;**********************************************************
S_SENT        GOTO    SENT
S_ACCE        GOTO    ACCEPT
;**********************************************************
SENT        BCF    PORTB,TXD_PORT
        MOVLW    08H
        MOVWF    COUNT_DATA
        MOVF    BUF_DATA,TOW
        MOVWF    BUF_TXRX
SNEXT_BIT    MOVLW    1FH            ;延時(shí):1*104us!
        CALL    DEL_BIT
        BTFSS    BUF_TXRX,B_LSB
        BCF    PORTB,TXD_PORT
        BTFSC    BUF_TXRX,B_LSB
        BSF    PORTB,TXD_PORT
        DECFSZ    COUNT_DATA,SAME
        GOTO    SNEXT_HEAD
        MOVLW    1FH            ;(最后一位)延時(shí):1*104us!
        CALL    DEL_BIT
        BSF    PORTB,TXD_PORT        ;發(fā)送停止位!
        MOVLW    1FH            ;停止位延時(shí):1*104us!
        CALL    DEL_BIT
        RETLW    0
SNEXT_HEAD    RRF    BUF_TXRX,SAME
        GOTO    SNEXT_BIT
        
        
ACCEPT        CLRF    BUF_TXRX
        MOVLW    08H
        MOVWF    COUNT_DATA
        MOVLW    31H            ;延時(shí):1.5*104us!
        CALL    DEL_BIT
ANEXT_BIT    BTFSS    PORTB,RXD_PORT
        BCF    BUF_TXRX,B_MSB
        BTFSC    PORTB,RXD_PORT
        BSF    BUF_TXRX,B_MSB
        DECFSZ    COUNT_DATA,SAME
        GOTO    ANEXT_HEAD
        RETLW    0
ANEXT_HEAD    RRF    BUF_TXRX,SAME
        MOVLW    1FH            ;延時(shí):1*104us!
        CALL    DEL_BIT
        GOTO    ANEXT_BIT

INITA        CLRWDT
        MOVLW    00H
        TRIS    PORTA
        MOVLW    20H
        TRIS    PORTB
        
MAIN         MOVLW    20H
        TRIS    PORTB
        BTFSC    PORTB,RXD_PORT
        GOTO    MAIN
        CALL    S_ACCE
        MOVF    BUF_TXRX,TOW
        MOVWF    BUF_DATA
        ADDLW    01H
        MOVWF    BUF_DATA
        CALL    S_SENT
HALTL           CLRWDT
        GOTO    MAIN
                GOTO       HALTL
        
DEL_BIT        MOVWF    DEL_TEMP        ;延時(shí):x*3+2
DELAY1        DECFSZ    DEL_TEMP,SAME
     &nbs
6樓: >>參與討論
hpu1234
不錯(cuò)!
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
關(guān)于反匯編的問題,急!
你說怪不怪。
請(qǐng)問張工:軟件模擬PWM?
關(guān)于程序頁面0和頁面1,造成程序亂跳!請(qǐng)教張工和各位高手!
我發(fā)現(xiàn)了一個(gè)好軟件
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)