娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年09月16日(星期一)

2019年09月16日 | STM8S學(xué)習(xí)03——寄存器版本的一些程序

發(fā)布者:達(dá)文西happy 來源: eefocus關(guān)鍵字:STM8S  寄存器版本  空程序 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

/*

一、空程序

*/

#include "stm8s208rb.h"

void delay(unsigned int t)

{

while(t--);

}

main()

{

PG_ODR = 0xff;

PG_DDR = 0xff;

PG_CR1 = 0xff;

PG_CR2 = 0x00;


while(1)

{

PG_ODR = 0x00;

delay(50000);

PG_ODR = oxff;

delay(50000);

}

}





/*

二、LED燈閃爍

*/

#include "stm8s208r.h"

void delay(unsigned int time);

void main(void)

{

PB_DDR |= 0X01; //選擇輸出模式

PB_CR1 |= 0X01; //推挽輸出模式

PB_CR2 |= 0X00; //低速輸出模式

while(1)

{

PB_ODR &= 0Xfe; //小燈亮

delay(50000); //調(diào)用延時函數(shù)

PB_ODR |= 0x01; //小燈滅

delay(50000); //調(diào)用延時函數(shù)

}

}

/*****************延時子程序*******************/

void delay(unsigned int time)

{

while(time--); //在此處循環(huán)

}


/*

三、跑馬燈

*/

#includde "stm8s208r.h"

void delay(unsigned int time);

void main(void)

{

unsigned char i = 0;

PB_ODR = 0XFF; //設(shè)置輸出寄存器的輸出數(shù)值,初始化小燈全滅

PB_DDR = 0XFF; //設(shè)置I/O口B為輸出

PB_CR1 = 0XFF; //設(shè)置I/O口B為推挽方式

PB_CR2 = 0X00; //輸出最快速度為 2 MHZ

while(1)

{

switch(i) //讓小燈從低位到高位一次亮

{

case 0: PB_ODR = 0xfe;

break;

case 1: PB_ODR = 0xfd;

break;

case 2: PB_ODR = 0xfb;

break;

case 3: PB_ODR = 0xf7;

break;

case 4: PB_ODR = 0xef;

break;

case 5: PB_ODR = 0xef;

break;

case 6: PB_ODR = 0xbf;

break;

case 7: PB_ODR = 0x7f;

break;

default: PB_ODR = 0xfe;

}

Delay(40000); //延時約20ms

i++; //讓 i 加 1,下次執(zhí)行程序時進(jìn)入到case

if(i == 8)

{

i = 0;

}

}

}



/************延時子程序*************/

void delay(unsigned int time)

{

while(time--);

}







/*

四、數(shù)組與萬能流水燈

原理:不斷地將數(shù)組中的數(shù)據(jù)輸出到 PB 口改變 LED 的點(diǎn)亮情況,從而實現(xiàn) LED 的各種閃爍花樣。

*/

#include "stm8s208r.h"

/********************** 定義一個二維數(shù)組 *************************/

/*******************裝入使小燈花樣閃爍的數(shù)據(jù)**********************/

unsigned char dis[5][8] = 

{

{0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f},

{0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe},

{0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff},

{0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, 0x00},

{0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f}

};

/****************************函數(shù)聲明*****************************/

void GPIO_Init(void); //GPIO口初始化子程序

void display(void); //用PB口顯示花樣小燈子程序

void delay(unsigned int time); //延時子程序

/******************************主函數(shù)*****************************/

int main(void)

{

GPIO_Init(); //端口初始化

while(1)

{

display(); //時鐘讓小燈顯示花樣

}

}

/***********************GPIO口初始化程序***************************/

void GPIO_Init(void)

{

PB_ODR = 0xff; //初始使小燈全滅

PB_DDR = 0xff; //DDR為0是輸入,1為輸出,此處為PB的8個端口均為輸出

PB_CR1 = 0xff; //推挽輸出模式

PB_CR2 = 0x00; //低速輸出模式

}

/*************************小燈花樣顯示子程序************************/

void display(void)

{

unsigned char i, j;

for(i = 0; i < 5; i++) //循環(huán)二維數(shù)組的行數(shù)

{

for(i = 0; j < 8; j++) //循環(huán)二維數(shù)組每行中的數(shù)據(jù)

{

PB_ODR = dis[i][j]; //把數(shù)據(jù)給PB口使小燈顯示

delay(50000);

}

}

}

/**************************延時子程序****************************/

void delay(unsigned int time)

{

while(time--);

}





