中文字幕无码不卡一区二区三区_少妇被又大又粗又爽毛片久久黑人_91精品国产在热久久无毒不卡_久久久久久亚洲综合网站

技術(shù)熱線: 4007-888-234
設(shè)計(jì)開(kāi)發(fā)

專(zhuān)注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

開(kāi)發(fā)工具

提供開(kāi)發(fā)工具、應(yīng)用測(cè)試 完善的開(kāi)發(fā)代碼案例庫(kù)分享

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無(wú)限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶(hù)產(chǎn)品競(jìng)爭(zhēng)力

新聞中心

提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)

PIC單片機(jī)通訊例程

更新時(shí)間: 2019-03-23
閱讀量:1702

十年專(zhuān)注單片機(jī)方案開(kāi)發(fā)的方案公司英銳恩,分享基于QL200的數(shù)字電壓表。英銳恩現(xiàn)提供服務(wù)產(chǎn)品涉及主控芯片:8位單片機(jī)、16位單片機(jī)、32位單片機(jī)及各類(lèi)運(yùn)算放大器等。


  1. 單片機(jī)PIC1編程(發(fā)送部分) LIST P=16F877 #INCLUDE P16F876單片機(jī).INC CBLOCK 0X24 ;保留三個(gè)字節(jié)作為顯示用 COUNT ;作計(jì)數(shù)器或暫存器用 ENDC ORG 0X0000 ;程序復(fù)位入口 NOP START GOTO MAIN ORG 0X20 MAIN MOVLW 0X30 ;以下將RAM內(nèi)容初始化 MOVWF FSR ;從30H單元開(kāi)始 MOVLW 0X30 ;將值30H賦給單元30H MOVWF COUNT INTRAM MOVF COUNT,0 ;將30H~7FH賦給單元30H~7FH MOVWF INDF INCF COUNT,1 INCF FSR,1 BTFSS COUNT,7 GOTO INTRAM BSF STATUS,RP0 ;將SCI部件初始化 MOVLW 0X19 ;


將傳輸?shù)牟ㄌ芈试O(shè)為約9600 bps MOVWF SPBRG MOVLW 0X04 ;選擇異步高速方式傳輸8位數(shù)據(jù) MOVWF TXSTA BCF STATUS,RP0 MOVLW 0X80 ;允許同步串行口工作 MOVWF RCSTA BSF STATUS,RP0 BSF TRISC,7 ;將RC6、RC7設(shè)置為輸入方式,斷絕與外接電路的連接 BSF TRISC,6 BCF STATUS,RP0 MOVLW 0X30 ;30H作為同步字符發(fā)送 MOVWF FSR MOVF INDF,0 MOVWF TXREG ;將待發(fā)送的數(shù)據(jù)寫(xiě)入發(fā)送緩沖器TXREG BSF STATUS,RP0 BSF TXSTA,TXEN ;發(fā)送允許 BCF STATUS,RP0 BSF RCSTA,CREN ;接收數(shù)據(jù)允許 LOOPTX BTFSS PIR1,RCIF ;等待PIC2的響應(yīng)字節(jié) GOTO LOOPTX MOVF RCREG,0 ;讀響應(yīng)字節(jié),清RCIF LOOPTX1 BTFSS PIR1,TXIF ;發(fā)送下一字節(jié) GOTO LOOPTX1 INCF FSR MOVF INDF,0 MOVWF TXREG BTFSS FSR,7 ;30H~7FH單元的內(nèi)容是否發(fā)送完? GOTO LOOPTX ;沒(méi)有,繼續(xù)下一字節(jié)的發(fā)送 BSF STATUS,RP0 ;如果是,則停止發(fā)送 BCF TXSTA,TXEN BCF STATUS,RP0 ;數(shù)據(jù)發(fā)送完畢 CALL LED ;調(diào)用顯示子程序,將發(fā)送的數(shù)據(jù)顯示出來(lái) END ;程序完

