壹個比較簡單的方法是:
1根CS線,外設控制,壹個下降沿時,允許單片機輸出P1口的狀態,(當然也可以用電平方式,實現連續發送),這個由妳定義,如果接在INT0,INT1等外部中斷口上更好,可以用中斷來實時發送
1根SDA線,串行數據發送線
1根SCL線,串行同步時鐘信號線
現在不考慮CS線的實現過程:電平方式可以通過循環查詢來實現,下降沿的話用中斷比較好實現。只考慮發送的過程
sbit SCL = P2^1;
sbit SDA = P2^0;
void sendP1(void)
{
unsigned char p1;
unsigned char i;
P1 = 0xFF; //讀之前全送1哦,為什麽?妳知道的
p1 = P1;
//SCL初始狀態為高電平1,高位先發
for(i=0;i<8;i++)
{
p1 <<= 1;
SDA = CY; //實踐證明這種方法簡單高效,不會發生什麽意外,即使是被中斷打斷了,也會恢復PSW的,不是嗎?
SCL = 0;
_nop_();
_nop_();
SCL = 1;
}
}