PIC單片機通用同步異步通信的應用_第1頁
PIC單片機通用同步異步通信的應用_第2頁
PIC單片機通用同步異步通信的應用_第3頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第8章 通用同步/異步通信的應用8.5單片機雙機異步通信1單片機PIC1編程(發(fā)送部分)#in clude<pic.h>/*該程序實現單片機雙機異步通信功能,該程序是發(fā)送部分*/unsignedchartran8;/*定義一個數組存儲發(fā)送數據*/unsignedchark , data ;/* 定義通用寄存器 */con st char table20=0xc0, 0xf9, 0xa4, OxbO , 0x99, 0x92, 0x82, 0XD8, 0x80,0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 0x7f, 0xbf, 0x89, 0x

2、ff;/*不帶小數點的顯示段碼表*/*spi顯示初始化子程序*/void SPIINIT()PIR 仁0;SSPCON=0x30SSPSTAT=0xC0/*設置SPI的控制方式,允許 SSP方式,并且時鐘下降沿發(fā)送,與"74HC595,當其*SCLK從低到高跳變時,串行輸入寄存器”的特點相對應*/TRISC=0xD7;/*SDO引腳為輸出,SCK引腳為輸出*/TRISA5=0;/*RA5弓I腳設置為輸出,以輸出顯示鎖存信號*/*給數組賦初值子程序*/ void fuzhi()for(k=0 ; k<8; k+)tran k=k+3;voidscii nt()SPBRG=0X19

3、TXSTA=0X04RCSTA=0X80/*SCI部件初始化子程序*/*將傳輸的波特率設為約9 600位/秒*/*選擇異步高速方式傳輸8位數據*/*允許同步串行口工作*/TRISC6=1;TRISC7=1;/*SPI傳輸數據子程序*/*將RC6 RC7設置為輸入方式,對外部呈高阻狀態(tài)*/voidSPILED(data)SSPBUF=data do /*啟動發(fā)送*/*while(SSPIF=O);SSPIF=0;顯示子程序,顯示void display。8位數*/RA5=0;for(k=0 ; k<8;data=tra nkk+)/*準備鎖存*/*data=tabledataSPILED(

4、data)RA5=1 ;/*/*主程序*/main ()SPIINIT0;fuzhi();scii nt();di();TXEN=1CREN=1 for(k=0 ; k<8 ;k+)/*/*/*TXREG=trank;while(1)if(TXIF=1) break while(1)/*查得顯示的段碼*/發(fā)送顯示段碼*/最后給一個鎖存信號,代表顯示任務完成/*給數組賦初值*/*SCI部件初始化*/中斷禁止*/發(fā)送允許*/接收數據允許*/*發(fā)出一個字符*/*等待寫入完成*/*/if(RClF=1) break ; /*若收到響應字節(jié),則終止等待*/RCREG=RCREG /* 讀響應字節(jié),

5、清 RCIF*/display。;/*顯示發(fā)送的數據*/while(1);2單片機PIC2編程(接收部分)#in clude<pic.h>/*該程序實現單片機雙機異步通信功能,該程序是接收部分,并把接收的數據顯示在*個LED上*/un sig ned char un sig ned char const charrece8 ; /*定義一個數組存儲接收數據,data ; /*定義通用寄存器*/,0xf9, 0xa4,0xb0, 0x99, 0x92, 0x82,*/0x80, 0x90, 0x88,/*不帶小數點的顯示段碼表/*spivoidtable20=0xc00x83,顯示初

