PIC18F458單片機(jī)休眠狀態(tài)工作方式與激活
/*該程序?qū)崿F(xiàn)PIC18F458的休眠狀態(tài)工作方式,并由實(shí)驗(yàn)板上的按鍵產(chǎn)生"電平變化中斷"將其從休眠狀態(tài)中激活。休眠與激活的狀態(tài)由與D口相連的8個(gè)LED顯示。休眠時(shí)高4個(gè)
LED發(fā)光,低4個(gè)LED熄滅; 激活以后高4個(gè)LED熄滅,低4個(gè)LED發(fā)光*/
#include"p18f458.h"
unsignedlong i;
/*系統(tǒng)初始化子程序*/
void initial()
{
INTCON=0x08;/*全局中斷禁止,"電平變化中斷"只執(zhí)行喚醒功能*/
/*清除B口電平變化中斷標(biāo)志*/
TRISA=0x00;/*A口設(shè)置為輸出*/
TRISB=0XF0;/*RB1輸出,RB4輸入*/
TRISD=0X00;/*D口為輸出*/
TRISE=0x00;/*E口設(shè)置為輸出*/
PORTBbits.RB1=0;
PORTAbits.RA3=0;
PORTE=0;/*將K1,K2,K3,K4四條列線置0*/
PORTB=PORTB;/*讀PORTB的值,鎖存舊值,也為“電平變化
中斷”作準(zhǔn)備*/
}
void SLEEP()
{
_asm
SLEEP /*進(jìn)入休眠狀態(tài)*/
_endasm
}
/*主程序*/
main ()
{
initial();/*初始化*/
PORTD=0X0F;/*高4個(gè)LED燈亮*/
SLEEP();/*單片機(jī)開始進(jìn)入休眠狀態(tài)*/
PORTD=0XF0;/*激活后,低4個(gè)LED燈亮*/
while(1)
{
;
}
}
完畢!
-----------匯編語言編寫的PIC18F458單片機(jī)休眠狀態(tài)工作方式與激活-----------------------
;該程序?qū)崿F(xiàn)PIC18F458的休眠工作方式,
;http://www.51hei.com已用本站單片機(jī)實(shí)驗(yàn)板測試通過本程序
;并由實(shí)驗(yàn)板上的按鍵產(chǎn)生"電平變化中斷"將其從休眠狀態(tài)中激活.
LISTP=18F458
INCLUDE"P18F458.INC"
COUNTEQU0X20
ORG0X00
GOTOMAIN
ORG0X30
;************顯示子程序***************
DISPLAY
CLRFPORTA
MOVWFSSPBUF
LOOPNOP
BTFSS PIR1,SSPIF
GOTO LOOP
NOP
BCFPIR1,SSPIF
BSFPORTA,5;詳細(xì)程序語句請(qǐng)參考3. 1. 3節(jié)
RETURN
;**********初始化子程序*************
INITIAL
BCFINTCON,GIE;全局中斷禁止,"電平變化中斷"只執(zhí)行喚醒功能
BSFINTCON,RBIE;PORTB口電平變化中斷允許
BCFINTCON,RBIF;清除B口電平變化中斷標(biāo)志
BCFTRISA,5 ;置RA5為輸出方式,以輸出鎖存信號(hào)
BCFTRISB,1
BCFTRISA,3
BCFTRISE,0
BCFTRISE,1
BSFTRISB,4 ;設(shè)置與鍵盤有關(guān)的各口的輸入輸出方式
BCFTRISC,5
BCFTRISC,3 ;設(shè)置SCK與SDO為輸出方式
MOVLW0XC0
MOVWFSSPSTAT ;設(shè)置SSPSTAT寄存器
MOVLW0X30
MOVWFSSPCON1 ;設(shè)置SPI的控制方式,允許SSP方式,并且時(shí)鐘下降沿
;發(fā)送,與"74HC595當(dāng)其SCLK從低到高平跳變時(shí),串行
;輸入數(shù)據(jù)(DI)移入寄存器"的特點(diǎn)相對(duì)應(yīng)
BCFPORTB,1
BCFPORTA,3
BCFPORTE,0
BCFPORTE,1;K1,K2,K3,K4四條列線置0, 為電平變化中斷的產(chǎn)生
;創(chuàng)造初始條件
RETURN ;返回
;****************************************
MAINNOP
CALLINITIAL;初始化
MOVLW0X08
MOVWFCOUNT
MOVLW0XFF;"FF"為"DARK"字符的顯示段碼
NEXT1
CALLDISPLAY;在休眠之前使8各LED全顯示"DARK"
DECFCOUNT,1
BTFSSSTATUS,Z
GOTONEXT1
SLEEP;PIC16F877進(jìn)入"休眠工作方式"
NOP
MOVLW0X08
MOVWFCOUNT
MOVLW0X90;"90"為"9"的顯示段碼
NEXT
CALLDISPLAY;休眠喚醒之后顯示8個(gè)字符"9"
DECFCOUNT,1
BTFSSSTATUS,Z
GOTONEXT
NOP
END
評(píng)論