第5章 PIC16F877的外圍功能模塊
5.1.2 簡單應(yīng)用實例
該例用于令與PORTD口相連的8個發(fā)光二極管前4個點亮,后4個熄滅。在調(diào)試程序前,應(yīng)使與PORTD口相連的8位拔碼開關(guān)拔向相應(yīng)的位置。
例5.1 PORTD輸出
#include main() { TRISD=0X00; /*TRISD寄存器被賦值,PORTD每一位都為輸出*/ while(1); /*循環(huán)執(zhí)行點亮發(fā)光二極管的語句*/ { PORTD=0XF0; /*向PORTD送數(shù)據(jù),點亮LED(由實驗?zāi)0?/ /*的設(shè)計決定相應(yīng)位置低時LED點亮)。*/ } } 5.2.1 MSSP模塊SPI方式功能簡介 下面是一段簡單的SPI初始化例程,用于利用SPI工作方式輸出數(shù)據(jù)的場合。 例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)在實驗板上調(diào)試通過的一個程序,可作為用戶編制其它程序的參考。 #include /*該程序用于在8個LED上依次顯示1~8等8個字符*/ static volatile int table[20]={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)) /*絕對尋址位操作指令*/ static bit PORTA_5 @ PORTAIT(PORTA,5); /*spi初始化子程序*/ void SPIINIT() { PIR1=0; SSPCON=0x30; /* SSPEN=1;CKP=0 , FOSC/4 */ SSPSTAT=0xC0; TRISC=0x00; /*SDO引腳為輸出,SCK引腳為輸出*/ } /*系統(tǒng)各輸入輸出口初始化子程序*/ void initial() { TRISA=0x00; /*A口設(shè)置為輸出*/ INTCON=0x00; /*關(guān)閉所有中斷*/ PORTA_5=0; /*LACK送低電平,為鎖存做準(zhǔn)備*/ } /*SPI發(fā)送子程序*/ void SPILED(int data) { SSPBUF=data; /*啟動發(fā)送*/ do { ; }while(SSPIF==0); /*等待發(fā)送完畢*/ SSPIF=0; /*清除SSPIF標(biāo)志*/ } /*主程序*/ main() { unsigned I; initial(); /*系統(tǒng)初始化*/ SPIINIT() ; /*SPI初始化*/ for(i=8;i>0;i--) /*連續(xù)發(fā)送8個數(shù)據(jù)*/ { data=table[i]; /*通過數(shù)組的轉(zhuǎn)換獲得待顯示的段碼*/ SPILED(data); /*發(fā)送顯示段碼顯示*/ } PORTA_5=1; /*最后給鎖存信號,代表顯示任務(wù)完成*/ } 5.3.3 程序清單 下面給出已經(jīng)在實驗板上調(diào)試通過的程序,可作為用戶編制其它程序的參考。有關(guān)顯示部分的SPI初始化,請讀者參考5.2節(jié)。 #include /*該程序用于按下相應(yīng)的鍵時,在第一個8段LED上顯示相應(yīng)的1~4的字符*/ #define PORTAIT(adr,bit) ((unsigned)(&adr)*8+(bit)) /*絕對尋址位操作指令*/ static bit PORTA_5 @ PORTAIT(PORTA,5); #define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit)) /*絕對尋址位操作指令*/ 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 int I; unsigned char j; 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; } /*軟件延時子程序*/ void DELAY() { for(i = 6553; --i ;) continue; } /*鍵掃描子程序*/ int KEYSCAN() { while(1) { if ((PORTB_5==0)||(PORTB_4==0)) break; } /*等待有鍵按下*/ DELAY(); /*軟件延時*/ if ((PORTB_5==0)||(PORTB_4==0)) KEYSERVE(); /*如果仍有鍵按下,則調(diào)用鍵服務(wù)子程序*/ else j=0x00; /*如果為干擾,則令返回值為0*/ return(j); } /*鍵服務(wù)子程序*/ int KEYSERVE() { 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;/*等待鍵盤松開*/ } return(j); } /*SPI發(fā)送子程序*/ void SPILED(int data) { SSPBUF=data; /*啟動發(fā)送*/ do { ; }while(SSPIF==0); /*等待發(fā)送完畢 SSPIF=0; } /*主程序*/ main() { static int table[20]={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) {
上一篇:PIC單片機車載儀表帶CAN總線通訊源代碼
下一篇:學(xué)習(xí)pic單片機經(jīng)驗
推薦閱讀
史海拾趣
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- ICDIA 2025 創(chuàng)芯展圓滿落幕!
- 中興微電子亮相ICDIA 2025,共話RISC-V架構(gòu)推動AI算力普惠化進程
- 動力電池“三國殺”:中企提前鎖定勝局,日韓廠商集體失守
- 研究人員開發(fā)出人工智能雷達技術(shù) 可用于高分辨率3D城市制圖
- 上半年動力電池TOP15:寧德時代和比亞迪裝車近200GWh 兩家公司新上榜
- 半年砸下數(shù)千億元!“并購”浪潮下,汽車芯片大戰(zhàn)再起風(fēng)云
- 奇瑞人形機器人9月開售并將面向個人用戶,機器人時代該來了嗎?
- 華為李文廣:華為智能駕駛規(guī)劃曝光,加速追趕特斯拉
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-下
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-中
- Mouser 新用戶大禮包:你購物,我5折返E金幣!
- TI“無線”風(fēng)光可穿戴現(xiàn)場培訓(xùn)直播,誠邀參與,預(yù)注冊贏好禮
- 意法半導(dǎo)體工業(yè)峰會2019( 深圳 )
- 免費申請評測:和小伙伴們一起暢玩STM32F769I
- 免費測評TI LAUNCHXL-CC2650
- 參與“開關(guān)電源組件選擇”課程培訓(xùn),三重好禮精彩送不停!
- 【EEWORLD第六屆社區(qū)明星人物】8月明星人物
- 據(jù)說,來挑戰(zhàn)的都是“老司機”,TE答題排位賽火熱進行中,不服來戰(zhàn)!
- 新用戶限時福利:e絡(luò)盟商城迎新季,全場包郵+打折~買一只電阻也包郵!
- 閱讀 TI工業(yè)應(yīng)用方案(電器、電力傳輸)精彩專題,挑戰(zhàn)你的記憶力!好禮相送
- 基于CORTEX-M3的多機通信網(wǎng)絡(luò)的設(shè)計與實現(xiàn)
- 創(chuàng)新技術(shù)論壇和法規(guī)峰會如約而至,緊跟高端醫(yī)療設(shè)備創(chuàng)新
- STM32的IO口的8種配置(GPIO)
- STM32F10x的復(fù)位及時鐘控制
- 一種基于μC/OS-III及STM32的多功能控制器
- openocd 命令行燒寫ARM裸機程序 problems and solutions
- 麻省理工新型AI技術(shù) 融合了語音和物體識別技術(shù)
- OK6410開發(fā)板uboot燒寫
- OK6410裸機匯編:1th_led
- OK6410裸機學(xué)習(xí)第二天:2th_leds