2. 單片機(jī)PIC2編程(接收部分) LIST P=16F876 #INCLUDE P16F876.INC CBLOCK 0X24 COUNT ENDC ORG 0X0000 NOP START GOTO MAIN MAIN BSF STATUS,RP0 ;初始化程序同發(fā)送子程序 MOVLW 0X19 ;波特率設(shè)置與PIC1相同 MOVWF SPBRG MOVLW 0X04 ;異步高速傳輸 MOVWF TXSTA BCF STATUS,RP0 MOVLW 0X80 ;串行口工作使能 MOVWF RCSTA BSF STATUS,RP0 BSF TRISC,7 ;與外接電路隔離 BSF TRISC,6 BCF STATUS,RP0 MOVLW 0X30 ;從30H單元開(kāi)始存放發(fā)送來(lái)的數(shù)據(jù) MOVWF FSR BSF RCSTA,CREN ;接收允許 BSF STATUS,RP0 BSF TXSTA,TXEN ;發(fā)送允許 BCF STATUS,RP0 WAIT BTFSS PIR1,RCIF ;等待接收數(shù)據(jù) GOTO WAIT MOVF RCREG,0 ;讀取數(shù)據(jù) MOVWF INDF ;將接收到的響應(yīng)字節(jié)存入PIC2的RAM INCF FSR MOVWF TXREG ;發(fā)送響應(yīng)字節(jié) LOOPTX BTFSS PIR1,TXIF ;等待寫(xiě)入完成 GOTO LOOPTX BTFSS FSR,7 ;全部數(shù)據(jù)接收否? GOTO WAIT1 ;沒(méi)有,繼續(xù)接收其它數(shù)據(jù) BCF RCSTA,RCEN ;接收完,則關(guān)斷接收和發(fā)送數(shù)據(jù)允許 BSF STATUS,RP0 BCF PIE1,TXEN BCF STATUS,RP0 CALL LED ;調(diào)用顯示子程序,將接受到的數(shù)據(jù)顯示出來(lái) END ;程序完 

單片機(jī)雙機(jī)同步通信 1. 單片機(jī)PIC1編程(主控發(fā)送) LIST P=16F876 #INCLUDE P16F876.INC CBLOCK 0X24 ;保留三個(gè)字節(jié)作為顯示用 COUNT ;作計(jì)數(shù)器或暫存器用 ENDC ORG 0X0000 ;程序復(fù)位入口 NOP START GOTO MAIN ORG 0X0100 MAIN MOVLW 0X30 MOVWF FSR ;以下將從30H單元開(kāi)始的RAM內(nèi)容初始化 MOVLW 0X30 ;將值30H賦給單元30H MOVWF COUNT INTRAM MOVF COUNT,0 ;將30H~7FH賦給單元30H~7FH MOVWF INDF INCF COUNT,1 INCF FSR,1 BTFSS COUNT,7 GOTO INTRAM BSF STATUS,RP0 ;將SCI部件初始化 MOVLW 0X19 ;將傳輸?shù)牟ㄌ芈试O(shè)為約9600 bps MOVWF SPBRG MOVLW 0X94 ;選擇同步高速方式傳輸8位數(shù)據(jù) MOVWF TXSTA BCF STATUS,RP0 MOVLW 0X80 ;允許同步串行口工作 MOVWF RCSTA BSF STATUS,RP0 BSF TRISC,7 ;將RC6、RC7設(shè)置為輸入方式,斷絕與外接電路的連接 BSF TRISC,6 BSF STATUS,RP0 MOVLW 0X30 ;將從30H單元開(kāi)始的內(nèi)容傳送到PIC2 MOVWF FSR MOVF INDF,0 MOVWF TXREG ;將待發(fā)送的數(shù)據(jù)寫(xiě)入發(fā)送緩沖器TXREG BSF STATUS,RP0 BSF TXSTA,TXEN ;發(fā)送允許 BCF STATUS,RP0 TX1 BTFSS PIR1,TXIF ;等待上一個(gè)數(shù)據(jù)寫(xiě)完 GOTO TX1 INCF FSR ;準(zhǔn)備發(fā)送下一個(gè)數(shù)據(jù) MOVF INDF,0 MOVWF TXREG ;將新的數(shù)據(jù)寫(xiě)入TXREG BTFSS FSR,7 ;判斷所有30H~7FH單元的內(nèi)容是否發(fā)送完畢? GOTO TX1 ;沒(méi)有,則繼續(xù)發(fā)送其它字節(jié) TX2 BTFSS PIR1,TXIF ;等所有要求發(fā)送的數(shù)據(jù)已經(jīng)發(fā)送完,再額外 GOTO TX2 ;寫(xiě)一個(gè)字節(jié)到TXREG,使最后一個(gè)數(shù)據(jù)能夠順利發(fā)送 MOVWF TXREG NOP ;延時(shí)幾個(gè)微秒后,關(guān)發(fā)送允許 NOP NOP NOP NOP BSF STATUS,RP0 BCF TXSTA,TXEN BCF STATUS,RP0 CALL LED ;調(diào)用顯示子程序,將發(fā)送的數(shù)據(jù)顯示出來(lái) END ;程序完 2. 單片機(jī)PIC2編程(從動(dòng)接收) LIST P=16F876 #INCLUDE P16F876.INC CBLOCK 0X24 COUNT ENDC ORG 0X0000 NOP START GOTO MAIN ORG 0X0100 MAIN BSF STATUS,RP0 MOVLW 0X10 ;選擇同步從動(dòng)方式 MOVWF TXSTA BCF STATUS,RP0 MOVLW 0X80 ;串行口使能 MOVWF RCSTA BSF STATUS,RP0 BSF TRISC,7 ;關(guān)斷與外部電路的聯(lián)系 BSF TRISC,6 BCF STATUS,RP0 MOVLW 0X30 ;從30H單元開(kāi)始存放接收的數(shù)據(jù) MOVWF FSR BSF RCSTA,CREN ;接收允許 WAIT BTFSS PIR1,RCIF ;等待接收 GOTO WAIT MOVF RCREG,0 ;讀取接收到的數(shù)據(jù) MOVWF INDF ;將接收到的數(shù)據(jù)存入PIC2的RAM INCF FSR BTFSS FSR,7 ;所有的數(shù)據(jù)是否已接收完? GOTO WAIT ;沒(méi)有,繼續(xù)接收其它字節(jié) NOP ;延時(shí)數(shù)微秒后,清接收允許位 NOP NOP NOP BCF RCSTA,RCEN CALL LED ;調(diào)用顯示子程序,將接受到的數(shù)據(jù)顯示出來(lái) END ;程序完 

