【正文】
所組譯的機(jī)器碼程序通常比較大,且組譯軟件通常需要額外購(gòu)買(mǎi)。 /*定義一個(gè)數(shù)組存儲(chǔ)發(fā)送數(shù)據(jù) */ unsigned char k, data。 SSPSTAT=0xC0。k8。 /*選擇異步高速方式傳輸 8 位數(shù)據(jù) */ RCSTA=0X80。 /*啟動(dòng)發(fā)送 */ do { 。 /*準(zhǔn)備鎖存 */ for(k=0。 /*查得顯示的段碼 */ SPILED(data)。 /*給數(shù)組賦初值 */ sciint()。 /*接收數(shù)據(jù)允許 */ for(k=0。 } /*等待寫(xiě)入完成 */ while(1){ if(RCIF==1) break。 } } include /*該程序?qū)崿F(xiàn)單片機(jī)雙機(jī)異步通信功能,該程 序是接收部分,并把接收的數(shù)據(jù)顯示在 4個(gè) LED 上 */ /***********************/SCI 部件初始化子程序 /***************************/ void sciint() { SPBRG=0X19。 TRISC7=1。 SSPIF=0。k++){ data=rece[k]。 /*最后給一個(gè)鎖存信號(hào),代表顯示任務(wù)完成 */ } /********************/接收主程序 /****************************/ jsmain() { SPIINIT()。 /*接收允許 */ TXEN=1。 } /*等待接收數(shù)據(jù) */ rece[k]=RCREG。 /*顯示接收的數(shù)據(jù) */ while(1) { 。 軟件調(diào)試 46 輸入一定常數(shù),看 LED 的顯示情況。 6. 附錄 32148U 2 : ALM 35 856748U 2 : BLM 35 832148U 3 : ALM 35 856748U 3 : BLM 35 8R110 kR210 kR310 kR410 kR510 kR610 kR710 kR810 kR910 kR 1 010 kR 1 110 kR V 11k 47 R A 0/ A N 02R A 1/ A N 13R A 2/ A N 2/ V R E F / C V R E F4R A 4/ T 0CK I /C1O U T6R A 5/ A N 4/ S S /C2 O U T7R E 0/ A N 5 / R D8R E 1/ A N 6 / W R9R E 2/ A N 7 / C S10O S C 1/ C LK I N13O S C 2/ C LK O U T14R C 1/ T 1O S I /CC P 216R C 2/ C C P 117R C 3/ S C K / S C L18R D 0/ P S P 019R D 1/ P S P 120R B 7/ P G D40R B 6/ P G C39R B 538R B 437R B 3/ P G M36R B 235R B 134R B 0/ I N T33R D 7/ P S P 730R D 6/ P S P 629R D 5/ P S P 528R D 4/ P S P 427R D 3/ P S P 322R D 2/ P S P 221R C 7/ R X /D T26R C 6/ T X /C K25R C 5/ S D O24R C 4/ S D I /S D A23R A 3/ A N 3/ V R E F +5R C 0/ T 1O S O /T 1CK I15M C LR/V pp /T H V1U3P I C 16 F 87 7 AX2C R Y S T A LC81nFC91nFR 1 710 kC 1 01nF (電路圖) 7.參考文獻(xiàn) [1].譚浩強(qiáng) 著 .C 程序設(shè)計(jì)(第三版) . 北京:清華大學(xué)出版社, 2020. [2].王昊天 李海濤 王志強(qiáng) 等編著 . PIC 單片機(jī)原理與應(yīng)用 . 北京:機(jī)械工業(yè)出版社, 2020. [3].沈任遠(yuǎn) 吳勇 主編 . 常用電子元器件簡(jiǎn)明手冊(cè) . 北京 : 機(jī)械工業(yè)出版社, 2020. [4].杜偉略 主編 . 80C51 單片機(jī)及接口技術(shù) . 北京:化學(xué)工業(yè)出版社, 2020. [5].李榮正 劉啟中 陳學(xué)軍 . PIC 單片機(jī)原理及應(yīng)用 [M]. 北京 : 北京航空航天大學(xué)出版社 ,2020. [6].鄭國(guó)平 主編 . 模擬電子技術(shù) . 北京: 清華大學(xué)出版社 , 2020. [7].于曉平 主編 . 數(shù)字電子技術(shù) . 北京: 清華大學(xué)出版社 , 2020. [8].趙巧娥 主編 . 自動(dòng)檢測(cè)與傳感器技術(shù) .北京:中國(guó)電力出版社, 2020. [9].陸應(yīng)華 主編 . 電子系統(tǒng)設(shè)計(jì)教程 . 北京: 國(guó)防工業(yè)出版社 , 2020. [10].王彥朋 主編 . 大學(xué)生電子設(shè)計(jì)與應(yīng)用 . 北京: 中國(guó)電力出版社 , 2020. [11].黃永定 主編 . 電子實(shí)驗(yàn)綜合實(shí)訓(xùn)教程 . 北京: 機(jī)械工業(yè)出版社 , 2020. [12].侯建軍 等 主編 . 電子技術(shù)基礎(chǔ)實(shí)驗(yàn)、綜合設(shè)計(jì)實(shí)驗(yàn)與課程設(shè)計(jì) . 北京: 高等教育出版社 , 2020. 。 主機(jī)發(fā)送指定數(shù)據(jù),從機(jī)接收,檢查 LED 顯示是否一致,如果不一致,再檢查 寄存器內(nèi)容是否接收到數(shù)據(jù)。 檢測(cè)當(dāng)敏感元件變化時(shí) A/D 轉(zhuǎn)換電路電壓是否有變化。 /*發(fā)送接收到的數(shù)據(jù) */ while(1){ if(TXIF==1) break。k4。 /*SCI 部件初始化 */ di()。 /*查得顯示的段碼 */ SPILED(data)。 /*準(zhǔn)備鎖存 */ for(k=0。 /*啟動(dòng)發(fā)送 */ do { 。 /*異步高速傳輸 */ RCSTA=0X80。 /*讀響應(yīng)字節(jié),清 RCIF*/ } display()。k++){ TXREG=tran[k]。 /*中斷禁止 */ TXEN=1。 /*最后給一個(gè)鎖存信號(hào),代表顯示任務(wù)完成 */ } /***********************/發(fā)射主程序 /********************************/ fsmain () 44 { SPIINIT()。k++) { data=tran[k]。 SSPIF=0。 TRISC7=1。 } } /************************/SCI 部件初始化子程序 /**********************/ void sciint() { SPBRG=0X19。 /*SDO 引腳為輸出, SCK 引腳為輸出 */ TRISA5=0。 /*不帶小數(shù)點(diǎn)的顯示段碼表 */ union adres {int y1; unsigned char adre[2]; 開(kāi)始 清除 ADIF 標(biāo)志位 讀取并存儲(chǔ) A/D 轉(zhuǎn)換器轉(zhuǎn)換結(jié)果 壓強(qiáng) 250psi 報(bào)警子程序 輸出壓強(qiáng)和顯示 等待下一次 A/D 轉(zhuǎn)換 延時(shí)子程序 Y N 41 }adresult; //定義一個(gè)共用體,用于存放 A/D 轉(zhuǎn)換的結(jié)果 unsigned char i; unsigned int j; //主程序 main() { void delay(); void interrupt adint(void); void SPIINIT(); void sciint(); void SPILED(data); void display(); fsmain (); void sciint(); void display(); jsmain(); adinitial(); //A/D轉(zhuǎn)換初始化 initial(); //系統(tǒng)各 I/O 口初始化 ei(); //總中斷允許 ADGO=1; //啟動(dòng) A/D 轉(zhuǎn)換 while(1) { ; } //等待中斷,在中斷中循環(huán)檢測(cè)外部電壓 } 4. 2. 2 各子程序 /****************/系統(tǒng)各 I/O 口初始化子程序 /**************/ void initial() { TRISD=0X00; //D口為輸出 i=0x00; } /********************/A/D 轉(zhuǎn)化初始化子程序 /*****************/ void adinitial() { ADCON0=0x51; //選擇 A/D 通道為 RA2,打開(kāi) A/D 轉(zhuǎn)換器 //在工作狀態(tài),且使 A/D 轉(zhuǎn)換時(shí)鐘為 8tosc ADCON1=0X80; //轉(zhuǎn)換結(jié)果右移,及 ADRESH 寄存器的高 6 位為 0 //且把 RA2 口設(shè)置為模擬量輸入方式 PIE1=0X00; PIE2=0X00; 42 ADIE=1; //A/D轉(zhuǎn)換中斷允許 PEIE=1; //外圍中斷允許 TRISA2=1; //設(shè)置 RA2 為輸入方式 } /*********************/延時(shí)子程序 /****************************/ void delay() { for(j=5535; j; ) continue; } //報(bào)警子程序 void alarm() { i=i^0xFF; //通過(guò)異或方式每次把 i 的各位值取反 PORTD=i; //D口輸出 i 的值 } /*******************/中斷服務(wù)程序 /*****************************/ void interrupt adint(void) { ADIF=0; //清除中斷標(biāo)志 [0]=ADRESL; [1]=ADRESH; //讀取并存儲(chǔ) A/D 轉(zhuǎn)換結(jié)果, A/D 轉(zhuǎn)換的結(jié)果通過(guò)共 //用體的形式放入了變量 y1 中 if(0x200) { alarm(); //如果輸入的模擬量大于 250psi(對(duì)應(yīng)數(shù)字量 //0X200h),則調(diào)用報(bào)警子程序 delay(); //調(diào)用延時(shí)子程序,使電壓檢測(cè)不要過(guò)于頻繁 } else PORTD=0XF0 ; //如果輸入的模擬量小于 250psi,則與 D 口相連的 ADGO=1; //啟動(dòng)下一次 A/D 轉(zhuǎn)換 } /*****************通訊部分 ********************/ /*該程序?qū)崿F(xiàn)單片機(jī)雙機(jī)異步通信功能,該程序是發(fā)送部分 */ /*****************/spi 顯示初始化子程序 /**************************/ void SPIINIT() { PIR1=0。 PIC16F877 指令摘要 PIC 是采用 RISC( Reduced Instruction Set Computing,精簡(jiǎn)指令集),與 8051系列采用的 CISC( Complicated Instruction Set Computing,復(fù)雜指令集)不同,PIC16F877 所有指令指有 35 個(gè), 8051 高達(dá) 111 個(gè)指令,詳細(xì)指令說(shuō)明請(qǐng)參閱產(chǎn)品資料手冊(cè)。當(dāng)整體系統(tǒng)需要多單片機(jī)時(shí),彼此可以 經(jīng)由并列傳輸接口來(lái)快速傳輸資料。 PIC 是 8 位的單片機(jī),以接腳特性分組,每組盡 量湊滿 8 支接腳,并將I/O 命名為 PORTA(RA0~RA5)、 PORTB(RB0~RB7)、 PORTC(RC0~RC7)、PORTD(RD0~RD7)和 PORTE(RE0~RE2)等,各分組接口特性說(shuō)明如下: PORTA PIC16F877 的 PORTA 總共有 6 個(gè)位 (RA0~RA5), PORTA 的接腳可作為數(shù)字輸出輸入端口,而系統(tǒng)重置后, PORTA 自動(dòng)成為模擬輸入狀態(tài),可讀取模擬輸入訊號(hào)。 2. PIC16F877 基本電路 PIC 振蕩頻率電路 單片機(jī)振蕩電路與整體系統(tǒng)工作速度有直接的關(guān)系,例如同步 ∕異步串行傳輸、定時(shí)器等,都與振蕩頻率有關(guān),不同系列單片機(jī)有不同振蕩頻率,根據(jù)產(chǎn)品資料手冊(cè),PIC16F877振蕩頻率最高可到 20MHz;在圖 1中,振蕩電路接于 Pin13(OSC1/CLKIN)與 Pin14(OSC2/CLKOUT),而振蕩電路有以下四種形式: LP:使用低功率振蕩晶體 (Low Power Crystal) XT:使用振蕩器 ∕諧振器 (Crystal/Resonator) HS:使用高速振蕩器 (High Speed Crystal/Resonator) RC:使用電阻 ∕電容 (Resister/C