搜索
bottom↓
回复: 2

求帮助~帮我调试MSP430做的学习型遥控器的红外发送的代码

[复制链接]

出0入0汤圆

发表于 2012-8-10 10:47:29 | 显示全部楼层 |阅读模式
/******************************************
                红外发送
*******************************************/

#include "msp430x14x.h"

#define uchar unsigned char
#define uint  unsigned int
#define SENDH  P2SEL|=BIT1;//TBCCTL4&=~CCIFG 
#define SENDL  P2SEL&=~BIT1
#define SENDSTART TBCCTL0&=~CCIFG;TBCCTL0|=CCIE

/***************************************************/

char address;
char data;
uchar count = 0;  

//遥控所需相关资源初始化
void HWInit()
{
      //初始化TB
      TBCTL = TBSSEL_2 + TBCLR + MC_1+TBIE;  //SMCLK 增模式
      TBCCTL0=CCIE;
      TBCCTL4=CCIE;
      TBCCR0 = 1125 - 1;
      TBCCR4 = 560-40;
      //初始化TA
      TACTL = TASSEL_2 + MC_1+TAIE;    //SMCLK增模式 中断允许
      TBCCTL1=CCIE;
      TACCTL1 |= OUTMOD_7; //PWM复位/置位
      CCR0 = 26;    //周期
      CCR1 = 13;    //占空值
      //相关端口初始化 程序由P2.1口发出红外编码(已加入38K载波)
      //P2SEL bit1置1即发出38k的红外清0即停止发送38k的红外
      P2OUT &=~ BIT1;
      P2DIR |= BIT1;
      _EINT();
      

}

//发送数据包括地址码和数据码

void SendData(uchar addr,uchar dat)
{
      address = addr;  //要发送的数据放入对应存储区域
      data = dat;
      SENDSTART;    //开始发送

}

//发送引导码 ,TB0中断中调用

void SendLeadCode()
{
      static uchar i = 0;   //计数 1.125ms个数
      i++;
      switch(i) //9ms高4.5ms低
      {
      case 1: SENDH;  break;   //9ms高电平
      case 9: SENDL;  break;   //4.5ms低电平
      case 13:
          SENDH;
          TBCCR4 = (TBR+560-40>1124) ? (TBR+560-40-1124) : (TBR+560-40);
          if(TBCCR4>1124) TBCCR4 = 1124;  //防止TBCCR4出界
          i = 0;  
          TBCCTL4|=CCIE;  
          break; //引导码完成 560us高准备数据
      default:break;
      }

}

//发送一位数据 ,TB0中断中调用

void SendOneBit()

{
      uint tAddr = (address<<8)|((~address)&0xff);
      uint tDat = (data<<8)|((~data)&0xff);
      static uchar i = 0;      //计数
      static uchar flg = 0; //位―1‖可发送位―1‖需要更长时间低电平 
      i++;
      if(i<=16)
      {
            if((tAddr&(1<<(16-i))) && flg==0) //"1"第一次
            {
                flg = 1;
                i--;
            }
            else
            {
                flg = 0;
                SENDH;
                TBCCR4 = (TBR+560-40>1124) ? (TBR+560-40-1124) : (TBR+560-40);
                if(TBCCR4>1124) TBCCR4 = 1124; //防止TBCCR4出界
                TBCCTL4|=CCIE;
            }
      }
      else if(i<=32)
      {
          if((tDat&(1<<(16+16-i))) && flg==0) //"1"第一次
          {
              flg = 1;
              i--;
          }
          else
          {
              flg = 0;
              SENDH;
              TBCCR4 = (TBR+560-40>1124) ? (TBR+560-40-1124) :(TBR+560-40);
              if(TBCCR4>1124) TBCCR4 = 1124; //防止TBCCR4出界
              TBCCTL4|=CCIE;
          }
      }
      else         //数据发送完成
      {
          TBCCTL4&=~CCIE;
          TBCCTL0&=~CCIE;
          i = 0;
          count = 0;
      }
}



//TB0中断 1.125ms

#pragma vector=TIMERB0_VECTOR

__interrupt void Timer_B0 (void)

{
       count++;
  
      if(count<=13)SendLeadCode;
      else SendOneBit();

}



//TB1中断

#pragma vector=TIMERB1_VECTOR
__interrupt void Timer_B1(void)
{
      switch( TBIV )
      {
            case  0x08:     // TBCCR4 发送红外数据时完成置低操作
              SENDL;
              TBCCTL4&=~CCIE;  //置低后中断关闭等待这一位数据结尾有TBCCR0确定
              break;
      case  0x0a:                   // TBCCR5  
        break;
      case  0x0e:                        //overflow 溢出未用
        break;

      default: break;
      }

}


void main(void)
{
   
    WDTCTL = WDTPW + WDTHOLD;       // 关闭看门狗
     
    HWInit();
    while(1);
   
}   
      
                  

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-8-11 19:05:25 | 显示全部楼层
我也想知道。嘿嘿。帮你顶一下。

出0入0汤圆

发表于 2012-8-16 23:29:44 | 显示全部楼层
进中断退出之前,中断标记要清掉
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-6 12:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表