單片機(jī)與PC機(jī)通信 1. PC機(jī)編程 PC采用Toubr C 進(jìn)行編寫(xiě)。程序如下: #include #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 ;串行口使能 MOVWF RCSTA MOVLW 0X30 MOVWF FSR BSF RCSTA,CREN ;接收允許 BSF STATUS,RP0 BSF TXSTA,TXEN ;發(fā)送允許 BCF STATUS,RP0 WAIT BTFSS PIR1,RCIF ;接收PC機(jī)命令 GOTO WAIT MOVF RCREG,0 MOVWF TEMP MOVWF INDF INCF FSR DECFSZ TEMP ;


接收到的數(shù)據(jù)為1,則接收 GOTO TXW ;否則發(fā)送數(shù)據(jù) MOVLW 0X06 MOVWF TEMP WAIT1 BTFSS PIR1,RCIF ;接收一個(gè)數(shù)據(jù) GOTO WAIT1 MOVF RCREG,0 MOVWF COUNT MOVWF TXREG LOOPTX BTFSS PIR1,TXIF ;將接收到的數(shù)據(jù)送回PC機(jī) GOTO LOOPTX MOVF COUNT,0 MOVWF INDF INCF FSR DECFSZ TEMP GOTO WAIT1 GOTO OVER ;處理完畢 TXW MOVLW 0X09 ;向PC機(jī)發(fā)送9個(gè)數(shù)據(jù) 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 ;通信任務(wù)完成,關(guān)接受和發(fā)送允許 BSF STATUS,RP0 BCF TXSTA,TXEN BCF STATUS,RP0 CALL LED ;調(diào)用顯示子程序,將發(fā)送(或接收)的數(shù)據(jù)顯示出來(lái) END ;

大方县| 谢通门县| 驻马店市| 潞城市| 泽普县| 黔西县| 三门县| 新田县| 齐河县| 紫金县| 高陵县| 莒南县| 舒兰市| 桐城市| 靖安县| 仁布县| 靖江市| 张掖市| 大田县| 达拉特旗| 凤山县| 绥德县| 乌兰县| 中宁县| 红安县| 庆城县| 松潘县| 南通市| 萨嘎县| 辽阳县| 伽师县| 太保市| 习水县| 苗栗市| 方正县| 两当县| 旬邑县| 罗甸县| 莱州市| 陵川县| 岫岩|