/*

五、寄存器方式實現(xiàn)自動切換時鐘源

    接下來使用程序?qū)崿F(xiàn)系統(tǒng)選擇的時鐘源在 HSE 和 HIS 之間來回切換,

    通過觀察 LED 小燈閃爍的變化情況,并結(jié)合下面的程序理解時鐘切換的設(shè)置方法

main.c 中的程序代碼如下:

*/

#include

_Bool LED @PG_ODR:0; //表示給 PG0 引腳取個別名 LED

void Delay(unsigned int t);

main()

{

unsigned char i;

LED = 1;

PG_DDR = 0x01;

PG_CR1 = 0x01;

PG_CR2 = 0x01;

while(1)

{

/* 判斷當(dāng)前時鐘,如果不是HSE則切換為HSE */

if(CLK_CMSR != 0xB4)

{

/* SWEN置1,時能切換*/

CLK_SWCR |= 0x02;

/* 目標(biāo)時鐘源,0xB4指HSE */

CLK_SWR = 0xB4;

/* 等待,直到切換成功,SWIF被置位 */

while((CLK_SWCR & 0x08) == 0);

/* 清除標(biāo)志位 */

CLK_SWCR = 0;

}

for(i = 0; i < 5; i++)

{

LED = 0;

Delay(60000);

LED = 1;

Delay(60000);

}

/* 判斷當(dāng)前時鐘,如果不是 HSI 則切換為 HSI */

if(CLK_CMSR != 0xE1)

{

/* SWEN置1,使能切換 */

CLK_SWR = 0x02;

/* 目標(biāo)時鐘源,0xE1 指 HSI */

CLK_SWR = 0xE1;

/* 等待,直到切換成功,SWIF被置位 */

while((CLK_SWCR & 0x08) == 0);

/* 清除標(biāo)志位 */

CLK_SWCR = 0;

}

for(i = 0; i < 5; i++)

{

LED = 0;

Delay(60000);

LED = 1;

Delay(60000);

}

}

}



void Delay(unsigned int t)

{

while(t--);

}



/*

六、庫函數(shù)方式實現(xiàn)自動切換時鐘源

    接下來使用庫函數(shù)方式編寫程序,重新完成時鐘切換的功能。

因為工程中需要應(yīng)用與 I/O 口相關(guān)的函數(shù)和與時鐘相關(guān)的函數(shù),

包含兩個文件:stm8s_gpio.c/stm8s_clk.c

主函數(shù)如下:

*/

#include "stm8s.h"

void Delay(unsigned int t);

void main(void)

{

u8 i;

/* 初始化PG0,驅(qū)動LED */

GPIO_Init(GPIOG, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_SLOW);

while(1)

{

/* 判斷當(dāng)前時鐘源,如果不是 HSE 則開始切換 */

if(CLK_GetSYSCLKSource() != CLK_SOURCE_HSE)

{

/* 使能自動切換,未成功則等待 */

while(CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,

CLK_SOURCE_HSE,

DISABLE,

CLK_CURRENTCLOCKSTATE_ENABLE)

== ERROR);

}

for(i = 0; i < 10; i++)

{

GPIO_WriteReverse(GPIOG,GPIO_PIN_0);

Delay(50000);

}

if(CLK_GetSYSCLKSource() != CLK_SOURCE_HSI)

{

while(CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,

CLK_SOURCE_HSI,

DISABLE,

CLK_CURRENTCLOCKSTATE_ENABLE)

== ERROR);

}

for(i = 0; i < 10; i++)

{

GPIO_WriteReverse(GPIOG, GPIO_PIN_0);

Delay(50000);

}

}

}

void Delay(unsigned int t)

{

while(t--);

}

#ifdef USE_FULL_ASSERT

void assert_failed(u8 *file, u32 line)

{

while(1)

{


}

}

#endif





/*

七、寄存器方式實現(xiàn)手動切換時鐘源

    現(xiàn)在通過設(shè)置相應(yīng)的寄存器的方式手動切換時鐘源為 HSE,本例中采用中斷方式,當(dāng)目標(biāo)時鐘振蕩穩(wěn)定后,

切換條件成熟了,就產(chǎn)生中斷,在中斷中使能切換控制位,完成切換工作。

主函數(shù)如下:

*/

#include

_Bool LED @PG_ODR:0; //表示給 PG0 引腳取個別名 LED

void Delay(unsigned int t);

main()

{

/* 使能時鐘切換中斷 */

CLK_SWCR |= 0x04;

/* 切換到 HSE */

CLK_SWR = 0xB4;

LED = 1;

PG_DDR = 0x01;

PG_CR1 = 0x01;

PG_CR2 = 0x00;

_asm("rim");

while(1)

{

LED ^= (_Bool)1; //LED位取反,實現(xiàn)小燈閃爍

Delay(50000);

}

}