6、始化子程序*/SPIINIT()0XD8,0xc6, 0xa1, 0x86, 0x8e, 0x7f, 0xbf, 0x89, 0xff; */詳細語句見發(fā)送程序/*SCIvoid部件初始化子程序scii nt()*/SPBRG=0X19TXSTA=0X04RCSTA=0X80TRISC6=1;TRISC7=1;/*SPI傳送數據子程序*/*/*/*波特率設置與 PIC1相同,為約9 600位/秒*/ 異步高速傳輸*/串行口工作使能*/*將RC6 RC7設置為輸入方式,對外部呈高阻狀態(tài)*/voidSPILED(data)詳細語句與見發(fā)送程序/*顯示子程序,顯示 4位數*/voiddisplay(

7、)RA5=0;for(k=0 ; k<8; k+)data=recek ;/*準備鎖存*/*data=tabledataSPILED(data)RA5=1;/*/*/*查得顯示的段碼*/發(fā)送顯示段碼*/最后給一個鎖存信號,代表顯示任務完成*/主程序*/main ()SPIINIT(); sciin t();di(); CREN=1 TXEN=1 for(k=0 ; k<8 ;while(1) if(RCIF=1) break recek=RCREG ; TXREG=recek; while(1)if(TXIF=1) break display() ; while(1)k+)/*/*

8、/*spi顯示初始化*/ /*SCI部件初始化*/*中斷禁止*/接收允許*/發(fā)送允許*/*等待接收數據*/*讀取接收數據,同時清掉/*發(fā)送接收到的數據*/*等待寫入完成*/*顯示接收的數據*/RCIF*/8.6單片機雙機同步通信1單片機PIC1編程(主控發(fā)送)#in clude<pic.h>/*該程序實現單片機雙機同步通信功能,是主控發(fā)送部分。程序上電后顯示*相應的字符,表示系統(tǒng)正常工作。發(fā)送完畢后顯示發(fā)送的數據*/unsignedchartran8 ;/*定義一個數組存儲發(fā)送數據*/unsignedchar k, data ;/* 定義通用寄存器 */con stchar tab

9、le20=0xc0, 0xf9, 0xa4,OxbO, 0x99, 0x92, 0x82,0XD8,0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 0x7f, 0xbf, 0x89, 0xff;/*不帶小數點的的顯示段碼表*/*spi顯示初始化子程序*/void SPIINIT();詳細程序語句請參考本章8.5節(jié)/*給發(fā)送數組賦初值子程序*/ void fuzhi()for(k=0 ; k<8 ; k+)tran k=k;/*發(fā)送07八個數據*/voidscii nt()SPBRG=200;TXSTA=0X90RCSTA=0X80TRISC

10、6=1;TRISC7=1;/*SCI部件初始化子程序*/*將傳輸的波特率設為約9600位/秒*/*選擇主控方式*/*允許同步串行口工作 */*將RC6 RC7設置為輸入方式,對外部呈高阻狀態(tài)*/*SPI傳送數據子程序*/ void SPILED(data);詳細程序語句請參考本章8.5節(jié) /*顯示子程序,顯示8位數*/void display()準備鎖存*/RA5=0;/*for(k=0 ; k<8; k+)data=tra nk ; data=tabledata SPILED(data);RA5=1;/*查得顯示的段碼*/*發(fā)送顯示段碼*/*最后給一個鎖存信號,代表顯示任務完成*/*顯

11、示子程序,顯示 8位數*/void display1()RA5=0;/*準備鎖存*/for(k=0 ; k<8; k+)data=0xf9 ;/*顯示"1"表示系統(tǒng)正常工作*/SPILED(data);/*發(fā)送顯示段碼*/main ()SPIINIT0;fuzhi(); scii nt() ; di(); TXEN=1 display1();*/RA5=1 ;/*最后給一個鎖存信號,代表顯示任務完成/*主程序*/*spi顯示初始化*/*給發(fā)送數組賦發(fā)送初值*/*SCI部件初始化*/*中斷禁止*/*發(fā)送允許*/*顯示相應的字符,表示系統(tǒng)正常*/while(1)for(k

12、=0 ; k<8 ; k+)TXREG=trank ; /* 發(fā)出一個字符 */ while(1)if(TXIF=1) break ;/*等待上一個數據寫入完成*/display() ;/*顯示發(fā)送的數據*/*循環(huán)發(fā)送*/2單片機PIC2編程(從動接收)0xa4, 0xb0, 0x99, 0x92, 0x82, 0XD8, 0x80,#in elude <pic.h>0x90, 0x88, 0x83, 0xc6,0xa1, 0x86,0x8e, 0x7f, 0xbf, 0x89, 0xff/*不帶小數點的顯示段碼表 */ /*spi顯示初始化子程序*/ void SPIINI

