/*
流水灯,P4口连接LED
*/
#include
"msp430x14x.h"
//__interrupt
void
TimerB_ISR(void);
void
Init_Port(void);
void
Init_TimerB(void);
void
InitSystemClock(void);
//
初始化系统时钟
unsigned
char
led;
void
main(
void
)
{
//
Stop
watchdog
timer
to
prevent
time
out
reset
WDTCTL
=
WDTPW
+
WDTHOLD;//关闭看门狗
InitSystemClock();
Init_Port();
Init_TimerB();
_EINT();
led=0x01;
while(1);//LPM0;
}
void
InitSystemClock(void)
//
初始化系统时钟
{
unsigned
char
i;
BCSCTL1=0x00;//Set
430
clk
开启XT2,DOC的标称频率为最低
且不分频;XT1为低速晶体(32.768K)
BCSCTL2=SELM_2+SELS;//选择MCLK
SCLK的时钟源为高速时钟
不分频,均为8M
do
{
IFG1=~OFIFG;
for(i=0xff;i0;i--);
}
while
((IFG1OFIFG)!=0);
P5DIR=BIT4+BIT5+BIT6;
P5SEL|=BIT4+BIT5+BIT6;//将MCLK
SCLK
ACLK分别输出至P5.4
5
6口
}
void
Init_Port(void)
{
P4DIR=0XFF;
P4SEL=0;
return;
}
void
Init_TimerB(void)
{
//选择ACLK,清除TAR
TBCTL
=TBSSEL0
+TBCLR;
//TBCCRO允许中断
TBCCTL0=
CCIE;
//时间间隔为1s
TBCCR0=32768;
//增计数模式
TBCTL
|=MC0;
return;
}
#pragma
vector=TIMERB0_VECTOR
__interrupt
void
TimerB_ISR(void)
{
led=(led==0x80)?
0x01:(led1);//led的流水灯的输出值计算:循环左移
P4OUT
=led;
}
给你一个430的程序蜂鸣参考
/*********************************************************
程序功能:用固定频率的方波驱动蜂鸣器,共16种音调;在蜂鸣器
发出不同音调的同时,LED发光以二进制数字形式指示
当前音调的编号(1~16)
----------------------------------------------------------
测试说明:聆听蜂鸣器发声的音调变化。
**********************************************************/
#include msp430.h
#include "BoardConfig.h"
uchar step = 0xff;
/************************主函数************************/
void main( void )
{
uchar i;
WDTCTL = WDTPW + WDTHOLD; //关狗
BoardConfig(0xb0); //关数码管、流水灯和电平转换
/*------选择系统主时钟为8MHz-------*/
BCSCTL1 = ~XT2OFF; //打开XT2高频晶体振荡器
do
{
IFG1 = ~OFIFG; //清除晶振失败标志
for (i = 0xFF; i 0; i--); //等待8MHz晶体起振
}
while ((IFG1 OFIFG)); //晶振失效标志仍然存在?
BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振
TACCTL0 |= CCIE; //使能比较中断
TACTL |= TASSEL_2 + ID_3 ; //计数时钟选择SMLK=8MHz,1/8分频后为1MHz
TBCCR0 = 4096*2 - 1; //周期两秒
TBCCTL0 |= CCIE;
TBCTL |= TBSSEL_1 + ID_3 + MC_1; //时钟源ACLK/8,up mode
P6DIR |= BIT7; //蜂鸣器对应IO设置为输出
P2DIR = 0xff;
P2OUT = 0xff;
_EINT();
LPM1;
}
/*******************************************
函数名称:Timer_A
功 能:定时器A的中断服务函数,在这里驱动
蜂鸣器发声
参 数:无
返回值 :无
********************************************/
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P6OUT ^= BIT7; // Toggle P6.7
}
/*******************************************
函数名称:Timer_B
功 能:定时器B的中断服务函数,在这里更改
蜂鸣器发声频率
参 数:无
返回值 :无
********************************************/
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B (void)
{
if(step == 0xff) //up mode
TACTL |= MC_1;
step++;
switch(step)
{
case 0: TACCR0 = 5000; P2OUT = ~1; break; // 100Hz
case 1: TACCR0 = 2500; P2OUT = ~2; break; // 200Hz
case 2: TACCR0 = 1250; P2OUT = ~3; break; // 400Hz
case 3: TACCR0 = 625; P2OUT = ~4; break; // 800Hz
case 4: TACCR0 = 500; P2OUT = ~5; break; // 1KHz
case 5: TACCR0 = 250; P2OUT = ~6; break; // 2KHz
case 6: TACCR0 = 167; P2OUT = ~7; break; // 3KHz
case 7: TACCR0 = 125; P2OUT = ~8; break; // 4KHz
case 8: TACCR0 = 100; P2OUT = ~9; break; // 5KHz
case 9: TACCR0 = 83; P2OUT = ~10; break; // 6KHz
case 10: TACCR0 = 71; P2OUT = ~11; break; // 7KHz
case 11: TACCR0 = 63; P2OUT = ~12; break; // 8KHz
case 12: TACCR0 = 56; P2OUT = ~13; break; // 9KHz
case 13: TACCR0 = 50; P2OUT = ~14; break; // 10KHz
case 14: TACCR0 = 33; P2OUT = ~15; break; // 15KHz
case 15: TACCR0 = 25; P2OUT = ~16; break; // 20KHz
case 16: step = 0xff; // 循环播放
}
}
建议你把P6OUT=((P6OUT1)|BIT0); 这个拆分出来 先定义一个变量,然后 移位。 最后把变量赋值给P6OUT.
51单片机
应用最广泛的8位单片机当然也是初学者们最容易上手学习的单片机,最早由Intel推出,由于其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“经典”,为以后的其它单片机的发展奠定了基础。
51单片机之所以成为经典,成为易上手的单片机主要有以下特点:
特性
1. 从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,处理对象不是字或字节而是位。不但能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。
2. 同时在片内RAM区间还特别开辟了一个双重功能的地址区间,使用极为灵活,这一功能无疑给使用者提供了极大的方便,
3. 乘法和除法指令,这给编程也带来了便利。很多的八位单片机都不具备乘法功能,作乘法时还得编上一段子程序调用,十分不便。
缺点
(虽然是经典但是缺点还是很明显的)
1. AD、EEPROM等功能需要靠扩展,增加了硬件和软件负担
2. 虽然I/O脚使用简单,但高电平时无输出能力,这也是51系列单片机的最大软肋
3. 运行速度过慢,特别是双数据指针,如能改进能给编程带来很大的便利
4. 51保护能力很差,很容易烧坏芯片
应用范围目前在教学场合和对性能要求不高的场合大量被采用
使用最多的器件8051、80C51
MSP430单片机
MSP430系列单片机是德州仪器1996 年开始推向市场的一种16位超低功耗的混合信号处理器,给人们留下的最大的亮点是低功耗而且速度快,汇编语言用起来很灵活,寻址方式很多,指令很少,容易上手。主要是由于其针对实际应用需求,把许多模拟电路、数字电路和微处理器集成在一个芯片上,以提供“单片”解决方案。其迅速发展和应用范围的不断扩大, 主要取决于以下的特点…
特性
1.强大的处理能力,采用了精简指令集(RISC)结构,具有丰富的寻址方式( 7 种源操作数寻址、 4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令;有较高的处理速度,在 8MHz 晶体驱动下指令周期为 125 ns 。这些特点保证了可编制出高效率的源程序
2.在运算速度方面,能在 8MHz 晶体的驱动下,实现 125ns 的指令周期。 16 位的数据宽度、 125ns 的指令周期以及多功能的硬件乘法器(能实现乘加)相配合,能实现数字信号处理的某些算法(如 FFT 等)
3.超低功耗方面,MSP430 单片机之所以有超低的功耗,是因为其在降低芯片的电源电压及灵活而可控的运行时钟方面都有其独到之处。电源电压采用的是 1.8~3.6V 电压。因而可使其在 1MHz 的时钟条件下运行时, 芯片的电流会在 200~400uA 左右,时钟关断模式的最低功耗只有 0.1uA
缺点
1.个人感觉不容易上手,不适合初学者入门,资料也比较少,只能跑官网去找
2.占的指令空间较大,因为是16位单片机,程序以字为单位,有的指令竟然占6
个字节。虽然程序表面上简洁, 但与pic单片机比较空间占用很大
应用范围在低功耗及超低功耗的工业场合应用的比较多
使用最多的器件MSP430F系列、MSP430G2系列、MSP430L09系列
TMS单片机
这里也提一下TMS系列单片机,虽不算主流。由TI推出的8位CMOS单片机,具有多种存储模式、多种外围接口模式,适用于复杂的实时控制场合。虽 然没STM32那么优秀,也没MSP430那么张扬,但是TMS370C系列单片机提供了通过整合先进的外围功能模块及各种芯片的内存配置,具有高性价比 的实时系统控制。同时采用高性能硅栅CMOS EPROM和EEPROM技术实现。低工作功耗CMOS技术,宽工作温度范围,噪声抑制,再加上高性能和丰富的片上外设功能,使TMS370C系列单片机在汽车电子,工业电机控制,电脑,通信和消费类具有一定的应用。
是否正常工作可能会涉及到内部功能模块或者管脚,一般以管脚出故障的几率大一些。
可以拆下来与正常的芯片进行测量比较可以判断个大概。
不过既然怀疑它,不如干脆换掉。一些隐性故障很难判断的。
430单片机流水灯的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:430单片机流水灯