久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
MSP430F5529單片機程序整理(串口、AD、定時器等)
[打印本頁]
作者:
ccchhh
時間:
2019-11-25 19:07
標題:
MSP430F5529單片機程序整理(串口、AD、定時器等)
#include <msp430.h>
#include <stdint.h>
#include "uart.h"
#include "Flash.h"
#include "ad.h"
#include "stdio.h"
#include "string.h"
#define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
#define ledon P8OUT &= ~BIT0
#define ledoff P8OUT |= BIT0
uint8_t led_flag=0;
uint8_t sendstr[]={"hello\r\n"};
uint8_t cstr[]={"\r\n"};
uint8_t FlashSetBuf[FLASH_LEN]={"123456"};
uint8_t RxBuf1[FLASH_LEN];
uint16_t Cap_num;
uint16_t num_start=0,num_end=0;
void p1_isr_init(void);
void timerA0_init(void);
void initClock(void);
void Init_Rtc(void);
void TA0_PWM(uint16_t per,uint16_t duty);
void TA1_CAP(void);
void main(void)
{
uint16_t len;
uint16_t value;
WDTCTL = WDTPW + WDTHOLD; //關閉看門狗定時器
uint8_t sec,min,hour;
uint8_t sstr[30];
uint8_t adstr[30];
uint8_t capstr[30];
float v;
// initClock();
P8DIR |= BIT0; //設置P8.0口為輸出模式
ledoff;
p1_isr_init();
// timerA0_init();
UART_Init();
Init_Rtc();
AD_Init();
FlashErase(FLASH_ADR,WORD,FLASH_LEN); //擦除寫入Flash中的數據
FlashWriteWord(FLASH_ADR,FlashSetBuf,FLASH_LEN); //雙字節寫入函數
FlashRead(FLASH_ADR,RxBuf1,WORD,FLASH_LEN); //Flash讀取函數
bcUartSend(RxBuf1,FLASH_LEN);
bcUartSend(cstr,2);
TA0_PWM(1049-1,500-1);
TA1_CAP();
while (1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的數據長度
bcUartSend(USART_RX_BUF,len);
bcUartSend(cstr,2);
USART_RX_STA=0;
}
ADC12CTL0 |= ADC12SC; //開始采樣轉換
value = ADC12MEM0; //把結果賦給變量
v=value*3.0/4096;
sec = RTCSEC;
min = RTCMIN;
hour= RTCHOUR;
sprintf(sstr,"Time: %02x:%02x:%02x \r\n",hour,min,sec);
sprintf(adstr,"AD: %d V:%.2fV \r\n",value,v);
if(Cap_num)
{
sprintf(capstr,"Cap: %d \r\n",Cap_num);
bcUartSend(capstr,strlen(capstr));
TA1CCTL1 |=CCIE;
Cap_num=0;
}
bcUartSend(adstr,strlen(adstr));
bcUartSend(sstr,strlen(sstr));
delay_ms(1000);
}
}
void timerA0_init(void)
{
TA0CTL |= MC_1 + TASSEL_2 + TACLR; //時鐘為SMCLK,比較模式,開始時清零計數器 smclk 12MHZ aclk
TA0CCTL0 = CCIE; //比較器中斷使能
TA0CCR0 = 1000; //比較值設為1000,相當于1ms的時間間隔
__enable_interrupt();
}
void p1_isr_init(void)
{
P1REN |= BIT2; // 使能P1.2上拉電阻
P1OUT |= BIT2; // P1.2口置高電平
P1IES &= ~BIT2; // 中斷沿設置(下降沿觸發)
P1IFG &= ~BIT2; // 清P1.2中斷標志
P1IE |= BIT2; // 使能P1.2口中斷
__bis_SR_register(GIE); // 進入低功耗模式4 開中斷
}
// P1中斷函數
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
delay_ms(10);
if((P1IN & BIT2)==0)
{
if(!led_flag)ledon; //改變LED1燈狀態
else ledoff;
led_flag=~led_flag;
}
P1IFG &= ~BIT2; //清P1.2中斷標志位
}
uint16_t t=0;
/************************定時器中斷函數********************************/
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
t++;
if(t>1000)
{
t=0;
P8OUT ^= BIT0; //形成閃燈效果
}
//P8OUT ^= BIT0; //形成閃燈效果
}
void initClock(void)
{
UCSCTL6 &= ~XT1OFF; //啟動XT1
P5SEL |= BIT2 + BIT3; //XT2引腳功能選擇
UCSCTL6 &= ~XT2OFF; //打開XT2
PMMCTL0_H = 0xA5; //開PMM電源管理
SVSMLCTL |= SVSMLRRL_1 + SVMLE; //配置SVML電壓
PMMCTL0 = PMMPW + PMMCOREV_2; //配置內核電壓
while((PMMIFG & SVSMLDLYIFG ) == 0); //等待設置完成
PMMIFG &= ~(SVMLVLRIFG + SVMLIFG + SVSMLDLYIFG);
if((PMMIFG & SVMLIFG) == 1) //判斷內核電壓是否上升到VSVML
while((PMMIFG & SVMLVLRIFG) == 0); //如果沒有等待
SVSMLCTL &= ~SVMLE; //關掉SVML模塊
PMMCTL0_H = 0X00; //鎖存配置
__bis_SR_register(SCG0);
UCSCTL0 = DCO0+DCO1+DCO2+DCO3+DCO4;
UCSCTL1 = DCORSEL_4; //DCO頻率范圍在28.2MHZ以下
UCSCTL2 = FLLD_4 + 1; //D=16,N=1
UCSCTL3 = SELREF_5 + FLLREFDIV_3; //n=8,FLLREFCLK時鐘源為XT2CLK;DCOCLK=D*(N+1)*(FLLREFCLK/n);DCOCLKDIV=(N+1)*(FLLREFCLK/n);
UCSCTL4 = SELA_4 + SELS_3 +SELM_3; //ACLK的時鐘源為DCOCLKDIV,MCLK\SMCLK的時鐘源為DCOCLK
UCSCTL5 = DIVA_5 +DIVS_4; //ACLK由DCOCLKDIV的32分頻得到,SMCLK由DCOCLK的2分頻得到
//最終MCLK:16MHZ,SMCLK:1MHZ,ACLK:32KHZ
__bic_SR_register(SCG0); //Enable the FLL control loop
}
void Init_Rtc(void)
{
// BCD碼日歷格式輸出
RTCCTL01 = RTCBCD + RTCHOLD + RTCMODE + RTCTEV_0;
RTCSEC = 0x54; //初始化秒
RTCMIN = 0x59 ; //初始化分鐘
RTCHOUR =0x21; //初始化小時
RTCDOW = 0x02 ;
RTCDAY = 0x24; //日期初始化
RTCMON = 0x11 ; //初始化月份
RTCYEAR = 0x2005; //初始化年份
RTCCTL01 &= ~RTCHOLD; //打開RTC模塊
}
void TA0_PWM(uint16_t per,uint16_t duty)
{
//Initialize
P1SEL |= BIT2+BIT3+BIT4+BIT5; //從P1.2輸出
P1DIR |= BIT2+BIT3+BIT4+BIT5;
//初始化定時器
TA0CTL |= TASSEL_2 + MC_1 ;
TA0CCTL0 = OUTMOD_7 + CCIE;
TA0CCTL1 = OUTMOD_7;
TA0CCTL2 = OUTMOD_7;
TA0CCTL3 = OUTMOD_7;
TA0CCTL4 = OUTMOD_7;
TA0CCR0 = per/*Period*/; //Change me
TA0CCR1 = duty/*Duty*/; //Change me
TA0CCR2 = duty/*Duty*/; //Change me
TA0CCR3 = duty/*Duty*/; //Change me
TA0CCR4 = duty/*Duty*/; //Change me
__enable_interrupt();
}
void TA1_CAP(void)
{
P2DIR&=~BIT0; //捕捉P2.0口 cc1
P2SEL |= BIT0;
P2REN |= BIT0; //啟用P2.0內部下拉電阻
TA1CCTL1 |= CAP + CM_1 + CCIS_0 + SCS + CCIE;//捕獲模式,上升都捕獲,選擇CCI2A,同步,捕獲中斷開
TA1CTL |= TASSEL_2 + MC_2 + ID_0 + TACLR; //SMCLK=1M,連續計數模式
}
/************************定時器中斷函數********************************/
#pragma vector = TIMER1_A1_VECTOR
__interrupt void Timer_A1 (void)
{
if(TA1CCTL1&CM_1) //捕獲到下降沿
{
TA1CTL|=TACLR;
TA1CCTL1=(TA1CCTL1&(~CM_1))|CM_2; //改為上升沿捕獲:CM1置零,CM0置一
}
else if(TA1CCTL1&CM_2) //捕獲到上升沿
{
Cap_num=TA1CCR1; //記錄下結束時間
TA1CCTL1 &=~CCIE; //改為下降沿捕獲:CM0置零,CM1置一
TA1CTL|=TACLR;
}
}
復制代碼
全部資料51hei下載地址:
myproj0.zip
(235.38 KB, 下載次數: 71)
2019-11-25 19:06 上傳
點擊文件名下載附件
程序
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
91视频免费
|
乳色吐息在线观看
|
麻豆av在线
|
国产精品视频在线免费观看
|
日韩欧美国产不卡
|
免费视频一区二区
|
国产成人a亚洲精品
|
欧美综合国产精品久久丁香
|
亚洲444eee在线观看
|
精品欧美色视频网站在线观看
|
国产91在线 | 中日
|
青青操91
|
欧美日日日日bbbbb视频
|
久久久女女女女999久久
|
日本三级黄视频
|
国产伦精品一区二区三区四区视频
|
中文字幕av网址
|
av激情在线
|
一区二区三区在线播放
|
99免费在线视频
|
国产综合av
|
国产精品一区二区三区四区五区
|
国产一区二区三区亚洲
|
亚洲午夜精品一区二区三区
|
国产精品区二区三区日本
|
日韩高清在线观看
|
午夜精品一区二区三区在线观看
|
久久一区二区精品
|
91精品国产色综合久久不卡98
|
久久久久久免费免费
|
国产视频一二三区
|
正在播放国产精品
|
婷婷久
|
国产欧美日韩综合精品一区二区
|
久久久久久国产精品
|
黑人巨大精品欧美一区二区免费
|
亚洲欧美日韩精品久久亚洲区
|
18成人在线观看
|
日本黄色大片免费
|
久草视频网站
|
91社区在线高清
|