您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > MSP430_C语言例程注释详
单片机专业网站基于模拟前端信号处理与控制技术的专业论坛、网站基于模拟前端信号处理与控制技术的专业论坛、网站微控设计网中国MSP430单片机专业网站基于模拟前端信号处理与控制技术的专业论坛、网站基于模拟前端信号处理与控制技术的专业论坛、网站本章选择了一些简单的C语言程序例题,这些程序的结构简单,编程技巧不多,题目虽然简单,但是非常适合入门单片机的学习者学习MSP430单片机的C语言编程。如下列出了C语言例题运行的MSP430F149实验板硬件资源环境,熟悉这些硬件资源,对于理解程序非常重要。(1)数码管:左侧数码管与P5口相连,a~g,h对应P5.0~P5.7右侧数码管与P4口相连,a~g,h对应P4.0~P4.7(2)发光二极管8个发光二极管与P3口连接(3)按钮:左侧8个按钮与P2口相连,引脚号标在按钮上方右侧8个按钮与P1口相连,引脚号标在按钮上方(4)P2.3引脚还是模拟比较器输入(5)P6.0,P6.1引脚连接模拟量电位器,用于模拟量实验9.1通过C语言编程例入门MSP430C语言编程如下例子都在MSP430F149实验板上通过验证。例1:使与P3口的P3.0引脚连接的发光二极管闪烁。#includemsp430x14x.h//声明库voidmain(void)//主函数{unsignedinti;//变量声明WDTCTL=WDTPW+WDTHOLD;//关掉看门狗P3DIR|=BIT0;//设置P3.0为输出,这里BIT0=0x0001while(1)//无限次while循环{for(i=0;i20000;i++)//for语句,i为循环变量,i每次循环加1,当i20000时,//循环延时P3OUT=0x00;使P3.0输出低电平,发光二极管亮,(低电平使发光二极管亮)for(i=0;i20000;i++)//再次循环延时P3OUT=0x01;使P3.0输出高电平,发光二极管灭,(高电平使发光二极管灭)}}例2:8个发光二极管1、3、5、7与2、4、6、8交替发光的例子#includemsp430x14x.hvoidmain(void){unsignedinti;WDTCTL=WDTPW+WDTHOLD;P3DIR=0XFF;//设置P3口为输出while(1){for(i=0;i20000;i++)P3OUT=0X55;//使发光二极管1、3、5、7灭,2、4、6、8亮for(i=0;i20000;i++)P3OUT=0XAA;//使发光二极管1、3、5、7亮,2、4、6、8灭}}例3:定时器控制的发光二极管闪烁。这里使用了MSP430F149芯片的32768Hz低频晶体振荡器作为时钟源。用定时器A定时1s,发光二极管灭0.5s,亮.0.5s。SimpoPDFPasswordRemoverUnregisteredVersion-单片机专业网站基于模拟前端信号处理与控制技术的专业论坛、网站基于模拟前端信号处理与控制技术的专业论坛、网站#includemsp430x14x.hvoidmain(void){WDTCTL=WDTPW+WDTHOLD;//设置看门狗控制寄存器,关看门狗TACTL=TASSEL0+TACLR;//设置定时器A控制寄存器,//TASSEL0=0x0100,选择辅助时钟ACLK,//TACLR=0x0004,清除定时器A计数器CCTL0=CCIE;//设置捕获/比较控制寄存器,CCIE=0x0010,使能捕获比较中断CCR0=16384;//设置捕获/比较寄存器,初始值为16384,对于32768Hz的频率,相当于0.5sP3DIR|=BIT7;//P3.7为输出TACTL|=MC0;//设置定时器A控制寄存器,MC0=0x0010,使计数模式为增计数_EINT();//使能中断,这是一个C编译器支持的内部过程。while(1);//无限次while循环}interrupt[TIMERA0_VECTOR]voidTimer_A(void)//定时器A的CC0中断处理程序//TIMERA0_VECTOR=6*2,等于基地址0xFFE0+12=0xFFEC{P3OUT^=BIT7;//将P3.7引脚取反,就是使发光二极管闪烁}例4:选择不同的时钟源,使P3.7连接的发光二极管闪烁。(1)使用XT2时钟源,8MHz频率,用定时器A分频,产生1s脉冲,使P3.7引脚的发光二极管闪烁。#includemsp430x14x.h#defineXTOFF0x40;voidmain(void){WDTCTL=WDTPW+WDTHOLD;//关闭看门狗BCSCTL1&=~XT2OFF;//基础时钟控制寄存器BCSCTL1的第7位置0,使XT2启动BCSCTL2=SELS+DIVS1+DIVS0;//基础时钟控制寄存器BCSCTL2设置,第3位置1,选择//XT2CLK作为SMCLK时钟;将第2和第1位置1,使分频比为8TACTL=0x02D4;//定时器A控制寄存器设置,第2位置1:清除;第4、5位置1、0:加计数模式//加计数至CCR0,然后重新开始;第6、7位1、1,所以是8分频;第8、9位是//0、1,所以TA使用SMCLK时钟。CCTL0=CCIE;//CCIE=0x0010,使能定时器A中断CCR0=62500;//设置计数器CCR0的初值,((8MHz/8)/8)/2=62500,相当于0.5s的时间P3DIR|=BIT7;//将P3.7设置为输出_EINT();//调用C430编译器内部函数,使能中断while(1);//无限次循环}interrupt[TIMERA0_VECTOR]voidTimer_A(void)//定时器A中断函数{P3OUT^=BIT7;//P3.7位取反}(2)使用32768Hz晶体产生1s信号的程序如下:#includemsp430x14x.hvoidmain(void){WDTCTL=WDTPW+WDTHOLD;TACTL=TASSEL0+TACLR+MC0;CCTL0=CCIE;CCR0=16384;P3DIR|=BIT7;_EINT();while(1);SimpoPDFPasswordRemoverUnregisteredVersion-单片机专业网站基于模拟前端信号处理与控制技术的专业论坛、网站基于模拟前端信号处理与控制技术的专业论坛、网站}interrupt[TIMERA0_VECTOR]voidTimer_A(void){P3OUT^=BIT7;}(3)看门狗使输出P3.7引脚连接的发光二极管每秒闪烁一次的例子:#includemsp430x14x.hvoidmain(void){WDTCTL=WDTPW+WDTTMSEL+WDTSSEL;IE1|=WDTIE;P3DIR|=BIT7;_EINT();while(1);}interrupt[WDT_VECTOR]voidWDT_interrupt(void){P3OUT^=BIT7;}例5:P4和P5输出口连接的数码管显示1和2。#includemsp430x14x.hvoidmain(void){unsignedcharseg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//定义七段译码的共阳数码管显示数组//hgfgdcba//0=11000000//1=11111001//2=10100100//……//9=10010000WDTCTL=WDTPW+WDTHOLD;//关闭看门狗,以便于调试P4DIR=0XFF;//设置P4口为输出P5DIR=0XFF;//设置P5口为输出P4OUT=seg[1];//向P4口输出数组的第1个元素,数字1的段码P5OUT=seg[2];//向P5口输出数组的第2个元素,数字2的段码}例6:与P5口连接的数码管加1计数,与P4口相连的数码管显示数字8。#includemsp430x14x.hvoidmain(void){inti,x;//声明数据类型unsignedcharseg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};WDTCTL=WDTPW+WDTHOLD;//关看门狗P4DIR=0XFF;//P4口为输出,连接有共阳极数码管P5DIR=0XFF;//P5口为输出,连接有共阳极数码管P4OUT=seg[8];//P4输出数字8P5OUT=seg[0];//P5输出数字0while(1)//无限次While循环{for(i=0;i=9;i++)//循环变量I从0到9循环for(x=0;x20000;x++)//没有循环体的for循环,用于延迟时间P5OUT=seg[i];//按照循环变量i的数值,取出相应的数组元素}}例7:使用定时器输出精确的秒信号。从0开始计时,数码管显示0~60秒,每隔10秒使数码管更换显示,并顺序点亮发光二极管。SimpoPDFPasswordRemoverUnregisteredVersion-单片机专业网站基于模拟前端信号处理与控制技术的专业论坛、网站基于模拟前端信号处理与控制技术的专业论坛、网站#includemsp430x14x.h#defineXTOFF0x40;unsignedinti=0,j=0;//声明数据类型unsignedcharseg_7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管字型码数组unsignedintbit[8]={0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080};//发光二极管点亮顺序数组voidmain(void){WDTCTL=WDTPW+WDTHOLD;//关看门狗TACTL=TASSEL0+TACLR;//设置定时器A控制寄存器,//TASSEL0=0x0100,选择辅助时钟ACLK(32kHz)//TACLR=0x0004,清除定时器A计数器CCTL0=CCIE;//使能定时器A捕捉与中断功能,CCIE=0x0010CCR0=32768;//设置计数器CCR0初值TACTL|=MC0;//设置定时器工作模式为加计数到CCR0初值P3DIR=0XFF;//P3口为输出P4DIR=0XFF;//P4口为输出P5DIR=0XFF;//P5口为输出P3OUT=0X7E;//P3口输出为01111110_EINT();调用C430编译器内部函数使能中断while(1);//没有循环体的无限次while循环}interrupt[TIMERA0_VECTOR]vo
本文标题:MSP430_C语言例程注释详
链接地址:https://www.777doc.com/doc-6206605 .html