void Delay(unsigned int t)

{

while(t--);

}

@far @interrupt void CLK_SW_IRQ(void)

{

/* 清除中斷標(biāo)志位 */

CLK_SWCR &= ~0x08;

/* 完成切換 */

CLK_SWCR |= 0x02;

}

/*

stm8_interrupt_vector.c中的程序代碼如下:

*/

/*

...

extern @far @interrupt void CLK_SW_IRQ(void);

...

{0x82, CLK_SW_IRQ}, // irq2

...

*/





/*

八、庫函數(shù)方式實現(xiàn)手動切換時鐘源

現(xiàn)在,重新用庫函數(shù)編寫程序?qū)崿F(xiàn)手動切換時鐘源的任務(wù)。庫函數(shù)方式需要在程序工程中

包含兩個文件:stm8s_gpio.c 和 stm8s_clk.c

主函數(shù)如下:

*/

#include "stm8s.h"

void Delay(unsigned int t);

void main(void)

{

/* 初始化PG0,驅(qū)動LED */

GPIO_Init(GPIOG, GPIO_PIN_0, GPIO_MODE_OUT_PP_HIGH_SLOW);

/* 手動切換,目標(biāo)時鐘源為 HSE,開啟中斷,當(dāng)親時鐘不關(guān)閉 */

CLK_ClockSwitchConfig(CLK_SWITCHMODE_MANUAL,

 CLK_SOURCE_HSE,

 ENABLE,

 CLK_CURRENTCLOCKSTATE_ENABLE);

rim();

while(1)

{


GPIO_WriteReverse(GPIOG, GPIO_PIN_0);

Delay(50000);

}

}

void Delay(unsigned int t)

{

while(t--);

}

#ifdef USE_FULL_ASSERT;

void assert_failed(u8 *file, u32 line)

{

while(1)

{


}

}

#endif

/* stm8s_it.c 中的代碼如下: */

/*

...

INTERRUPT_HANDLER(CLK_IRQHandler,2)

{

//清除中斷標(biāo)志位

CLK_ClearITPendingBit(CLK_IT_SWIF);

//完成切換

CLK_ClockSwitchCmd(ENABLE);

}

...

*/



/*

九、PWM信號占空比測量

*/

#include

unsigned long frequency;

unsigned char dutyCycle;

unsigned int captureValue1,captureValue2;

unsigned char gewei,shiwei,baiwei,qianwei,dutyCycle1,dutyCycle2;

unsigned char dis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};



void TIM1_Init(void);

void GPIO_Init(void);

void Display(void);

void Delay(unsigned int t);



main()

{

unsigned int i;

/* 系統(tǒng)時鐘不分頻,為16MHZ */

CLK_CKDVIR = 0x00;

GPIO_Init();

TIM1_Init();

while(1)

{

/* 清除CC1IF、CC2IF標(biāo)志位 */

TIM1_SR1 &= 0xf9;

/* 清除CC1OF標(biāo)志位 */

TIM1_SR2 &= 0xfd;

/* 使能捕獲,CC1E = 1,CC2E = 1 */

TIM1_CCER1 |= 0x11;

while((TIM1_SR1 & 0x02) == 0);

/* 等待CC2IF被置位 */

while((TIM1_SR1 & 0x04) == 0);

captureValue1 = (unsigned int)TIM_CCR2H << 8;

captureValue1 |= TIM_CCR2L;

/* 等待CC1OF被置位 */

while((TIM1_SR2 & 0x02) == 0);

captureValue2 = (unsigned int)TIM_CCR1H << 8;

captureValue2 |= TIM_CCR1L;

/* 捕獲禁止 */

TIM1_CCER1 &= 0xee;

/* captureValue1/16 000 000 為測量周期,取倒為頻率 */

frequency = (16000000UL/captureValue2);

/* 單位換算成kHz,小數(shù)點(diǎn)后 1 位 */

frequency = frequency/100;

/* captureValue1/captureValue2為占空比 */

dutyCycle = (captureValue1 * 100)/captureValue2;

/* 顯示頻率 */

for(i = 0; i < 400; i++)

Display();

}

}



void TIM1_Init(void)

{

/* CC1 通道被置位為輸入,IC1映射在TI1FP1上,CC1S = 01 */

TIM_CCMR1 |= 0x01;

/* TI1FP1 上升沿有效,CC1P = 0 */

TIM_CCER1 &= ~(1 << 1);

/* CC2通道被置位為輸入,IC2映射在TI1FP2上 CC2S = 10 */

TIM_CCMR2 |= 0x02;

/* TI1FP2下降沿有效,CC2P = 1 */

TIM_CCER1 |= (1 << 5);

/* 觸發(fā)輸入信號為TI1FP1, TS = 101 */

TIM_SMCR |= 0x50;

/* 觸發(fā)模式為復(fù)位觸發(fā),SMS = 100 */

TIM_SMCR |= 0x04;

/* 定時器開始計數(shù) */

TIM1_CR1 |= 0x01;

}

void GPIO_Init(void)

{

/* 數(shù)碼管段選 */

PG_ODR = 0xff;

PG_DDR = 0xff;

PG_CR1 = 0xff;

PG_CR2 = 0xff;

/* 數(shù)碼管選段 */

PG_ODR = 0xff;

PG_DDR = 0xff;

PG_CR1 = 0xff;

PG_CR2 = 0xff;

}

void Display(void)

{

qianwei = frequency/1000;

baiwei = (frequency % 1000)/100;

shiwei = (frquency % 100)/10;

gewei = frquency % 10;

dutyCycle1 = dutyCycle % 10;

dutyCycle2 = dutyCycle / 10;


PG_ODR = dis[gewei];

PB_ODR = 0xfe;

Delay(100);

PB_ODR = 0xff;

/* 十位亮小數(shù)點(diǎn) */

PG_ODR = dis[shiwei] & 0x7f;

PB_ODR = 0xfd;

Delay(100);

PB_ODR = oxff;

PG_ODR = dis[baiwei];

PB_ODR = 0xfb;

Delay(100);

PB_ODR = 0xff;

PG_ODR = dis[qianwei];

PB_ODR = 0xf7;

Delay(100);

PB_ODR = 0xff;

PG_ODR = dis[dutyCycle2];

PB_ODR = 0x7f;

Delay(100);

PB_ODR = 0xff;

PB_ODR = dis[dutyCycle1];

PB_ODR = 0xbf;

Delay(100);

PB_ODR = oxff;

}

void Delay(unsigned int t)

{

while(t--);

}


關(guān)鍵字:STM8S  寄存器版本  空程序 引用地址:STM8S學(xué)習(xí)03——寄存器版本的一些程序

上一篇:Zynq篇——uart中斷
下一篇:STM8S學(xué)習(xí)04——網(wǎng)關(guān)學(xué)習(xí)

推薦閱讀

這幾天在移植FATFS文件系統(tǒng),在移植過程中需要新建文件夾下創(chuàng)建新的cfg文件,查找資料后發(fā)現(xiàn)需要用到以下函數(shù):f_mkdir("0:/2017110223");//新建文件夾,其中2017110223是文件夾名稱f_open(filescr1, "0:2017110223/201711011.txt", FA_OPEN_NEW_COVER);//在新建的文件夾下創(chuàng)建新的txt文本文件新建完成之后要記得關(guān)閉該文件,否則就會出錯。f_res = f_...
19日發(fā)表的新機(jī)Mate 30不能預(yù)裝谷歌( Google)應(yīng)用程式和服務(wù),恐將影響海外市場的買氣。對此,前外資天王分析師陸行之的看法相對樂觀,認(rèn)為沖擊沒有外界預(yù)期的嚴(yán)重。澎湃新聞報導(dǎo),華為19日在德國慕尼黑發(fā)表的Mate 30 智慧型手機(jī)仍將使用Android 系統(tǒng),但受到美國禁售令的影響,不會預(yù)裝 Google 應(yīng)用程式與Google Play等服務(wù)。未來華為手機(jī)若持...
北京時間9月16日凌晨1點(diǎn),蘋果舉行了線上發(fā)布會,由蘋果CEO庫克領(lǐng)銜主演,與以往發(fā)布會相比,此次發(fā)布會更加驚險刺激,因為外界的所有猜測貌似都不對,什么iPhone 12增加毫米波雷達(dá)芯片,什么要推出AirTags、AirPods Studio、HomePod mini、Apple TV 4K等一串產(chǎn)品啦,全都沒出現(xiàn)。 僅僅就是手表和iPad。對于手捧iPhone看直播等新iPhone的熬夜黨來說,基...
??當(dāng)STM8單片機(jī)使用ADC功能讀取多個通道的值時,可以使用單次模式,采樣完一個通道之后,重新初始化另一個通道,然后采樣,采樣完成后繼續(xù)重新初始化切換下一個通道。但是這樣采樣起來太麻煩。STM8單片機(jī)提供了一個掃描模式,可以依次按照順序采樣多個通道的值,多個通道全部采樣完成后,會置位標(biāo)志位,這樣就可以一次性將多個通道的值全部讀出來。??...

