|
//初始化
#include "holychip_define.h"
#include "inital.h"
void inital(void)
{
PORTA=0X00;
PORTB=0X00; //PORT口輸出高低電平設(shè)置 1=高電平,0=低電平
TRISA=0X00; //輸入輸出設(shè)置 1=輸入,0=輸出
TRISB=0XE0; //輸入輸出設(shè)置 1=輸入,0=輸出 0X11100000 PB7,PB6,PB5設(shè)置為輸入
PHCON1=0XFF; //上拉設(shè)置 1=DISABLED PULL-UP ;0=PULL-UP
PHCON =0XFF; //上拉設(shè)置 1=DISABLED PULL-UP ;0=PULL-UP
PDCON1=0XFF; //下拉設(shè)置 1=DISABLED PULL-UP ;0=PULL-UP
PDCON =0XFF; //下拉設(shè)置 1=DISABLED PULL-UP ;0=PULL-UP
ODCON1=0X00; //開漏設(shè)置 0=DISABLED PULL-UP ;1=PULL-UP
ODCON =0X00; //開漏設(shè)置 0=DISABLED PULL-UP ;1=PULL-UP
}
//系統(tǒng)初始化
void sysinitial(void)
{
INTECON=0x00;
OSCCON=0X80;
OPTION=0X80; //Ftimer0 1/2
PCON=0X40; //更改 上下電復(fù)位 禁止看門狗
}
//模式轉(zhuǎn)換
#include "holychip_define.h"
#include "model.h"
void high_frequence_change_to_sleep(void) //高低頻切睡眠
{
// SBIT(OSCCON, 7, LOW);
T0OSCEN=0;
}
void high_frequence_change_to_low_frequence(void) //高頻切低頻
{
// SBIT(OSCCON, 0, HIGH);
SCS=1;
}
void low_frequence_change_to_high_frequence(void) //低頻切高頻
{
// SBIT(OSCCON, 0, LOW);
SCS=0;
}
void low_or_high_frequence_change_to_green(void) //高低頻切綠色模式 T0定時(shí)喚醒
{
OPTION=0X05;
SBIT(OPTION, 5, HIGH); //T0CS=1
// T0CS =1;
T0IF=0; //清T0中斷標(biāo)志
T0IE=1; //使能T0定時(shí)器
T0=0X00; //T0賦初值
asm(sleep)
}
//PB電平變化中斷初始化
#include "holychip_define.h"
#include "PORTB_interrupt_inital.h"
void PORTB_interrupt_inital()
{
TRISB=0XE0; //PORTB端口設(shè)置 0X11100000 PB7,PB6,PB5設(shè)置為輸入
IOCB=0XE0; //使能PORTB端口為電平變化中斷
PBIF=0; // PROTB中斷請(qǐng)求標(biāo)志清零
PBIE=1; //使能PROTB中斷
GIE=1; //使能GIE
}
//脈沖顯示函數(shù)
#include "holychip_define.h"
#include "Pulse_display.h
uS延時(shí)函數(shù)
void DelayUs(unsigned char t)
{
while(--t);
}
mS延時(shí)函數(shù)
void DelayMs(unsigned int t)
{
unsigned char count = 200;
while(t--)
{
while(count--);
}
}
//脈沖顯示子程序
void Pulse_display(void)
{
if(PORTB7==1)
PORTA1=1;
DelayMs(20);
PORTA1=0;
if(PORTB7==0)
PORTA2=1;
DelayMs(20);
PORTA2=0;
if(PORTB6==1)
PORTA3=1;
DelayMs(20);
PORTA3=0;
if(PORTB6==0)
PORTB0=1;
DelayMs(20);
PORTB0=0;
if(PORTB5==1)
PORTB1=1;
DelayMs(20);
PORTB1=0;
if(PORTB5==0)
PORTB2=1;
DelayMs(20);
PORTB2=0;
}
//主函數(shù)
#include "holychip_define.h"
#include "inital.h"
#include "Pulse_display.h"
#include "PORTB_interrupt_inital.h"
#include "model.h"
void main(void)
{
inital(); //端口初始化
DelayMs(100); //延時(shí)等待系統(tǒng)穩(wěn)定
sysinitial(); //系統(tǒng)初始化
PORTB_interrupt_inital();//PB電平中斷初始化,設(shè)置PB7,PB6,PB5電平中斷
while(1)
{
high_frequence_change_to_sleep(); //高頻轉(zhuǎn)換為睡眠模式
Pulse_display(); //脈沖顯示
}
}
//PORTB中斷服務(wù)程序
void Intr(void) __interrupt 0
{
if(PBIF) //Judge PBIF
{
PBIF=0; //Clear PBIF
}
} |
|