PIC單片機(jī)通用同步異步通信的應(yīng)用_第1頁
PIC單片機(jī)通用同步異步通信的應(yīng)用_第2頁
PIC單片機(jī)通用同步異步通信的應(yīng)用_第3頁
免費(fèi)預(yù)覽已結(jié)束,剩余11頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第 8 章 通用同步 / 異步通信的應(yīng)用8.5 單片機(jī)雙機(jī)異步通信1 單片機(jī) PIC1 編程(發(fā)送部分)#include <pic.h>/* 該程序?qū)崿F(xiàn)單片機(jī)雙機(jī)異步通信功能,該程序是發(fā)送部分 */unsigned char t ran8 ; /* 定義一個(gè)數(shù)組存儲(chǔ)發(fā)送數(shù)據(jù) */ unsigned char k,data ;/* 定義通用寄存器 */const char table20=0xc0,0xf9 , 0xa4 , 0xb0 , 0x99 , 0x92 , 0x82 , 0XD8, 0x80 , 0x90 , 0x88 ,0x83 ,0xc6 , 0xa1, 0x86,0x

2、8e, 0x7f ,0xbf , 0x89 ,0xff ;/* 不帶小數(shù)點(diǎn)的顯示段碼表 */*spi 顯示初始化子程序 */void SPIINIT()PIR1=0;SSPCON=0x3;0SSPSTAT=0xC;0/*設(shè)置SPI的控制方式,允許 SSP方式,并且時(shí)鐘下降沿發(fā)送,與"74HC595,當(dāng)其*SCLK從低到高跳變時(shí),串行輸入寄存器”的特點(diǎn)相對(duì)應(yīng)*/TRISC=0xD7;TRISA5=0;/*SDO引腳為輸出,SCK引腳為輸出*/*RA5 引腳設(shè)置為輸出,以輸出顯示鎖存信號(hào)*/* 給數(shù)組賦初值子程序 */void fuzhi()for(k=0 ; k<8;k+) tr

3、ank=k+3 ;void sciint()SPBRG=0X1;9TXSTA=0X04;RCSTA=0X8;0TRISC6=1;TRISC7=1;/*SCI 部件初始化子程序 */* 將傳輸?shù)牟ㄌ芈试O(shè)為約 9 600 位/ 秒*/* 選擇異步高速方式傳輸 8 位數(shù)據(jù) */*將RC6 RC7設(shè)置為輸入方式,對(duì)外部呈高阻狀態(tài)*/* 允許同步串行口工作 */*SPI 傳輸數(shù)據(jù)子程序 */ void SPILED(data)do while(SSPIF=0) ;SSPIF=0;/* 顯示子程序,顯示 8 位數(shù) */ void display()RA5=0;for(k=0 ; k<8;k+) da

4、ta=trank ; data=tabledata SPILED(data)RA5=1;/*準(zhǔn)備鎖存 */*/*/*主程序 */main()SPIINIT() ; fuzhi() ; sciint() ; di() ; TXEN=1; CREN=;1 for(k=0 ; k<8;k+)/* 查得顯示的段碼 */ 發(fā)送顯示段碼 */最后給一個(gè)鎖存信號(hào),代表顯示任務(wù)完成/* 給數(shù)組賦初值 */*SCI 部件初始化 */ 中斷禁止 */* 發(fā)送允許 */*/* 接收數(shù)據(jù)允許 */TXREG=trank ; while(1)if(TXIF=1) break while(1)if(RCIF=1)

5、break /* 發(fā)出一個(gè)字符 */* 等待寫入完成 */; /* 若收到響應(yīng)字節(jié),則終止等待RCREG=RCR;EG /* 讀響應(yīng)字節(jié),清 RCIF*/ display() ; while(1)/* 顯示發(fā)送的數(shù)據(jù) */*/*/2 單片機(jī) PIC2 編程(接收部分)#include <pic.h>*個(gè)led上*/unsignedcharrece8 ; /* 定義一個(gè)數(shù)組存儲(chǔ)接收數(shù)據(jù)*/unsignedchark , data ; /* 定義通用寄存器 */constchartable20=0xc0, 0xf9 , 0xa4, 0xb0,0x99, 0x92, 0x82, 0XD8

