已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章 PIC16F877的外圍功能模塊5.1.2 簡(jiǎn)單應(yīng)用實(shí)例該例用于令與PORTD口相連的8個(gè)發(fā)光二極管前4個(gè)點(diǎn)亮,后4個(gè)熄滅。在調(diào)試程序前,應(yīng)使與PORTD口相連的8位拔碼開(kāi)關(guān)拔向相應(yīng)的位置。例5.1 PORTD輸出#includemain()TRISD=0X00;/*TRISD寄存器被賦值,PORTD每一位都為輸出*/while(1);/*循環(huán)執(zhí)行點(diǎn)亮發(fā)光二極管的語(yǔ)句*/PORTD=0XF0;/*向PORTD送數(shù)據(jù),點(diǎn)亮LED(由實(shí)驗(yàn)?zāi)0?/*的設(shè)計(jì)決定相應(yīng)位置低時(shí)LED點(diǎn)亮)。*/ 5.2.1 MSSP模塊SPI方式功能簡(jiǎn)介下面是一段簡(jiǎn)單的SPI初始化例程,用于利用SPI工作方式輸出數(shù)據(jù)的場(chǎng)合。例5.2 SPI初始化程序/*spi初始化子程序*/void SPIINIT()PIR1=0;/*清除SPI中斷標(biāo)志*/SSPCON=0x30;/* SSPEN=1;CKP=0 , FOSC/4 */SSPSTAT=0xC0;TRISC=0x00;/*SDO引腳為輸出,SCK引腳為輸出*/5.2.3 程序清單下面給出已經(jīng)在實(shí)驗(yàn)板上調(diào)試通過(guò)的一個(gè)程序,可作為用戶編制其它程序的參考。#include/*該程序用于在8個(gè)LED上依次顯示18等8個(gè)字符*/static volatile int table20=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff;volatile unsigned char data; #define PORTAIT(adr,bit) (unsigned)(&adr)*8+(bit)/*絕對(duì)尋址位操作指令*/staticbit PORTA_5 PORTAIT(PORTA,5); /*spi初始化子程序*/voidSPIINIT()PIR1=0;SSPCON=0x30;/* SSPEN=1;CKP=0 , FOSC/4 */SSPSTAT=0xC0;TRISC=0x00;/*SDO引腳為輸出,SCK引腳為輸出*/*系統(tǒng)各輸入輸出口初始化子程序*/voidinitial()TRISA=0x00;/*A口設(shè)置為輸出*/INTCON=0x00;/*關(guān)閉所有中斷*/PORTA_5=0;/*LACK送低電平,為鎖存做準(zhǔn)備*/*SPI發(fā)送子程序*/void SPILED(int data)SSPBUF=data;/*啟動(dòng)發(fā)送*/do;while(SSPIF=0);/*等待發(fā)送完畢*/SSPIF=0;/*清除SSPIF標(biāo)志*/*主程序*/main()unsignedI;initial();/*系統(tǒng)初始化*/SPIINIT();/*SPI初始化*/ for(i=8;i0;i-)/*連續(xù)發(fā)送8個(gè)數(shù)據(jù)*/ data=tablei;/*通過(guò)數(shù)組的轉(zhuǎn)換獲得待顯示的段碼*/SPILED(data);/*發(fā)送顯示段碼顯示*/ PORTA_5=1;/*最后給鎖存信號(hào),代表顯示任務(wù)完成*/5.3.3 程序清單下面給出已經(jīng)在實(shí)驗(yàn)板上調(diào)試通過(guò)的程序,可作為用戶編制其它程序的參考。有關(guān)顯示部分的SPI初始化,請(qǐng)讀者參考5.2節(jié)。#include/*該程序用于按下相應(yīng)的鍵時(shí),在第一個(gè)8段LED上顯示相應(yīng)的14的字符*/#define PORTAIT(adr,bit) (unsigned)(&adr)*8+(bit)/*絕對(duì)尋址位操作指令*/static bit PORTA_5 PORTAIT(PORTA,5);#definePORTBIT(adr, bit)(unsigned)(&adr)*8+(bit) /*絕對(duì)尋址位操作指令*/static bit PORTB_5 PORTBIT(PORTB,5);static bit PORTB_4 PORTBIT(PORTB,4);static bit PORTB_1 PORTBIT(PORTB,1);static bit PORTB_2 PORTBIT(PORTB,2);unsigned intI;unsigned charj;int data; /*spi初始化子程序*/void SPIINIT()PIR1=0;SSPCON=0x30;SSPSTAT=0xC0;TRISC=0xD7;/*SDO引腳為輸出,SCK引腳為輸出*/*系統(tǒng)各輸入輸出口初始化子程序*/void initial()TRISA=0xDF;TRISB=0XF0;/*設(shè)置與鍵盤有關(guān)的各口的數(shù)據(jù)方向*/INTCON=0x00;/*關(guān)閉所有中斷*/data=0X00;/*待顯示的寄存器賦初值*/PORTB=0X00;/*RB1 RB2 先送低電平*/j=0;/*軟件延時(shí)子程序*/voidDELAY()for(i = 6553; -i ;)continue;/*鍵掃描子程序*/intKEYSCAN()while(1)if (PORTB_5=0)|(PORTB_4=0)break;/*等待有鍵按下*/DELAY();/*軟件延時(shí)*/if (PORTB_5=0)|(PORTB_4=0)KEYSERVE();/*如果仍有鍵按下,則調(diào)用鍵服務(wù)子程序*/elsej=0x00;/*如果為干擾,則令返回值為0*/return(j);/*鍵服務(wù)子程序*/intKEYSERVE()PORTB=0XFD;if(PORTB_5=0)j=0X01;if(PORTB_4=0)j=0X03;PORTB=0XFB;if(PORTB_5=0)j=0X02;if(PORTB_4=0)j=0X04;/*以上根據(jù)按下的鍵確定相應(yīng)的鍵值*/PORTB=0X00;/*恢復(fù)PORTB的值*/while(1)if(PORTB_5=1)&(PORTB_4=1) break;/*等待鍵盤松開(kāi)*/return(j);/*SPI發(fā)送子程序*/void SPILED(int data)SSPBUF=data;/*啟動(dòng)發(fā)送*/do ;while(SSPIF=0);/*等待發(fā)送完畢SSPIF=0;/*主程序*/main()static int table20=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff;initial();/*系統(tǒng)初始化*/SPIINIT();/*SPI初始化*/while(1)KEYSCAN();if(j!=0)/*如果j=0,證明先前的按鍵為干擾,則不予顯示*/data=tablej;PORTA_5=0;/*LACK信號(hào)清0,為鎖存做準(zhǔn)備*/SPILED(data);PORTA_5=1;/*最后給鎖存信號(hào),代表顯示任務(wù)完成*/ 5.4.1 PORTB端口“電平變化中斷”簡(jiǎn)介例5.3 PORTB口“電平變化中斷”初始化子程序/*B口“電平變化中斷”初始化子程序*/void PORTBINT( )TRISB=0XF0;/*設(shè)置相應(yīng)口的輸入輸出方式*/OPTION=0x7F;/*B口弱上拉有效*/PORTB=0X00;/*RB1,RB2 先送低電平*/RBIE=1;/*B口變位中斷允許 */PORTB=PORTB;/*讀B口的值,以鎖存舊值,為變位中斷創(chuàng)造條件*/5.4.3 程序清單下面給出一個(gè)調(diào)試通過(guò)的例程,以供讀者參考。有關(guān)顯示的部分請(qǐng)讀者參考前面章節(jié)。該程序中寄存器的位都用頭文件中定義的位,如RB5表示PORTB的第5位,而不像前面幾節(jié)那樣自己定義。#include/*該程序用于通過(guò)PORTB的電平變化中斷進(jìn)行鍵盤的識(shí)別。*/*程序設(shè)置一個(gè)鍵值寄存器j,當(dāng)按下S9鍵時(shí)j=1,按下S11鍵時(shí) */*j=2,按下S10鍵時(shí),j=3,按下S12鍵時(shí)j=4*/unsigned chardata;unsigned intI;unsigned charj;const char table20=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff;/*B口“電平變化中斷”初始化子程序*/void PORTBINT()TRISB=0XF0;/*設(shè)置相應(yīng)口的輸入輸出方式*/OPTION=0x7F;PORTB=0X00;/*RB1, RB2 先送低電平*/RBIE=1;/*B口變位中斷允許 */PORTB=PORTB;/*讀B口的值,為變位中斷創(chuàng)造條件*/*spi初始化子程序*/void SPIINIT()PIR1=0;SSPCON=0x30;SSPSTAT=0xC0;TRISC=0xD7;/*SDO引腳為輸出,SCK引腳為輸出*/*系統(tǒng)各輸入輸出口初始化子程序*/voidinitial()TRISA=0xDF;INTCON=0x00;/*關(guān)閉所有中斷*/data=0X00;/*待顯示的寄存器賦初值*/*鍵服務(wù)子程序*/voidKEYSERVE()PORTB=0XFD;if(RB5=0)j=0X01;if(RB4=0)j=0X03;PORTB=0XFB;if(RB5=0)j=0X02;if(RB4=0)j=0X04;/*以上通過(guò)逐行逐列掃描,以確定是何鍵按下*/PORTB=0X00;/*恢復(fù)PORTB的值*/*軟件延時(shí)子程序*/void DELAY()for(i = 6553; -i ;)continue;/*SPI發(fā)送子程序*/void SPILED(int data)SSPBUF=data;/*啟動(dòng)發(fā)送*/do ;while(SSPIF=0);SSPIF=0;voidIDEDIS()KEYSERVE();/*進(jìn)行鍵盤的識(shí)別*/data=tablej;/*獲得需要送出顯示的段碼*/RA5=0;/*LACK信號(hào)清0,為鎖存做準(zhǔn)備*/SPILED(data);RA5=1;/*最后給一個(gè)鎖存信號(hào),代表顯示任務(wù)完成*/*中斷服務(wù)程序*/voidinterruptkeyint(void)DELAY();/*軟件延時(shí)*/if (RB5=0)|(RB4=0)/*該語(yǔ)句除了能夠確認(rèn)按鍵是否為干擾外,*/*還可以屏蔽一次鍵松開(kāi)時(shí)引起的中斷*/IDEDIS();/*鍵識(shí)別和顯示模塊*/PORTB=PORTB;/*讀B口的值,改變中斷發(fā)生的條件,避免鍵*/*一直按下時(shí),連續(xù)進(jìn)行鍵識(shí)別*/RBIF=0;/*鍵掃描時(shí)可能會(huì)產(chǎn)生電平變化而使RBIF*/*置1,再清除一次RBIF以避免額外中斷*/main()initial();/*系統(tǒng)初始化*/PORTBINT();/*B口變位中斷初始化*/SPIINIT();/*利用SPI顯示初始化*/ei();/*總中斷允許*/while(1);/*等待中斷*/5.5.2 程序清單下面給出一個(gè)調(diào)試通過(guò)的例程,可作為讀者的參考。調(diào)試該程序把模板J7上的短路跳針拔下,以免產(chǎn)生沖突。#includevolatile unsigned char data;/*spi初始化子程序*/ void SPIINIT()PIR1=0;SSPCON=0x30;/* SSPEN=1;CKP=0 , FOSC/4 */SSPSTAT=0xC0;TRISC=0x10;/*SDI引腳為輸入,SCK引腳為輸出*/*系統(tǒng)各輸入輸出口初始化子程序*/voidinitial()TRISA=0x00;TRISD=0x00;/*D口為輸出方式*/INTCON=0x00;/*關(guān)閉所有中斷*/*SPI接收子程序*/ int SPIIN()RA4=0;/*74HC165并行置數(shù)使能,將8位開(kāi)關(guān)量置入器件*/* (LOAD為低電平時(shí)8位并行數(shù)據(jù)置入74HC165)*/RA4=1;/*74HC165移位置數(shù)使能(LOAD為高電平時(shí)芯*/*片才能串行工作)*/SSPBUF=0;/*啟動(dòng)SPI,此操作只用于清除SSPSTAT的*BF位,因此W中的實(shí)際數(shù)據(jù)無(wú)關(guān)緊要*/do ;while(SSPIF=0);/*查詢數(shù)據(jù)接收完畢否?*/SSPIF=0;data=SSPBUF;return(data);/*返回接收到的數(shù)據(jù)*/*把SPI接收的數(shù)據(jù)通過(guò)D口顯示在8個(gè)發(fā)光二極管上的子程序*/void SPIOUT(int data)PORTD=data;/*主程序*/main( )initial();/*系統(tǒng)初始化*/SPIINIT();/*SPI初始化*/ while(1) SPIIN();/*SPI接收外部數(shù)據(jù)*/SPIOUT(data);/*送出數(shù)據(jù)顯示*/ 5.6.1 CCP模塊的PWM工作方式簡(jiǎn)介 下面給出一個(gè)CCP模塊設(shè)置為PWM操作時(shí)的初始化程序例5.4 CCP模塊設(shè)置為PWM方式時(shí)的初始化程序/*CCP1模塊的PWM工作方式初始化子程序*/void CCP1INIT() CCPR1L=0X7F; CCP1CON=0X3C;/*設(shè)置CCP1模塊為PWM工作方式,且其工作循環(huán)*的低2位為11,高8位為01111111=7F*/ INTCON=0X00;/*禁止總中斷和外圍中斷*/ PR2=0XFF;/*設(shè)置PWM的工作周期*/ TRISC=0XFB;/*設(shè)置CCP1引腳為輸出方式*/該初始化子程序設(shè)置CCP1模塊輸出分辨率為10位的PWM波形,且占空比為50%。5.6.3 程序清單下面給出一個(gè)調(diào)試通過(guò)的例程,可作為讀者編制程序的參考。#include/*該程序用于使CCP1模塊產(chǎn)生分辨率為10位的PWM波形,占空比為50%*/*CCP1模塊的PWM工作方式初始化子程序*/void CCP1INIT() CCPR1L=0X7F; CCP1CON=0X3C;/*設(shè)置CCP1模塊為PWM工作方式,且其工作*循環(huán)的低2位為11,高8位為01111111=7F*/ INTCON=0X00;/*禁止總中斷和外圍中斷*/ PR2=0XFF;/*設(shè)置PWM的工作周期*/ TRISC=0XFB;/*設(shè)置CCP1引腳為輸出方式*/*主程序*/main()CCP1INIT();/*CCP1模塊的PWM工作方式初始化*/ T2CON=0X04;/*打開(kāi)TMR2,且使其前分頻為0, *同時(shí)開(kāi)始輸出PWM波形*/do;while(1);/*系統(tǒng)開(kāi)始輸出PWM波形。如果系統(tǒng)是*多任務(wù)的,則可以在此執(zhí)行其它任務(wù),而*不會(huì)影響PWM波形的產(chǎn)生*/5.7.3 應(yīng)用程序2. 程序清單#include/*此程序?qū)崿F(xiàn)看門狗WDT的功能*/unsignedlongI;/*系統(tǒng)初始化子程序*/void initial()OPTION = 0X0F;/*把前分頻器分配給WDT,且分頻倍率為1:128*/TRISD = 0X00;/*D口設(shè)為輸出*/*延時(shí)子程序*/voidDELAY() for(i=19999;-i;)continue;/*主程序*/main ()initial();/*初始化,設(shè)定看門狗的相關(guān)寄存器*/PORTD = 0X00;/*D口送00H,發(fā)光二極管亮*/DELAY();/*給予一定時(shí)間的延時(shí)*/PORTD
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度智慧養(yǎng)老民房管理服務(wù)合同4篇
- 二零二五年度門窗五金件國(guó)際貿(mào)易與物流服務(wù)合同4篇
- 北極生態(tài)環(huán)境解讀模板
- 鋼結(jié)構(gòu)立柱施工方案
- 2025年度個(gè)人醫(yī)療健康保險(xiǎn)分期繳費(fèi)協(xié)議4篇
- 2025年度個(gè)人職業(yè)規(guī)劃服務(wù)合同范本4篇
- 2024年信息化系統(tǒng)管理制度
- 貴州打水井施工方案
- 二零二五年度門類安裝工程材料供應(yīng)與安裝合同4篇
- 2024水泥欠款利息減免談判合同范本3篇
- 《色彩基礎(chǔ)》課程標(biāo)準(zhǔn)
- 人力資源 -人效評(píng)估指導(dǎo)手冊(cè)
- 大疆80分鐘在線測(cè)評(píng)題
- 2023年成都市青白江區(qū)村(社區(qū))“兩委”后備人才考試真題
- 2024中考復(fù)習(xí)必背初中英語(yǔ)單詞詞匯表(蘇教譯林版)
- 《現(xiàn)代根管治療術(shù)》課件
- 肩袖損傷的護(hù)理查房課件
- 2023屆北京市順義區(qū)高三二模數(shù)學(xué)試卷
- 公司差旅費(fèi)報(bào)銷單
- 2021年上海市楊浦區(qū)初三一模語(yǔ)文試卷及參考答案(精校word打印版)
- 八年級(jí)上冊(cè)英語(yǔ)完形填空、閱讀理解100題含參考答案
評(píng)論
0/150
提交評(píng)論