⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 init_systerm.c

📁 单片机C语言最小系统
💻 C
📖 第 1 页 / 共 2 页
字号:
			   //-----|-----|-----|-----|-----|-----|-----|------|
               //TF2:定时器2溢出标志位,必须软件清零,RCLK=1或TCLK=1时,TF2不用置位
			   //EXF2:定时器2外部标志位,EXEN2=1 时,T2EX 上的负跳变而出现捕捉或重
               //     载时,EXF2 会被硬件置位。定时器2打开,EXF2=1 时,将引导CPU
               //     执行定时器2中断程序。EXF2必须软件清0,在向上/向下计数模式
               //    (DCEN=1)下EXF2不能引起中断
			   //RCLK:串行口接收数据时钟标志位。若RCLK=1,串行口将使用定时器2 溢出
               //     脉冲作为串行口工作模式1 和3的串口接收时钟;RCLK=0,将使用定
               //     时器1计数溢出作为串口接收时钟。
			   //TCLK:串行口发送数据时钟标志位。若TCLK=1,串行口将使用定时器2 溢出
               //     脉冲作为串行口工作模式1 和3 的串口发送时钟;TCLK=0,将使用定
               //     时器1计数溢出作为串口发送时钟。
			   //EXEN2:定时器2外部允许标志位。当EXEN2=1时,如果定时器2没有用作串行
               //      时钟,T2EX(P1.1)的负跳变引起定时器2 捕捉和重载.若EXEN2=0,
               //      定时器2将视T2EX端的信号无效
			   //TR2:开始/停止控制定时器2。TR2=1,定时器2开始工作
			   //C/T2:定时器2 定时/计数选择标志位。CT2=0,定时; CT2=1,外部事件计数
               //    (下降沿触发)
			   //CP/RL2:捕捉/重载选择标志位。当EXEN2=1时,CP/RL2=1,T2EX出现负脉冲,
               //       会引起捕捉操作;当定时器2溢出或EXEN2=1时T2EX出现负跳变,都
               //       会出现自动重载操作。
} 
/******************************************************************************/
/*                          初始化串口                                        */
/******************************************************************************/
void Init_Com(void)
{
  SCON = 0x50;//缺省模式为8位波特率可变,不允许多机通信
              //-----|-----|-----|-----|-----|-----|-----|------|
              // SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI  |  RI  |
			  //-----|-----|-----|-----|-----|-----|-----|------|
			  //SM0、SM1串口工作方式选择位
			  //-----|-----|-----|--------------------------------------------|
			  // SM0 | SM1 | 方式|              功能                          |
			  //-----|-----|-----|--------------------------------------------|
			  //  0  |  0  |  0  |移位寄存器方式(用于IO扩展,波特率F/12)    |            
			  //-----|-----|-----|--------------------------------------------|
			  //  0  |  1  |  1  |8位UART,波特率可变(由T1溢出率决定)       |
			  //-----|-----|-----|--------------------------------------------|
			  //  1  |  0  |  2  |9位UART,波特率为F/64或F/32                 |
			  //-----|-----|-----|--------------------------------------------|
			  //  1  |  1  |  3  |9位UART,波特率可变(由T1溢出率决定)       |
			  //-----|-----|-----|--------------------------------------------|
			  //SM2:允许方式2、3多机通信控制位。在方式2或方式3种,如SM2=1,则接
			  //受到的第9位数据(RB8)为0时,不启动接受中断标志RI,当接受到的第
			  //9位数据为1时,则启动接受中断RI。如果SM2=0,则接受的第9位数据无论
			  //为1或者0均启动RI。在方式1时,如果SM2=1。则只有在接受到有效的停止
	          //位时才启动RI,若没有接受到有效停止位,则RI=0,如果不是多机通信,
			  //则无un串行口工作何种方式,SM2一般都置为0
			  //REN:允许接受位,由软件置1
              //TB8:在方式2和方式3种要发送的第9位数据,由软件置位
			  //RB8:在方式2和方式3种要接收的第9位数据,在方式1时,如SM2=0,RB8是
			  //接收到的停止位。在方式0中,不使用RB8
  PCON &= 0x7f; //缺省模式波特率不加倍
                //SMOD = 0波特率不加倍,SMOD = 1波特率加倍
  RCAP2H = 0xff;//在12M晶体时,波特率为9600       
  RCAP2L = 0xd9;//                     F(晶体频率)
                // 波特率  =   ---------------------------     
                //              32*(65536-(RCAP2H,RCAP2L)
  ES = 1;       // ES = 0禁止串口中断,ES = 1允许串口中断
} 
/******************************************************************************/
/*                          初始化外部中断0                                   */
/******************************************************************************/
void Init_Int0(void)
{
  IE1 = 0;//外部INT0中断请求标志,该位在TCON的第2位
  IT0 = 1;//IT0:外部中断INT0触发方式选择位,缺省为1
          //可由指令设置为0或者1,当IT0=0时,INT0被指定为电平触发方式,即低电平
		  //有效,CPU在每一机器周期的S5P2采样INT0的输入电平,当采样值为低电平时,
		  //IE0置1。当IT0=1时,INT0被指定为边沿触发方式,即INT0下降沿有效,CPU在
		  //每一机器周期的S5P2采样INT0的输入电平,若一次采样值为高电平,而下一机
		  //器周期采样值为低电平,IE1置1。
  EX0 = 0;//EX0 = 0禁止INT0中断,EX0 = 1开INT0中断,缺省不允许
}
/******************************************************************************/
/*                          初始化外部中断1                                   */
/******************************************************************************/
void Init_Int1(void)
{ 
  IE1 = 0;//外部INT1中断请求标志,该位在TCON的第4位 
  IT1 = 1;//IT1:外部中断INT1触发方式选择位,缺省为1
         //可由指令设置为0或者1,当IT1=0时,INT1被指定为电平触发方式,即低电平
		 //有效,CPU在每一机器周期的S5P2采样INT1的输入电平,当采样值为低电平时,
		 //IE1置1。当IT1=1时,INT1被指定为边沿触发方式,即INT1下降沿有效,CPU在
		 //每一机器周期的S5P2采样INT0的输入电平,若一次采样值为高电平,而下一机
		 //器周期采样值为低电平,IE1置1。
  EX1 = 0;//EX0 = 0禁止INT0中断,EX0 = 1开INT0中断,缺省不允许
}

