//初始化
#include "holychip_define.h"
#include "inital.h"
void inital(void)
{
PORTA=0X00;
PORTB=0X00; //PORT口输出高低电平设置 1=高电平,0=低电平
TRISA=0X00; //输入输出设置 1=输入,0=输出
TRISB=0XE0; //输入输出设置 1=输入,0=输出 0X11100000 PB7,PB6,PB5设置为输入
PHCON1=0XFF; //上拉设置 1=DISABLED PULL-UP ;0=PULL-UP
PHCON =0XFF; //上拉设置 1=DISABLED PULL-UP ;0=PULL-UP
PDCON1=0XFF; //下拉设置 1=DISABLED PULL-UP ;0=PULL-UP
PDCON =0XFF; //下拉设置 1=DISABLED PULL-UP ;0=PULL-UP
ODCON1=0X00; //开漏设置 0=DISABLED PULL-UP ;1=PULL-UP
ODCON =0X00; //开漏设置 0=DISABLED PULL-UP ;1=PULL-UP
}
//系统初始化
void sysinitial(void)
{
INTECON=0x00;
OSCCON=0X80;
OPTION=0X80; //Ftimer0 1/2
PCON=0X40; //更改 上下电复位 禁止看门狗
}
//模式转换
#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定时唤醒
{
OPTION=0X05;
SBIT(OPTION, 5, HIGH); //T0CS=1
// T0CS =1;
T0IF=0; //清T0中断标志
T0IE=1; //使能T0定时器
T0=0X00; //T0赋初值
asm(sleep)
}
//PB电平变化中断初始化
#include "holychip_define.h"
#include "PORTB_interrupt_inital.h"
void PORTB_interrupt_inital()
{
TRISB=0XE0; //PORTB端口设置 0X11100000 PB7,PB6,PB5设置为输入
IOCB=0XE0; //使能PORTB端口为电平变化中断
PBIF=0; // PROTB中断请求标志清零
PBIE=1; //使能PROTB中断
GIE=1; //使能GIE
}
//脉冲显示函数
#include "holychip_define.h"
#include "Pulse_display.h
uS延时函数
void DelayUs(unsigned char t)
{
while(--t);
}
mS延时函数
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;
}
//主函数
#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); //延时等待系统稳定
sysinitial(); //系统初始化
PORTB_interrupt_inital();//PB电平中断初始化,设置PB7,PB6,PB5电平中断
while(1)
{
high_frequence_change_to_sleep(); //高频转换为睡眠模式
Pulse_display(); //脉冲显示
}
}
//PORTB中断服务程序
void Intr(void) __interrupt 0
{
if(PBIF) //Judge PBIF
{
PBIF=0; //Clear PBIF
}
} |