|
基于stm8 光電門測速系統(tǒng) 能夠與labview 和串口助手通信
單片機(jī)源程序如下:
- #include "stm8s.h"
- void GPIO_init_Config()
- {
- GPIO_DeInit(GPIOB);
- GPIO_DeInit(GPIOA);
- GPIO_DeInit(GPIOC);
- GPIO_Init(GPIOB,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_HIGH_FAST);
- GPIO_Init(GPIOA,GPIO_PIN_HNIB,GPIO_MODE_IN_PU_IT);
- }
- //延時(shí)函數(shù),單位毫秒
- void delay_ms(u16 i)
- {
- TIM2_DeInit();
- TIM2_TimeBaseInit(TIM2_PRESCALER_2,999);
- while(i--)
- {
- TIM2_Cmd(ENABLE);
- while(TIM2_GetFlagStatus(TIM2_FLAG_UPDATE)!=1);
- TIM2_ClearFlag(TIM2_FLAG_UPDATE);
- TIM2_Cmd(DISABLE);
- }
- }
- //TIM2初始化函數(shù)
- void TIM3_Cap_Init()
- {
- TIM3_DeInit();
- TIM3_TimeBaseInit(TIM3_PRESCALER_2,65535);
- TIM3_ICInit(TIM3_CHANNEL_1,TIM3_ICPOLARITY_FALLING ,TIM3_ICSELECTION_DIRECTTI,TIM3_ICPSC_DIV1,0x00);
- TIM3_ITConfig(TIM3_IT_CC1|TIM3_IT_UPDATE,ENABLE);
- TIM3_CCxCmd(TIM3_CHANNEL_1,ENABLE);
- enableInterrupts();
- TIM3_Cmd(ENABLE);
- }
- //串口配置函數(shù)
- void USART_Init()
- {
- UART2_DeInit();
- UART2_Init((u32)9600,
- UART2_WORDLENGTH_8D,
- UART2_STOPBITS_1,
- UART2_PARITY_NO,
- UART2_SYNCMODE_CLOCK_DISABLE,
- UART2_MODE_TXRX_ENABLE);
- UART2_Cmd(ENABLE);
- }
- void USART_SendByte(u8 TxDate)
- {
- UART2_SendData8(TxDate);
- while(!UART2_GetFlagStatus(UART2_FLAG_TXE));
- }
- void USART_Write(u8* TxDate,u16 len)
- {
- u16 i;
- for(i=0;i<len;i++)
- {
- USART_SendByte(TxDate[i]);
- }
- }
- u16 Cap_Val=0;
- u8 Cap_Sta=0;
- #pragma vector=18
- __interrupt void TIMER_IRQHander(void)
- {
- if((Cap_Sta&0X80)==0)
- {
- #pragma vector=17
- if (TIM3_GetITStatus(TIM3_IT_UPDATE)==SET)
- {
- if(Cap_Sta&0X40)
- {
- if((Cap_Sta&0X3F)==0X3F)
- {
- Cap_Sta|=0X80;
- Cap_Val=0XFFFF;
- }
- else
- {
- Cap_Sta++;
- }
- }
- TIM3_ClearITPendingBit(TIM3_IT_UPDATE);
- }
- if(TIM3_GetITStatus(TIM3_IT_CC1)==SET)
- {
- if(Cap_Sta&0X40)//捕獲到一個(gè)上升沿
- {
- Cap_Sta|=0X80;//標(biāo)記成功捕獲到一次低電平脈寬
- Cap_Val=TIM3_GetCapture1();
- TIM3_OC1PolarityConfig(TIM3_ICPOLARITY_FALLING);//設(shè)置為下降沿觸發(fā)
- }
- else//還未開始,第一次捕獲下降沿
- {
- Cap_Sta=0;
- Cap_Val=0;
- TIM3_SetCounter(0);
- Cap_Sta|=0X40;//標(biāo)記捕獲到了下降沿
- TIM3_OC1PolarityConfig(TIM3_ICPOLARITY_RISING);//設(shè)置為上升沿觸發(fā)
- }
- }
- }
- TIM3_ClearITPendingBit(TIM3_IT_CC1);
- }
- //主函數(shù)
- int main(void)
- {
- u32 temp=0;
- u8 s[10];
- GPIO_init_Config();
- TIM3_Cap_Init();
- USART_Init();
- GPIO_WriteHigh(GPIOB,GPIO_PIN_LNIB);
- while(1)
- {
- if(Cap_Sta&0X80)
- {
- temp=Cap_Sta&0X3F;
- temp*=65536;
- temp+=Cap_Val;
- Cap_Sta=0;
- Cap_Val=0;
- }
- if(temp!=0)
- {
- GPIO_WriteReverse(GPIOB,GPIO_PIN_4);
- //temp=0;
- delay_ms(temp);
- //GPIO_WriteReverse(GPIOB,GPIO_PIN_LNIB);
- //delay_ms(temp/100000);
- }
-
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
定時(shí)器捕獲按鍵時(shí)長控制燈閃爍間隔.7z
(425.53 KB, 下載次數(shù): 15)
2019-5-31 19:43 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|