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