|
|||||||||||
| 技術(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ī) |
單片機(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 于 2003/1/24 14:28:00 發(fā)布:
很好! |
|
| 3樓: | >>參與討論 |
| 作者: poor 于 2003/1/25 9:33:00 發(fā)布:
都用C寫就好了 |
|
| 4樓: | >>參與討論 |
| 作者: wogudan 于 2003/1/25 11:47:00 發(fā)布:
1 1 * - 本貼最后修改時(shí)間:2003-1-25 11:53:15 修改者:wogudan |
|
| 5樓: | >>參與討論 |
| 作者: wogudan 于 2003/1/25 11:51:00 發(fā)布:
用兩根口線模擬串口與電腦通信,調(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 于 2003/1/28 8:01:00 發(fā)布:
不錯(cuò)! |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |