msp430入门小程序Word格式.docx

上传人:b****3 文档编号:16758092 上传时间:2022-11-25 格式:DOCX 页数:47 大小:30.92KB
下载 相关 举报
msp430入门小程序Word格式.docx_第1页
第1页 / 共47页
msp430入门小程序Word格式.docx_第2页
第2页 / 共47页
msp430入门小程序Word格式.docx_第3页
第3页 / 共47页
msp430入门小程序Word格式.docx_第4页
第4页 / 共47页
msp430入门小程序Word格式.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

msp430入门小程序Word格式.docx

《msp430入门小程序Word格式.docx》由会员分享,可在线阅读,更多相关《msp430入门小程序Word格式.docx(47页珍藏版)》请在冰豆网上搜索。

msp430入门小程序Word格式.docx

flag){P1OUT=BIT0;

}//中断服务程序

elseif(flag){P1OUT=BIT6;

}//其他任务

#pragma 

vector=PORT1_VECTOR

__interrupt 

void 

Port_1(void)

{P1IFG=0;

//多源中断,需靠软件清除P1IFG

flag=1;

//置任务标志

_BIC_SR_IRQ(LPM3_bits);

//将CPU从睡眠模式唤醒

voidIint_Port1(void)

{P1DIR|=BIT0+BIT6;

P1DIR&

=~BIT3;

//设置为输入方向

P1SEL&

//设置为普通I/O口功能

P1IES|=BIT3;

//选择下降沿触发

P1IE|=BIT3;

//打开中断允许

P1IFG=0;

//P1IES的切换可能使P1IFG置位,需清除

_BIC_SR_IRQ(LPM3_bits);

//将CPU从睡眠模式唤醒

//端口1的中断服务历程

#pragmavector=PORT1_VECTOR

__interruptvoidPort_1(void)

{

P2OUT^=0x01;

//P1.0状态翻转

P1IFG&

=~0x10;

//P1.4中断标志清零

}//ADC

io430.h"

#defineuintunsignedint

#defineucharunsignedchar

uintad;

voiddelayl(uintn)

{uintj,k;

for(j=n;

j>

0;

j--)

for(k=100;

k>

k--);

voiddis(uintx,uinty,uintz)

{P1DIR=0xff;

P1OUT=0x00;

P2OUT=0x07;

P2OUT|=BIT3;

P1OUT=x;

P2OUT&

=~BIT0;

delayl

(1);

P2OUT|=BIT0;

P1OUT=y;

=~BIT1;

P2OUT|=BIT1;

P1OUT=z;

=~BIT2;

P2OUT|=BIT2;

P2OUT&

voidadc()

{uinti,j=10;

P1DIR=0x00;

P1REN=0xff;

//P2OUT&

//for(i=511;

i>

i--){P2OUT^=BIT1;

while(j--);

ad=P1IN;

P1REN=0x00;

{uintx,y,z;

P2DIR=0xff;

P2REN=0x07;

while

(1){//ad=345;

adc();

x=ad/100;

y=ad/10%10;

z=ad%10;

dis(x,y,z);

比较器a

比较器A模块 

以下图可以看出比较器A的结构大概可以分4部分构成,分别为模拟输入,比较器A核心,低通虑波器,基准电压部分和中断部分组成。

首先,整个比较器A的工作必需由CAON位置为1时才能工作的,此位属CACTL1控制寄存器。

单片机上电时此位是为0的,也就是说比较器是不工作的。

以下大概讲述几个部分电路的功能和一些相关信息。

模拟输入电路:

外部模拟引脚信号CA0,CA1(正负端)可以分别由P2CA0,P2CA1位控制开或关。

经过软件的设置可以分别与内部的几个基准电压进行比较(0.5VCC,0.25VCC,三极管门值电压)或外部其中的电压进行比较。

应用的硬件比较可以分为以下三种组合:

两个外部引脚输入信号进行比较

其中一个外部引脚信号与内部的0.5VCC或0.25VCC比较

其中一个外部引脚信号与内部基准电压比较

参考电压发生器

参考电压电路是可以由CARSEL,CARERF0,CARERF1位来控制电压的产生。

通过软件设置可以选择几种电压输出到比较器的输入中作为比较,当然此参考电压也可以通过单片机的引脚往外部提供参考电压之用。

比较器A核心

比较器CAON位控制开关,CAEX位控制位控制方向。

低通虑波器

低通虑波器只需一个CAF位来控制此虑波器的功能开与关。

此虑波器功能是用于消除比较器输出信号的毛剌,以保证信号的质量和中断请求的可靠性。

中断请求

比较器A模块是具有中断功能的,如比较器功能CAIE中断允许开了,在CAIF信号产生时将生产中断(当然GIE要为1时)。

比较器A模块是具有中断独立向量的,是一个单独的中断,CUP接受请求后会硬件自动清除中断标志位CAIFG。

比较器模块相关寄存器说明

CACTL1 

比较器控制寄存器1

CAEX:

控制内部比较器A的输入信号和输出信号的方向

CARSEL:

控制内部参考电压加到比较器A的正输入端还是负输入端 

由结构图可以看出,CAEX,CARSEL在不同设置时,比较器A输入端的所加的参考电压是有不同的.

请参考以下列表:

----------------------------------- 

CARSEL 

CAEX 

参考电压接入端

内部参考源加到比较器的正端

内部参考源加到比较器的负端 

CAREF1,CAREF0 

选择参考源:

使用外部参考

选择0.25VCC为参考电压

选择0.5VCC为参考电压

选择二极管电压为参考电压,须参见具体IC的资料

CAON:

控制比较器A的打开与关闭

关闭比较器工作

打开比较器工作

CAIES:

中断边沿触发模式选择

上升沿使中断标志CAIFG置位

下降沿使中断标志CAIFG置位

CAIE:

比较器中断允许

禁止中断

允许中断

CAIFG:

比较器中断标志

没有中断请求

有中断请求标志信号

CACTL2 

比较器控制寄存器2

P2CA1:

控制输入端CA1

 0 

外部引脚信号不与比较器A连接

 1 

外部引脚信号与比较器A连接

P2CA0:

控制输入端CA0

CAF:

选择比较器输出端是否经过RC低通滤波器

开通RC低通滤波器

直通信号

CAOUT:

比较器A输出的信号

 0CA0小于CA1

 1CA0大于CA1

CAPD 

端口禁止寄存器

  比较器A模块的输入输出与IO口共用引脚,可以控制IO端口输入缓冲器的通断开关.CAPD控制位初始化为0,则端口输入缓冲器有效.当相应位为1时,端口输入缓冲器无效。

程序范例:

msp430x11x1.h>

voidmain(void)

 {

  WDTCTL=WDTPW+WDTHOLD;

    // 

停止WDT

  CAPD|=0x08;

          // 

断开与IO端口输入

  CACTL2=P2CA0;

         // 

设置P2.3为+comp

  CCTL0=CCIE;

          //CCR0 

  TACTL=TASSEL_2+ID_3+MC_2;

  

//SMCLK/8,计数模式

  _EINT();

            // 

开总中断

 while

(1)// 

循环

  CACTL1=0x00;

没有参考电压

  _BIS_SR(LPM0_bits);

       // 

进入LPM0

  CACTL1=CAREF0+CAON;

     //0.25*Vcc=P2.3, 

比较器开

再次进入LPM0

  CACTL1=CAREF1+CAON;

     //0.5*Vcc=P2.3, 

再次进入 

LPM0

  CACTL1=CAREF1+CAREF0+CAON;

 //0.55VonP2.3,比较器开

 }

//TimerA0interruptserviceroutine

#pragmavector=TIMERA0_VECTOR

__interruptvoidTimer_A(void)

 _BIC_SR_IRQ(LPM0_bits);

      //退出LMP0模式

定时器中断

msp430g2553.h>

inti;

//StopWDT

P1DIR|=0x01;

//P1.0output

CCTL0=CCIE;

//CCR0interruptenabled

CCR0=50000;

TACTL=TASSEL_2+MC_2;

//SMCLK,contmode

i=0;

_BIS_SR(LPM0_bits+GIE);

//EnterLPM0w/interrupt

#pragmavector=TIMER0_A0_VECTOR

if(i>

20){

P1OUT^=0x01;

//ToggleP1.0

//CCR0+=50000;

//AddOffsettoCCR0

i++;

//7528

unsignedinti=1;

voidxie()

P1DIR|=0xff;

P2DIR|=0x07;

=0xfe;

//选中DACA

P1OUT=i;

P2OUT|=0x01;

//选中DACB

P2OUT|=0x02;

//禁止写入

P2OUT|=0x04;

//

xie();

{P1DIR&

P1REN=BIT3;

P1OUT|=BIT3;

(P1IN&

BIT3)){i=i<

<

1;

while(!

BIT3));

xie();

if(i>

129)i=1;

P1OUT^=BIT6;

//按键中断

#include 

main(void)

WDTCTL 

WDTPW 

WDTHOLD;

// 

Stop 

watchdog 

timer

P1DIR 

|= 

0x01;

Set 

P1.0 

to 

output 

direction

P1OUT 

0x08;

P1.3set, 

else 

reset

P1REN 

P1IE 

P1.3 

interrupt 

enabled

P1IES 

Hi/lo 

edge

P1IFG 

&

~0x08;

IFG 

cleared

_BIS_SR(LPM4_bits 

GIE);

Enter 

LPM4 

w/interrupt

Port 

service 

routine

^= 

toggle

P1.4 

}

//1602

in430.h"

#defineuintunsignedint

#defineucharunsignedchar

uchartable[]="

kaigeshuaiqi"

;

uchartable1[]="

hellowelcome"

uintm=1;

voiddelay(uintz)

{uinti,j;

for(i=z;

i--)

for(j=100;

j--);

voidwrite_com(ucharcom)//写入

=~BIT4;

//LCD选择输入命令

P1OUT=com;

//向P0口输入命令

delay(5);

//延时

P2OUT|=BIT5;

//打开LCD使能

//一个高脉冲

=~BIT5;

//关闭LCD使能

voidwrite_data(uchardate)

P2OUT|=BIT4;

//设置为输入数据

P1OUT=date;

//将数据赋给P0口

//置高

//高脉冲

//置低完成高脉冲

voidinit()

write_com(0x38);

//设置16x2显示5x7点阵,8位数据接口

write_com(0x0c);

//设置开始显示不显示光标

write_com(0x06);

//写一个字符后地址指针加1

write_com(0x01);

//显示清零数据指针清零

voiddis(uintx)

{uinty,z,k;

y=x/100;

z=x/10%10;

k=x%10;

write_com(0x86);

//将数据指针第一行第一个字处,

write_data(y+'

0'

);

write_data(z+'

write_data(k+'

delay(100);

{uintnum;

P1DIR=0xff;

P2DIR=0xff;

while

(1)

{init();

write_com(0x84);

for(num=0;

num<

12;

num++)

//{

{write_data(table[num]);

delay(1000);

write_com(0x80+0X44);

13;

{write_data(table1[num]);

//m++;

//delay(5);

//}

//write_com(0x80+0x40);

//定义指针位置

//for(num=0;

//write_data(table1[num]);

//write_data(m+'

+10);

//dis(num);

num++;

//if(num>

999){num=0;

while

(1){

4;

write_com(0x18);

//write_com(0x1c);

//右移

delay(2000);

//write_com(0x18);

//左移

write_com(0x1c);

}}

//12864

//main()

lcd12864.h"

lcd12864.c"

unsignedcharconstt[]={"

床前明月光,"

"

举头望明月,"

凝是地上霜。

"

低头思故乡。

};

voidmain()

P1DIR|=0xff;

P2DIR|=0xff;

P2SEL=0;

io_init();

lcd_init();

chn_disp1(t);

//Write_Num(0x86,767,0);

while

(1);

*

LCD12864程序

程序说明:

本程序为带字库的LCD12864驱动程序,选择LCD12864的串口工作模式。

利用

本程序LCD12864可显示汉字、数字和数组。

*/

//MSP430G2433LCD12864

//+-------------------++----+

//||||

//||||

//|||RS|--VCC

//|P2.6|-->

|R/W|

//|P2.7|-->

|CLK|

//|||RST|--VCC

//|||PSB|--GND

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

msp430G2553.h"

LCD12864.h"

unsignedintDisp_Tab[8];

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

*名称:

io_init(void)

*功能:

LCD12864所用的IO口初始化

*入口参数:

*出口参数:

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

voidio_init(void)

P2SEL&

=~(BIT6+BIT7);

P2DIR|=BIT6+BIT7;

//P1OUT=0;

P1SEL=0xFF;

//P1SEL|=BIT6;

P1DIR=0;

wr_lcd(uchrfunc,uchrdata)

往LCD12864写入一个字节。

func=comm,则写入的是命令;

func=commdat,则写入的是数据

func和data

v

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1