系統功能
使用STM8的I2C與PCF8574通訊,并使用LED作出簡單指示!(PCF8574是I2C與并口互轉芯片)
硬件設計
本設計基于內部RC振蕩器2M時鐘作STM8定時器TIM4的時鐘源進行I2C通訊
LED控制電路原理圖
PCF8974原理圖
軟件設計
/*********************************************************************
目標系統: 基于STM8單片機
應用軟件: Cosmic CxSTM8
*********************************************************************/
/* -------------------------------------------------------------------
實驗內容:
使用STM8的I2C與PCF8574T通訊,并使用LED作出簡單指示。
----------------------------------------------------------------------
硬件連接:
將PB口的LED指示燈使能開關切換到"ON"狀態。
----------------------------------------------------------------------*/
#include #include unsigned char i=0; #define I2C_busy() while((I2C_SR3&0x02)==1); #define I2C_start() I2C_CR2|=0x01; #define I2C_stop() I2C_CR2|=0x02; #define I2C_Ack() I2C_CR2|=0x04; #define I2C_NAck() I2C_CR2&=(~0x04); #define I2C_addrask (I2C_SR1&0x02) #define I2C_SBask (I2C_SR1&0x01) #define I2C_TxEask (I2C_SR1&0x80) #define I2C_RxNeask (I2C_SR1&0x40) #define I2C_BTF (I2C_SR1&0x04) #define I2C_BERR_ERR (I2C_SR2&0x01) #define I2C_AF_ERR (I2C_SR2&0x04) #define I2C_writebyte(x) I2C_DR=x; void I2C_Init(void) { I2C_FREQR=0x0f; I2C_CCRH=0x00; I2C_CCRL=0x50; I2C_TRISER=0x11; I2C_CR1|=0x01; I2C_Ack(); I2C_CR2|=0x08; } void I2C_Start(void) { I2C_busy(); I2C_start(); while(I2C_SBask==0); } void I2C_SendDAdr(u8 Add) { I2C_writebyte(Add); while(I2C_addrask==0); I2C_busy(); } void I2C_SendDat(u8 data) { I2C_writebyte(data); I2C_busy(); while(I2C_TxEask==0); } u8 I2C_RcvDat(void) { u8 i; while(I2C_RxNeask==0); abc: if(I2C_BTF==0x04) {i=I2C_DR;} else goto abc; if(I2C_BTF==0){} else goto abc; return i; } void PCF8574_Init(void) { I2C_Init(); } void PCF8574_WriteAByte(u8 data) { I2C_Start(); I2C_SendDAdr(0x40); I2C_SendDat(data); I2C_stop(); } void main(void) { u8 i=0x4c; PCF8574_Init(); while(1){PCF8574_WriteAByte(i);;i++;delay_ms(100);} } 系統調試 LED不斷的閃爍,改變延遲的大小,LED閃爍的速度加快!
上一篇:STM8 定時器中斷程序
下一篇:STM8 UART接收中斷程序
推薦閱讀
史海拾趣