/******************************************************************************/
/*                          初始化CPU中断和优先级                             */
/******************************************************************************/
void Init_Cpu_IEIP(void)
{
  EA = 1;//EA = 1允许全局中断。EA = 0禁止全局中断
  IP = 0;//缺省都为低优先级中断
         //IP:51的中断分为两个优先级,实现两级中断嵌套
		 //-----|-----|-----|-----|-----|-----|-----|------|
         //     |     |     | PS  | PT1 | PX1 | PT0 |  PX0 |
	     //-----|-----|-----|-----|-----|-----|-----|------|
		 //PS:串行口优先级设定位
		 //PS=1,串行口设为高优先级,PS=0串行口设为低优先级
		 //PT1:定时器1优先级设定位
		 //PT1=1,定时器1设为高优先级,PT1=0定时器1设为低优先级
		 //PX1:外部中断INT1优先级设定位
		 //PX1=1,外部中断INT1设为高优先级,PX1=0外部中断INT1设为低优先级
         //PT0:定时器0优先级设定位
		 //PT0=1,定时器0设为高优先级,PT0=0定时器0设为低优先级
		 //PX0:外部中断INT1优先级设定位
		 //PX0=1,外部中断INT0设为高优先级,PX0=0外部中断INT0设为低优先级
}
/******************************************************************************/
/*                          初始化看门狗定时器                                */
/******************************************************************************/
void Init_Wd(void)
{
 // WD = 0x1e;//WDT是一种需要软件控制的复位方式。WDT 由13位计数器和特殊功能寄存器
  //WD = 0xe1;//中的看门狗定时器复位存储器(WDTRST)构成。WDT 在默认情况下无法工作
		    //为了激活WDT,户用必须往WDTRST 寄存器(地址:0A6H)中依次写入01EH和
			//0E1H。当WDT激活后,晶振工作,WDT在每个机器周期都会增加。WDT计时周
			//期依赖于外部时钟频率。除了复位(硬件复位或WDT溢出复位),没有办法
			//停止WDT工作。当WDT溢出,它将驱动RSR引脚一个高个电平输出。
			//为了激活WDT,用户必须向WDTRST寄存器(地址为0A6H的SFR)依次写入0E1H
            //和0E1H。当WDT激活后,用户必须向WDTRST写入01EH和0E1H喂狗来避免WDT
            //溢出。当计数达到8191(1FFFH)时,13 位计数器将会溢出,这将会复位器件。
		    //晶振正常工作、WDT激活后,每一个机器周期WDT 都会增加。为了复位WDT,
	    	//用户必须向WDTRST 写入01EH 和0E1H(WDTRST 是只读寄存器)。WDT 计数器
	        //不能读或写。当WDT 计数器溢出时,将给RST 引脚产生一个复位脉冲输出,
			//这个复位脉冲持续96个晶振周期(TOSC),其中TOSC=1/FOSC。为了很好地使
	    	//用WDT,应该在一定时间内周期性写入那部分代码,以避免WDT复位。
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -