以下是一个初始化程序实例:
(仅供参考)
//--------------------------------------------------------
//初始化程序
//--------------------------------------------------------
void init(void)
{
tU08 i ;
//====IO口设置
PORTA = 0B00111110 ; //设置PORTA口电平
TRISA = 0B00000001 ; //设置PORTA口输入/输出态
PORTB = 0B11111110 ; //设置PORTB口电平
TRISB = 0B00000001 ; //设置PORTB口输入/输出态
PORTC = 0B01110111 ; //设置PORTC口电平
TRISC = 0B10000000 ; //设置PORTC口输入/输出态 (串行接收口RX(RC7)设置为输入态)
//====寄存器初始化
//====参数初始化
DISP_TIME_SET = (65536-1000) ; //单列显示时间设置值
DISP_LINE = DISP_LINE_ADJ ; //显示列计数器(0~179)=校正值
TIMR1_JSQ = 0 ; //TIMR1溢出计数器 = 0
MOTOR_ST_FLAG = 1 ; //电机正常开启状态标志=1(0=关闭,1=开启)
SET_EN_FLAG = 0 ; //设置使能标志=0(0=禁止,1=使能)
DISP_MODE = 0 ; //显示状态(0~7)
SET_MODE = 0 ; //设置状态(0~5)
MD_CH_FLAG = 1 ; //显示的状态被切换标志=1
TIME_H = 12 ; //时钟"时"(0~23)
TIME_M = 0 ; //时钟"分"(0~59)
TIME_S = 0 ; //时钟"秒"(0~59)
TIME_MS = 0 ; //时钟"毫秒"(0~49) (每过20ms,+1)
TIME_US = 0 ; //时钟"微秒"(0~24) (每过800us,+1)
T_20MS_FLAG = 0 ; //20毫秒定时溢出标志(0=未溢出,1=溢出)
NEW_DISP_EN_FLAG = 1 ; //显示刷新使能标志=1(0=禁止,1=使能)
COMM_DELAY_JSQ = 0 ; //通讯延时计数器=0
COMM_END_FLAG = 0 ; //通信接收结束标志=0
COMM_PUT_PTR = 0 ; //接收数据存放指针=0
SP_RUN = 0 ; //闹铃时间运行值(0~99分)
NO_KEY_JSQ = 0 ; //无按键计数器=0(每1S+1)
//温度历史纪录队列初始化
for ( i=0 ; i<24; i++)
{
TEMP_LS_QUEUE[i] = 25 ;
}
TEMP_LSPJ=25 ;
//====EEPROM中参数初始化
eeprom_init() ;
//====INT口,WDT,TIMR0设置
OPTION = 0B10001111 ; //预分频器分配给WDT; 预分频=1:128; TMR0时钟源=内部指令周期计数; PORT内部上拉禁止; NT口触发边沿=下降沿;
TMR0 = 256-250 ; //TMR0赋初值
//====TIMR1设置
T1CON = 0 ; //TMR1控制寄存器=0
TMR1HL = DISP_TIME_SET ; //TMR1赋初值
T1CKPS1 = 0 ;
T1CKPS0 = 0 ; //预分频系数=1:1
T1OSCEN = 0 ; //关闭内部振荡器电路
T1SYNC = 0 ; //同步计数模式
TMR1CS = 0 ; //时钟源=内部指令周期计数
TMR1ON = 1 ; //计数使能
//====TIMR2设置
PR2 = ( 225-1 ) ; //周期控制寄存器=225
T2CON = 0B00000111 ; //预分频=1:16,后分频=1:1,开启TIMR2
//====串口设置(说明:接收使能,发送使能(用于蜂鸣器控制),异步通讯,波特率=1200,数据位=8bit,停止位=1bit,无校验位)
SPBRG = 233 ; //波特率=fosc/64(SPBRG+1)=18000000/(64*(233+1))=1201.92
TXSTA = 0B00100000 ; //异步低速方式,发送8bit数据,发送使能
RCSTA = 0B10010000 ; //串口工作使能,接收8bit数据,连续接收允许
//====ADC设置
#if ChipType == 886
ANSEL = 0B00000001 ; //AN0设置为AD口
ANSELH = 0B00000000 ; //其它口设置为IO口
ADCON1 = 0B00000000 ; //左对齐;参考电压=VSS,VDD
ADCON0 = 0B11000001 ; //ADC时钟源=自带RC;通道选择AN0;启动AD模块电源
#elif ChipType == 876
ADCON1 = 0B00001110 ; //选择AN0通道为模拟口,其它通道为数字口
ADCON0 = 0B11000001 ; //ADC时钟源=自带RC;通道选择AN0;启动AD模块电源
#endif
ADGO = 1 ; //启动ADC
//====中断使能
INTCON = 0 ; //中断控制寄存器=0
PIE1 = 0 ;
PIE2 = 0 ;
INTE = 1 ; //使能INT中断
//T0IE = 1 ; //TMR0中断
TMR1IE = 1 ; //TMR1中断
TMR2IE = 1 ; //TMR2中断
TXIE = 0 ; //串口发送中断
RCIE = 1 ; //串口接收中断
PEIE = 1 ; //外设中断
GIE = 1 ; //全局中断
//====上电蜂鸣器鸣叫
__sp_cnt__(SP_JSQ_RST) //蜂鸣器鸣叫
} |