6、, 0x80, 0x90,0x88 ,0x83 , 0xc6 , 0xa1,0x86, 0x8e, 0x7f ,0xbf ,0x89 , 0xff ; /* 不帶小數(shù)點(diǎn)的顯示段碼表 */*spi 顯示初始化子程序 */ void SPIINIT();詳細(xì)語句見發(fā)送程序/*SCI 部件初始化子程序 */void sciint()SPBRG=0X1;9TXSTA=0X04;RCSTA=0X8;0TRISC6=1;TRISC7=1;/*波特率設(shè)置與 PIC1相同,為約9 600位/秒*/* 異步高速傳輸 */* 串行口工作使能 */*將RC6 RC7設(shè)置為輸入方式,對(duì)外部呈高阻狀態(tài)*/*SPI 傳送

7、數(shù)據(jù)子程序 */void SPILED(data);詳細(xì)語句與見發(fā)送程序/* 顯示子程序,顯示 4 位數(shù) */void display()RA5=0;for(k=0 ; k<8;k+) data=recek ; data=tabledata SPILED(data) ;RA5=1;/* 主程序 */* 準(zhǔn)備鎖存 */* 查得顯示的段碼 */* 發(fā)送顯示段碼 */* 最后給一個(gè)鎖存信號(hào),代表顯示任務(wù)完成*/main()SPIINIT() ; sciint() ; di() ;/*spi 顯示初始化 */*SCI 部件初始化 */* 中斷禁止 */CREN=;1TXEN=1;for(k=0

8、; k<8;k+)while(1) if(RCIF=1) break recek=RCREG; TXREG=recek ; while(1)if(TXIF=1) break display() ;while(1)/* 接收允許 */ /* 發(fā)送允許 */* 等待接收數(shù)據(jù) */* 讀取接收數(shù)據(jù),同時(shí)清掉 RCIF*/* 發(fā)送接收到的數(shù)據(jù) */* 等待寫入完成 */* 顯示接收的數(shù)據(jù) */8.6 單片機(jī)雙機(jī)同步通信1 單片機(jī) PIC1 編程(主控發(fā)送)#include <pic.h>/* 該程序?qū)崿F(xiàn)單片機(jī)雙機(jī)同步通信功能,是主控發(fā)送部分。程序上電后顯示* 相應(yīng)的字符,表示系統(tǒng)正常

9、工作。發(fā)送完畢后顯示發(fā)送的數(shù)據(jù) */unsigned char tran8 ; /* 定義一個(gè)數(shù)組存儲(chǔ)發(fā)送數(shù)據(jù) */ unsigned chark, data ; /* 定義通用寄存器 */const char table20=0xc0,0xf9 ,0xa4,0xb0,0x99,0x92,0x82 ,0XD8,0x80,0x90,0x88 ,0x83 , 0xc6 , 0xa1,0x86, 0x8e, 0x7f ,0xbf ,0x89 , 0xff ;/* 不帶小數(shù)點(diǎn)的的顯示段碼表 */*spi 顯示初始化子程序 */void SPIINIT();詳細(xì)程序語句請(qǐng)參考本章 8.5 節(jié)/* 給發(fā)送

10、數(shù)組賦初值子程序 */void fuzhi()for(k=0 ; k<8;k+)trank=k ;/*發(fā)送07八個(gè)數(shù)據(jù)*/*SCI 部件初始化子程序 */void sciint()SPBRG=200;TXSTA=0X90;RCSTA=0X8;0TRISC6=1;TRISC7=1;/*/*/*將傳輸?shù)牟ㄌ芈试O(shè)為約 9600 位/ 秒*/選擇主控方式 */允許同步串行口工作 */*將RC6 RC7設(shè)置為輸入方式,對(duì)外部呈高阻狀態(tài)*/*SPI 傳送數(shù)據(jù)子程序 */void SPILED(data);詳細(xì)程序語句請(qǐng)參考本章 8.5 節(jié)/* 顯示子程序,顯示 8 位數(shù) */void display

11、()RA5=0;/* 準(zhǔn)備鎖存 */for(k=0 ; k<8;k+)data=trank ;data=tabledataSPILED(data) ; RA5=1; /* 查得顯示的段碼 */* 發(fā)送顯示段碼 */* 最后給一個(gè)鎖存信號(hào),代表顯示任務(wù)完成*/* 顯示子程序,顯示 8 位數(shù) */void display1()RA5=0;/* 準(zhǔn)備鎖存 */for(k=0 ; k<8;k+) data=0xf9 ; SPILED(data) ;RA5=1;/* 主程序 */* 顯示 "1" 表示系統(tǒng)正常工作 */* 發(fā)送顯示段碼 */* 最后給一個(gè)鎖存信號(hào),代表顯示

12、任務(wù)完成*/main()SPIINIT() ; fuzhi() ; sciint() ; di() ; TXEN=1; display1() ;/*spi 顯示初始化 */* 給發(fā)送數(shù)組賦發(fā)送初值 */*SCI 部件初始化 */* 中斷禁止 */* 發(fā)送允許 */* 顯示相應(yīng)的字符,表示系統(tǒng)正常 */while(1)for(k=0 ; k<8;k+)TXREG=trank ; /* 發(fā)出一個(gè)字符 */ while(1)if(TXIF=1) break;/*等待上一個(gè)數(shù)據(jù)寫入完成 */ display();/*顯示發(fā)送的數(shù)據(jù)*/*循環(huán)發(fā)送 */2 單片機(jī) PIC2 編程(從動(dòng)接收)#inc

