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

📄 main.c

📁 用MSP430(C)写的红外抄表程序,是初学者好代码
💻 C
字号:
//******************************************************************
//功能作用;实现CO2浓度和温度的检测
//2007-1-21 9:33
//晶振;32768
//CPU;MSP430F147
//使用资源:12位A/D转换,IO口,信息存储段A,串口0,串口1,
//          基本定时器;
//使用库文件;"MSP430x14x.h"
//编译器;IAR Embedded Workbench V3.21A
//版本;CO2-1
//作者;彭三军
//版权;华盛昌
//******************************************************************
void main(void)
{
    //关闭开门狗
    WDTCTL = WDTPW + WDTHOLD;
  
    //选择晶振的去藕电容
    FLL_CTL0 |= XCAP18PF;  
   
    //用默认的时钟,SCFQCTL=31,MCLK = 1048576Hz
    for (i = 0; i < 0x3600;i++);       // Delay for clock set up
   
    //选择MCLK工作频率为1~2M之间
    SCFQCTL = 63;                        
    SCFI0   = FN_2;
    init_io();
    init_ad();
    init_uart();
    while(1)
    {
      
    }
}
//**********************************************************************
// 名称: init_io
// 说明:初始化IO口
// 功能: 设置IO口
// 调用:无
// 输入:无
// 返回值:无
//**********************************************************************
void  init_io(void)
{
 //将P1口所有的管脚设置为输入方向
    P1DIR = 0;
    //将P1口所有的管脚设置为一般I/O口
    P1SEL = 0;
    // 将P1.4 P1.5 P1.6 P1.7设置为输出方向
    P1DIR |= BIT4;
    P1DIR |= BIT5;
    P1DIR |= BIT6;
    P1DIR |= BIT7;
    //先输出低电平
    P1OUT = 0x00;
    // 将中断寄存器清零
    P1IE = 0;
    P1IES = 0;
    P1IFG = 0;
    //打开管脚的中断功能
    //对应的管脚由高到低电平跳变使相应的标志置位
    P1IE |= BIT0; 
    P1IES |= BIT0; 
    P1IE |= BIT1; 
    P1IES |= BIT1;
    P1IE |= BIT2; 
    P1IES |= BIT2; 
    P1IE |= BIT3; 
    P1IES |= BIT3;
    
     //将P2口所有的管脚设置为输出方向
    P2DIR = 0x0ff;
    //将P2口所有的管脚设置为一般I/O口
    P2SEL = 0;
    //先输出低电平
    P2OUT = 0x00;
    // 将中断寄存器清零
    P2IE = 0;
    P2IES = 0;
    P2IFG = 0;
   
    //将P3口所有的管脚设置为输入方向
    P3DIR = 0;
    //将P3口所有的管脚设置为一般I/O口
    P3SEL = 0xf0;
    
    //将P4口所有的管脚设置为输出方向
    P4DIR = 0x0ff;
    //将P4口所有的管脚设置为一般I/O口
    P4SEL = 0;
    //先输出高电平
    P4OUT = 0x0ff;
    
    //将P5口所有的管脚设置为输出方向
    P5DIR = 0x0ff;
    //将P5口所有的管脚设置为一般I/O口
    P5SEL = 0;
    //先输出高电平
    P5OUT = 0x0ff;
    
    //将P6口所有的管脚设置为输出方向
    P6DIR = 0x0ff;
    //将P6.0口所有的管脚设置为一般I/O口
    P6SEL = 3;
    //先输出高电平
    P6OUT = 0x0ff; 
}
//**********************************************************************
// 名称: init_io
// 说明:初始化AD口
// 功能: 设置12位AD
// 调用:无
// 输入:无
// 返回值:无
//**********************************************************************
void  init_ad(void)
{
  P6SEL |= 0x01;                            // Enable A/D channel A0
  ADC12CTL0 = ADC12ON+SHT0_8+MSC;           // Turn on ADC12, set sampling time
  ADC12CTL1 = SHP+CONSEQ_2;                 // Use sampling timer, set mode
  ADC12IE = 0x01;                           // Enable ADC12IFG.0
  ADC12CTL0 |= ENC;                         // Enable conversions
  ADC12CTL0 |= ADC12SC;                     // Start conversion
}
//**********************************************************************
// 名称: init_uart
// 说明:初始化串口口
// 功能: 设置串口1串口2成一般UART
// 调用:无
// 输入:无
// 返回值:无
//**********************************************************************
void  init_uart(void)
{
    //将寄存器的内容清零
      U1CTL = 0X00;	
	  //数据位为8bit
      U1CTL += CHAR;			
    
	 //将寄存器的内容清零
      U1TCTL = 0X00;	
	 //波特率发生器选择SMCLK
      U1TCTL += SSEL1;			
    
	//波特率为19200
      UBR0_1 = 0X36;			
      UBR1_1 = 0X00;
	//调整寄存器
      UMCTL_1 = 0X6b;			

	//使能UART1的TXD和RXD
      ME2 |= UTXE1 + URXE1; 
	//使能UART1的RX中断
      //IE2 |= URXIE1;	
	//使能UART1的TX中断
      //IE2 |= UTXIE1;			
    
	//设置P3.6为UART1的TXD
      P3SEL |= BIT6;	
	//设置P3.7为UART1的RXD
      P3SEL |= BIT7;			
    
	//P3.6为输出管脚
      P3DIR |= BIT6;			
      return;
  
}

⌨️ 快捷键说明

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