#include<iostm8s103k3.h> //將 MCU 型號(hào)(stm8s103k3)的頭文件加進(jìn) 來(lái)
int main( void )
{
PD_DDR |=0x10; //將 PD.4 設(shè)置成輸出模式 PD_CR1 |=0x10; //將 PD.4 設(shè)置成推挽輸出方式 PD_CR2 &=~0x10; //設(shè)置 PD.4 輸出速率最大為 2MHZ
PD_ODR |=0x10; //將 ODR 寄存器的第 4 位置 1,即 PD.4=1;
while(1); //始終循環(huán),程序停在此處
}
這里只有一個(gè)主函數(shù),每個(gè)寄存器包括八位,分別控制 PD0~PD7 八個(gè)引腳, 這里與 led 燈相連的是 PD4,
PD_DDR |=0x10;就是 DDR 與十六進(jìn)制數(shù) 10(即二進(jìn)制 00010000)相或。 因?yàn)槿魏螖?shù)與 0 相或都不變,與 1 相或則為 1,所以“或”有置位的效果,從右 邊低位 0 位算起,第五個(gè)數(shù)恰好是 PD4 口,所以此句話相當(dāng)于 PD4 設(shè)置成輸出 模式。PD_CR1 |=0x10; PD_ODR |=0x10; 兩句是同樣的道理。
PD_CR2 &= ~0x10; ~是指取反符號(hào),~0x10 就是 0xef,此句就是 CR2 與 fe
(即二進(jìn)制 11101111)相與,因?yàn)槿魏螖?shù)與 1 相與都不變,與 0 相與則必為 0, 所以“或”有清零的效果,所以此句話相當(dāng)于把 CR2的第 4 位清零(即最大擺 率設(shè)為 2MHZ)。這是操作八位寄存器的常用習(xí)慣語(yǔ)句,它的好處就是,可以不 影響其他的引腳而直接操作你想操作的位,以后我們會(huì)經(jīng)常用到。
PD_ODR |=0x10; 此句相當(dāng)于直接把已設(shè)置成輸出的 PD4 口直接拉成高電 平。
while(1);是個(gè)死循環(huán),讓程序停在此處,防止程序跑飛。 至此,我們按照上一章的講解,新建一個(gè)工程,把上面的代碼編輯好,編譯
一下,下載到板子上,注意跳帽的連接,至少連接四個(gè)哦,就可以看到中間的 led
燈亮了。
2.1.4學(xué)習(xí)拓展:閃爍 led燈
想讓 led 燈閃爍,其實(shí)就是讓燈亮一會(huì),再滅一會(huì),也就是 ODR 這個(gè)寄存器 置高再清零的過(guò)程,但是單片機(jī)若只操作 ODR 寄存器,人的肉眼是看不到 led 燈變化的,所以中間可加一個(gè)延時(shí)函數(shù)。
#include<iostm8s103k3.h>
#define u8 unsigned char //為了方便編程,以下的程序中的
#define u16 unsigned int //unsigned char 都可以用 u8 表示。
#define u32 unsigned long void Clk_Config(void)
{
CLK_CKDIVR= 0x00; //系統(tǒng)時(shí)鐘 1 分頻
while(!(CLK_ICKR & 0x02)); //等待 HSI 準(zhǔn)備好
}
void Io_Config(void)