13、lude <pic.h>/* 該程序?qū)崿F(xiàn)單片機(jī)雙機(jī) 同步通信功能,是從動(dòng)接收部分,并把接收的數(shù)據(jù)顯unsignedcharrece8 ;/* 定義一個(gè)數(shù)組存儲(chǔ)接收數(shù)據(jù) */unsignedchark, data ;/* 定義通用寄存器 */unsignedinti;*示在8個(gè)LED上*/const char table20=0xc0,0xf9 , 0xa4 , 0xb0 , 0x99 , 0x92 , 0x82 , 0X D 8, 0x80 , 0x90 , 0x8 8 ,0x83 ,0xc6 , 0xa1, 0x86,0x8e,0x7f ,0xbf ,0x89 ,0xff/* 不

14、帶小數(shù)點(diǎn)的顯示段碼表 */*spi 顯示初始化子程序 */ void SPIINIT();詳細(xì)程序語句請(qǐng)參考本章/*SCI 部件初始化子程序 */ void sciint()TXSTA=0X10 ; RCSTA=0X9;0TRISC6=1;TRISC7=1;8.5 節(jié)/* 選擇同步從動(dòng)方式 */* 串行口工作使能 */*將RC6 RC7設(shè)置為輸入方式對(duì)外部呈高阻狀態(tài)*/*SPI 傳送數(shù)據(jù)子程序 */void SPILED(data); /* 詳細(xì)程序語句請(qǐng)參考本章8.5 節(jié)*/* 顯示子程序,顯示 4 位數(shù) */void display()RA5=0;/* 準(zhǔn)備鎖存 */* 查得顯示的段碼 *

15、/* 發(fā)送顯示段碼 */* 最后給一個(gè)鎖存信號(hào),代表顯示任務(wù)完成*/for(k=0 ; k<8;k+) data=recek ; data=tabledata SPILED(data) ;RA5=1;main()SPIINIT() ; sciint() ; di() ; CREN=;1/* 主程序 */*spi 顯示初始化 */*SCI 部件初始化 */* 中斷禁止 */* 接收允許 */for(k=0 ; k<8;k+) recek=0x03 ;display() ; /* 顯示表示系統(tǒng)正常運(yùn)行的數(shù)據(jù) */ while(1) while(1)CREN=;1/* 允許連續(xù)接收 */

16、while(1) if(RCIF=1) break ; /* 等待接收數(shù)據(jù) */k=0;recek=RCREG ; /* 讀取接收數(shù)據(jù) */ if(OERR=1) /* 如果有溢出錯(cuò)誤 ,則處理 */CREN=;0CREN=;1 if(recek=0x00) break;/* “0”為同步字符 , 只有接收到“ 0”時(shí)才進(jìn)行下面的接收 */for(k=1 ; k<8;k+)while(1)if(RCIF=1) break ;/* 等待接收數(shù)據(jù) */recek=RCREG ;/* 讀取接收數(shù)據(jù) */ if(OERR=1) /* 如果有溢出錯(cuò)誤 ,則處理 */CREN=;0CREN=;1 r

17、ecek=recek&0x0F ;/* 屏蔽掉高位 , 防止干擾 */CREN=;0display() ; /* 顯示接收的數(shù)據(jù) */for(i=65535 ; -i ; )continue ;for(i=65535 ;-i ; )continue ; /* 給予一定時(shí)間的延時(shí),再進(jìn)行下一輪接收 */ 8.7 單片機(jī)與PC機(jī)通信1 PC 機(jī)編程PC采用Toubr C 進(jìn)行編寫。程序如下:#include<stdio.h>#define port 0x3f8/* 利用串口 1 進(jìn)行通信 */int ch15 ;main ()int a ;int i , j ;int b6=8

18、8,15,38,26,20,0;char c ;clrscr();outportb(port+3, 0x80) ;/* 準(zhǔn)備設(shè)置波特率 */outportb(port, 0x0C) ;/* 波特率設(shè)置為 9600bps*/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ù)位 */for(;)printf("ttsend data or receive data: (s or r?)nnn") c=getchar() ; switch(c) case 'S': while(!(inportb(port+5)&0x20)outportb(port,0x01) ;for(i=0;i<6 ;i+)a=bi ;case 's':; /* 發(fā)送

溫馨提示

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

評(píng)論

0/150

提交評(píng)論