1、flag) P1OUT=BIT0; /中断服务程序 else if(flag) P1OUT=BIT6; /其他任务#pragmavector=PORT1_VECTOR_interruptvoidPort_1(void) P1IFG=0; /多源中断,需靠软件清除P1IFG flag=1; /置任务标志 _BIC_SR_IRQ(LPM3_bits); /将CPU从睡眠模式唤醒void Iint_Port1(void) P1DIR|=BIT0+BIT6; P1DIR&=BIT3; /设置为输入方向 P1SEL& /设置为普通I/O口功能 P1IES|=BIT3; /选择下降沿触发 P1IE|=BI
2、T3; /打开中断允许 P1IFG=0; /P1IES的切换可能使P1IFG置位,需清除 _BIC_SR_IRQ(LPM3_bits); /将CPU从睡眠模式唤醒/ 端口1的中断服务历程 #pragma vector=PORT1_VECTOR _interrupt void Port_1(void) P2OUT = 0x01; / P1.0 状态翻转 P1IFG &= 0x10; / P1.4 中断标志清零 /ADCio430.h#define uint unsigned int #define uchar unsigned charuint ad;void delayl(uint n)uin
3、t j,k;for(j=n;j0;j-)for(k=100;kk-);void dis(uint x,uint y,uint z)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&void adc() uint i,j=10; P1DIR=0x00;P1REN=0xff; /P2OUT& /for(i=511;ii-)P2OUT=BIT1;while
4、(j-); ad=P1IN;P1REN=0x00;uint x,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的,也就是说比较器是不工作的。以下大概讲述几个部分电路的功能和一些相关信息。模拟输入电路:外部模拟引
5、脚信号CA0,CA1(正负端)可以分别由P2CA0,P2CA1位控制开或关。经过软件的设置可以分别与内部的几个基准电压进行比较(0.5VCC,0.25VCC,三极管门值电压)或外部其中的电压进行比较。应用的硬件比较可以分为以下三种组合:两个外部引脚输入信号进行比较其中一个外部引脚信号与内部的0.5VCC或0.25VCC比较其中一个外部引脚信号与内部基准电压比较参考电压发生器参考电压电路是可以由CARSEL,CARERF0,CARERF1位来控制电压的产生。通过软件设置可以选择几种电压输出到比较器的输入中作为比较,当然此参考电压也可以通过单片机的引脚往外部提供参考电压之用。比较器A核心比较器CA
6、ON位控制开关,CAEX位控制位控制方向。低通虑波器低通虑波器只需一个CAF位来控制此虑波器的功能开与关。此虑波器功能是用于消除比较器输出信号的毛剌,以保证信号的质量和中断请求的可靠性。中断请求比较器A模块是具有中断功能的,如比较器功能CAIE中断允许开了,在CAIF信号产生时将生产中断(当然GIE要为1时)。比较器A模块是具有中断独立向量的,是一个单独的中断,CUP接受请求后会硬件自动清除中断标志位CAIFG。比较器模块相关寄存器说明CACTL1比较器控制寄存器1CAEX:控制内部比较器A的输入信号和输出信号的方向CARSEL:控制内部参考电压加到比较器A的正输入端还是负输入端由结构图可以看
7、出,CAEX,CARSEL在不同设置时,比较器A输入端的所加的参考电压是有不同的.请参考以下列表:-CARSELCAEX参考电压接入端 0 0 内部参考源加到比较器的正端 1 内部参考源加到比较器的负端CAREF1, CAREF0选择参考源:0使用外部参考1选择0.25VCC为参考电压2选择0.5VCC为参考电压3选择二极管电压为参考电压,须参见具体IC的资料CAON:控制比较器A的打开与关闭关闭比较器工作打开比较器工作CAIES:中断边沿触发模式选择上升沿使中断标志CAIFG置位下降沿使中断标志CAIFG置位CAIE:比较器中断允许禁止中断允许中断CAIFG:比较器中断标志没有中断请求有中断
8、请求标志信号CACTL2比较器控制寄存器2P2CA1:控制输入端CA10外部引脚信号不与比较器A连接1外部引脚信号与比较器A连接P2CA0:控制输入端CA0CAF:选择比较器输出端是否经过RC低通滤波器开通RC低通滤波器直通信号CAOUT:比较器A输出的信号0 CA0小于CA11 CA0大于CA1CAPD端口禁止寄存器比较器A模块的输入输出与IO口共用引脚,可以控制IO端口输入缓冲器的通断开关.CAPD控制位初始化为0,则端口输入缓冲器有效.当相应位为1时,端口输入缓冲器无效。程序范例:msp430x11x1.hvoid main (void)WDTCTL = WDTPW + WDTHOLD;
9、/停止WDTCAPD |= 0x08;/断开与IO端口输入CACTL2 = P2CA0;/设置P2.3为+compCCTL0 = CCIE;/ CCR0TACTL = TASSEL_2 + ID_3 + MC_2;/ SMCLK/8,计数模式_EINT();/开总中断while (1) /循环CACTL1 = 0x00;没有参考电压_BIS_SR(LPM0_bits);/进入LPM0CACTL1 = CAREF0 + CAON;/ 0.25*Vcc=P2.3,比较器开再次进入LPM0CACTL1 = CAREF1 + CAON;/ 0.5*Vcc=P2.3,再次进入LPM0CACTL1 = C
10、AREF1 + CAREF0 + CAON;/ 0.55V on P2.3,比较器开/ Timer A0 interrupt service routine#pragma vector=TIMERA0_VECTOR_interrupt void Timer_A (void)_BIC_SR_IRQ(LPM0_bits);/退出LMP0模式定时器中断msp430g2553.hint i; / Stop WDT P1DIR |= 0x01; / P1.0 output CCTL0 = CCIE; / CCR0 interrupt enabled CCR0 = 50000; TACTL = TASSE
11、L_2 + MC_2; / SMCLK, contmode i=0; _BIS_SR(LPM0_bits + GIE); / Enter LPM0 w/ interrupt#pragma vector=TIMER0_A0_VECTOR if(i20) P1OUT = 0x01; / Toggle P1.0 /CCR0 += 50000; / Add Offset to CCR0 i+;/7528unsigned int i=1;void xie() P1DIR |= 0xff; P2DIR|=0x07;=0xfe;/选中DACA P1OUT=i; P2OUT|=0x01;/选中DACB P2O
12、UT|=0x02;/禁止写入 P2OUT|=0x04;/ xie(); P1DIR&P1REN=BIT3;P1OUT|=BIT3;(P1IN&BIT3)i=i129)i=1;P1OUT=BIT6;/按键中断#includemain(void)WDTCTL=WDTPW+WDTHOLD;/StopwatchdogtimerP1DIR|=0x01;SetP1.0tooutputdirectionP1OUT0x08;P1.3set,elseresetP1RENP1IEP1.3interruptenabledP1IESHi/loedgeP1IFG&0x08;IFGcleared_BIS_SR(LPM4_
13、bitsGIE);EnterLPM4w/interruptPortserviceroutine=toggleP1.4 /1602in430.h#define uint unsigned int#define uchar unsigned char uchar table=kaigeshuaiqi;uchar table1=hello welcomeuint m=1;void delay(uint z)uint i,j;for(i=z;i-)for(j=100;j-);void write_com(uchar com) /写入=BIT4; /LCD 选择输入命令P1OUT=com; /向P0 口
14、输入命令delay(5); /延时P2OUT|=BIT5; /打开LCD 使能 /一个高脉冲=BIT5; /关闭LCD 使能void write_data(uchar date) P2OUT|=BIT4; /设置为输入数据P1OUT=date; /将数据赋给P0 口 /置高 /高脉冲 /置低完成高脉冲void init()write_com(0x38); /设置16x2 显示5x7 点阵,8 位数据接口write_com(0x0c); /设置开始显示不显示光标write_com(0x06); /写一个字符后地址指针加1write_com(0x01); /显示清零数据指针清零void dis(u
15、int x)uint y,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); uint num;P1DIR=0xff;P2DIR=0xff;while(1)init();write_com(0x84);for(num=0;num999)num=0;while(1)4;write_com(0x18);/write_com(0x1c);/右移delay(2000);/write_com(0x18);/左移write_co
16、m(0x1c);/12864/main()lcd12864.hlcd12864.cunsigned char const t=床前明月光, 举头望明月, 凝是地上霜。 低头思故乡。 ;void main() P1DIR|=0xff; P2DIR|=0xff; P2SEL=0; io_init(); lcd_init (); chn_disp1(t); /Write_Num(0x86,767,0);while(1);* LCD12864程序 程序说明:本程序为带字库的LCD12864驱动程序,选择LCD12864的串口工作模式。利用 本程序LCD12864可显示汉字、数字和数组。*/ MSP43
17、0G2433 LCD12864/ +-+ +-+/ | | | |/ | | | | / | | | RS|-VCC/ | P2.6|-|R/W |/ | P2.7|-|CLK | / | | | RST|-VCC/ | | | PSB|-GND/*msp430G2553.hLCD12864.hunsigned int Disp_Tab8;/* 名 称:io_init(void)* 功 能:LCD12864所用的IO口初始化* 入口参数:无* 出口参数:*/void io_init(void) P2SEL &= (BIT6+BIT7); P2DIR |= BIT6+BIT7; /P1OUT =0; P1SEL = 0xFF; /P1SEL|=BIT6; P1DIR = 0;wr_lcd(uchr func,uchr data)往LCD12864写入一个字节。func=comm,则写入的是命令; func=commdat,则写入的是数据func和datav
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1