史海拾趣

問答坊 | AI 解惑

8種常用電容器的結(jié)構(gòu)和特點(diǎn)

幾種常用電容器的結(jié)構(gòu)和特點(diǎn)簡要介紹,供參考。 …

查看全部問答∨

綠色版“PDF文檔”閱讀器軟件

這是一款純綠色軟件,不用安裝,解壓后直接雙擊\"Foxit Reader.exe”就能運(yùn)行了,而且運(yùn)行一次后會自動建立關(guān)聯(lián),以后再雙擊PDF文檔就行了,就能直接閱讀PDF文檔了。比Adobe Reader閱讀器小多了,功能也不少啊。所以,推薦給大家下載使用吧。 [ 本 ...…

查看全部問答∨

一個單片機(jī)初學(xué)者的學(xué)習(xí)經(jīng)歷一

大一在幼稚中度過     我大一就開始作電子,因高兩屆的張哥的一句話,我開始學(xué)單片機(jī),七天邊學(xué)邊做,我做好第一個題目(實現(xiàn)一個他們稱做\"求愛機(jī)\"的東西),但是現(xiàn)在他還躺在那,還沒有實現(xiàn)他的目的,呵呵。他根本沒有跑起來,除了 ...…

查看全部問答∨

競賽試題

本帖最后由 paulhyde 于 2014-9-15 09:19 編輯 這是預(yù)測試題  …

查看全部問答∨

中斷處理函數(shù)前聲明關(guān)鍵字

   比如說_irq 開頭的是中斷服務(wù)程序,但_irq在什么地方定義的呢?…

查看全部問答∨

dllregister 可以在Standard emulator中運(yùn)行,可是在Wince .net 5.0的設(shè)備中不能運(yùn)行,提示dllregister不是有效的

dllregister 可以在Standard emulator中運(yùn)行,可是在Wince .net 5.0設(shè)備中不能運(yùn)行,提示dllregister不是有效的WinCE應(yīng)用程序。可是其他在Standard emulator中運(yùn)行的程序都能下載到Wince .net 5.0設(shè)備中運(yùn)行,請教各位如何解決?…

查看全部問答∨

MAX202與MAX232的問題

請問大家..MAX202和MAX232除了速度不同外還有什么不同呢(發(fā)熱量,轉(zhuǎn)換電平等等)?不太明白老有人把MAX202的V+腳串個電容然后接地,DataSheet上明顯是串個電容然后接電源的...另外假設(shè)單片機(jī)有兩個UART,那么同時接在MAX202上時會不會燙得要死呢?是 ...…

查看全部問答∨

單片機(jī)抗干擾性能如何檢驗?

來自EEWORLD合作群:49900581 群主:wangkj…

查看全部問答∨

求高手給一段vc5410語音降噪的C源代碼

求高手給一段vc5410語音降噪的C源代碼,現(xiàn)在已經(jīng)可以讀取語音,并且可以輸出語音,現(xiàn)求一段代碼,可以對得到的語音信號中的噪聲去除!…

查看全部問答∨

產(chǎn)品定位:3700系列產(chǎn)品與吉時利2750 (Integra)及7002解決方案的對比

3700系列產(chǎn)品定位于提供中高通道數(shù)量的開關(guān)系統(tǒng)和/或多通道測量系統(tǒng)解決方案。目前,我們提供具有類似能力的兩個產(chǎn)品:7002型開關(guān)主機(jī)和2750型Integra系列產(chǎn)品(參見圖1)。   如果僅用于開關(guān)應(yīng)用,3706-S型產(chǎn)品能夠提供超乎7002型的出眾解決 ...…

查看全部問答∨
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 庄河市| 四会市| 南漳县| 尉犁县| 卓尼县| 蕲春县| 嘉义市| 万载县| 中卫市| 依兰县| 弋阳县| 尉氏县| 平乐县| 宜宾市| 壶关县| 都兰县| 富蕴县| 中西区| 瓦房店市| 谷城县| 庐江县| 肥东县| 界首市| 巴楚县| 绩溪县| 株洲市| 共和县| 江北区| 合山市| 福鼎市| 基隆市| 益阳市| 顺义区| 亳州市| 绿春县| 安顺市| 南丰县| 澄城县| 凤庆县| 福安市| 万源市|