13、T();詳細程序語句請參考本章/*SCI部件初始化子程序*/ voidscii nt()TXSTA=0X10 ;RCSTA=0X90TRISC6=1;TRISC7=1;8.5節(jié)/*選擇同步從動方式*/*串行口工作使能*/*將RC6 RC7設置為輸入方式對外部呈高阻狀態(tài)*/*SPI傳送數據子程序*/void SPILED(data);/*詳細程序語句請參考本章8.5節(jié)*/*顯示子程序,顯示 4位數*/void display()RA5=0;/*準備鎖存*/for(k=0 ; k<8 ; k+)data=recek ;*示在8個LED上*/un sig nedcharrece8;/*定義一個

14、數組存儲接收數據*/un sig nedchark, data ;/*定義通用寄存器*/un sig nedinti ;/*該程序實現單片機雙機同步通信功能,是從動接收部分,并把接收的數據顯const char table20=0xc00xf9,data=tabledataSPILED(data);RA5=1;/*查得顯示的段碼*/*發(fā)送顯示段碼*/*最后給一個鎖存信號,代表顯示任務完成*/*主程序*/main ()SPIINITO ; scii nt() ; di(); CREN=1/*spi顯示初始化*/*SCI部件初始化*/*中斷禁止*/*接收允許*/for(k=0 ; k<8 ;

15、 k+) recek=0x03 ;display() ;/*顯示表示系統(tǒng)正常運行的數據*/while(1)while(1)CREN=1 /*允許連續(xù)接收*/while(1)if(RCIF=1) break ;/*等待接收數據*/k=0;recek=RCREG ; /*讀取接收數據*/if(OERR=1) /*如果有溢出錯誤,則處理*/CREN=0CREN=1if(recek=OxOO) break ; /* “ 0”為同步字符,只有接收到"0”時才進行下面的接收*/for(k=1 ; k<8; k+)while(1)if(RCIF=1) break ;/*等待接收數據*/rec

16、ek=RCREG ; /*讀取接收數據*/if(OERR=1) /*如果有溢出錯誤,則處理*/CREN=0CREN=1recek=recek&OxOF ; /*屏蔽掉高位,防止干擾*/CREN=0display() ;/*顯示接收的數據*/for(i=65535;-i ; continue ;for(i=65535;-i ; )continue ; /*給予一疋時間的延時,再進仃下一輪接收*/8.7單片機與PC機通信1 PC機編程PC采用Toubr C進行編寫。程序如下:#in clude<stdio.h>#defi ne port 0x3f8 in t ch15;main

17、 ()int a;int i, j ;/*利用串口 1進行通信*/int b6=88,char c ;clrscr();15, 38, 26,20, 0;outportb(port+3,0x80);/*準備設置波特率*/outportb(port,0x0C);/*波特率設置為 9600bps*/outportb(port+1,0x00);outportb(port+3,0x03);/*8位數據,無奇偶檢驗,1位停止位*/outportb(port+1,0x00);/*關中斷*/in portb(port+5)for(;);/*讀一次線路狀態(tài)寄存器,使其復位*/prin tf("tts

18、e nd data or receive data: (s or r?)nnn");c=getchar() ;switch(c) case 's':case 'S': while(!(inportb(port+5)&0x20); /* 發(fā)送保持器滿則等待 */outportb(port, 0x01) ;/*否則發(fā)送數據01,通知單片機準備接收*/for(i=0; i<6 ; i+)/* 共發(fā)送 6 個數據 */a=bi;while(!(i nportb(port+5)&0 x20) delay(100)outportb(port, a);printf("%dn", a);/*/*;/*發(fā)送保持器滿,等待*/發(fā)送a*/顯示a*/while(!(i nport(port+5)&1)chi=i nport(port);delay(10);for(j=0 ; j<8 ; j+) printf("n%dn" getch();break ;/*接收單片機送回的數據 */*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論