2307|0

9

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

MSP430--数字IO 流水灯程序 [复制链接]

1.数字IO共有6组,其中P1,P2可以设置外部中断。

2.通用寄存器:

PxIN,PxOUT,PxDIR,PxSEL

   上电默认PxDIR为0,即默认为输入。PxSEL若为1,则表示数字IO用作外设功能,这时候P1或P2的中断功能丢失。

3.P1的寄存器:每个地址对应8位寄存器,对应IO的8个PIN.

  1. 026h P1SEL  
  2. 025h P1IE: 中断使能  
  3. 024h P1IES:中断响应上升沿变化(0),响应下降沿变化(1)  
  4. 023h P1IFG:中断发生就置位为1,中断执行后要手动清除  
  5. 022h P1DIR  
  6. 021h P1OUT  
  7. 020h P1IN read only
复制代码

4.流水灯电路:P2端口输出低电平时二极管发光。P2DIR=0XF8,对应表示P27-P23均为输出,若这时P2OUT=0XFF,则L1-L5都会亮。

5.流水灯程序:实现流水灯以三种流动方式和四种流动速度的不同组合而进行点亮"流动"

  1. #include  <msp430x14x.h>  
  2.   
  3.   
  4. typedef unsigned int  uint;  
  5.   
  6.   
  7. uint i = 0,j = 0,dir = 0;  
  8. uint flag = 0,speed = 0;  //flag--灯光流动方式,speed--灯光流动速度  
  9.   
  10.   
  11. /****************主函数****************/  
  12. void main(void)  
  13. {  
  14.    
  15.     /*给IO一个初始的状态*/  
  16.     P1DIR = 0XFF;P1OUT = 0XFF;  
  17.     P2DIR = 0XFF;P2OUT = 0XFF;  
  18.     P3DIR = 0XFF;P3OUT = 0XFF;  
  19.     P4DIR = 0XFF;P4OUT = 0XFF;  
  20.     P5DIR = 0XFF;P5OUT = 0XFF;  
  21.     P6DIR = 0XFF;P6OUT = 0XFF;  
  22.    
  23.     WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗  
  24.     P6DIR |= BIT2;P6OUT |= BIT2;    //关闭电平转换  
  25.     P5OUT &= ~BIT7;  
  26.       
  27.     CCTL0 = CCIE;                   //使能CCR0中断  
  28.     CCR0 = 50000;  
  29.     TACTL = TASSEL_2 + ID_3 + MC_1; //定时器A的时钟源选择SMCLK,增计数模式  
  30.     P2DIR = 0xff;                   //设置P2口方向为输出  
  31.     P2OUT = 0xff;  
  32.    
  33.     _EINT();                        //使能全局中断  
  34.     LPM0;                           //CPU进入LPM0模式  
  35. }  
  36.   
  37.   
  38. /*******************************************
  39. 函数名称:Timer_A  
  40. 功    能:定时器A的中断服务函数,在这里通过标志
  41.           控制流水灯的流动方向和流动速度
  42. 参    数:无
  43. 返回值  :无
  44. ********************************************/  
  45. #pragma vector = TIMERA0_VECTOR  
  46. __interrupt void Timer_A (void)  
  47. {   
  48.     if(flag == 0)  
  49.     {  
  50.         P2OUT = ~(0x80>>(i++));    //灯的点亮顺序D8 -> D1  
  51.     }  
  52.     else if(flag == 1)  
  53.     {  
  54.         P2OUT = ~(0x01<<(i++));    //灯的点亮顺序D1 -> D8  
  55.     }  
  56.     else   
  57.     {  
  58.         if(dir)                  //灯的点亮顺序D8->D1,D1->D8,循环绕圈                          
  59.         {  
  60.             P2OUT = ~(0x80>>(i++));  
  61.         }  
  62.         else  
  63.         {  
  64.             P2OUT = ~(0x01<<(i++));  
  65.         }  
  66.     }  
  67.    
  68.     if(i == 8)   
  69.     {  
  70.         i = 0;  
  71.         dir = ~dir;  
  72.     }  
  73.    
  74.     j++;  
  75.     if(j == 40) //循环5次就改变flag改变流动方向  
  76.     {  
  77.         i = 0;  
  78.         j = 0;  
  79.         flag++;  
  80.         if(flag == 4) flag = 0;  
  81.         switch(speed)  
  82.         {  
  83.         case 0:  
  84.             TACTL &=~ (ID0 + ID1);  
  85.             TACTL |= ID_3;  
  86.             break;  
  87.         case 1:  
  88.             TACTL &=~ (ID0 + ID1);  
  89.             TACTL |= ID_2;  
  90.             break;  
  91.         case 2:  
  92.             TACTL &=~ (ID0 + ID1);  
  93.             TACTL |= ID_1;  
  94.             break;  
  95.         case 3:  
  96.             TACTL &=~ (ID0 + ID1);  
  97.             TACTL |= ID_0;  
  98.             break;  
  99.         default:  
  100.             break;  
  101.         }  
  102.         if(flag != 3)   speed++;  
  103.         if(speed == 4) speed = 0;  
  104.     }   
  105. }  
复制代码


 
点赞 关注
个人签名

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表