AVR單片機(jī)I2C總線實(shí)驗(yàn)
AVR單片機(jī)I2C總線實(shí)驗(yàn)。
1、用24C02記錄CPU啟動(dòng)次數(shù),并在PB口上顯示出來。
2、內(nèi)部1 M晶振,程序采用單任務(wù)方式,軟件延時(shí)。
3、進(jìn)行此實(shí)驗(yàn)請插上JP1的所有8個(gè)短路塊,JP7(LED_EN)/PC0/PC1短路塊。
4、通過此實(shí)驗(yàn),可以I2C總線操作有個(gè)初步認(rèn)識(shí)。
*/
1、用24C02記錄CPU啟動(dòng)次數(shù),并在PB口上顯示出來。
2、內(nèi)部1 M晶振,程序采用單任務(wù)方式,軟件延時(shí)。
3、進(jìn)行此實(shí)驗(yàn)請插上JP1的所有8個(gè)短路塊,JP7(LED_EN)/PC0/PC1短路塊。
4、通過此實(shí)驗(yàn),可以I2C總線操作有個(gè)初步認(rèn)識(shí)。
*/
#include "iom16v.h"
extern unsigned char twi_write(unsigned char addr, unsigned char dd);
extern unsigned char twi_read(unsigned char addr, unsigned char *dd);
extern unsigned char twi_read(unsigned char addr, unsigned char *dd);
/*延時(shí)函數(shù)*/
void delay_ms(unsigned char i) {
void delay_ms(unsigned char i) {
unsigned char a, b;
for (a = 1; a i; a++) {
for (b = 1; b; b++) {
;
}
}
}
for (a = 1; a i; a++) {
for (b = 1; b; b++) {
;
}
}
}
void main(void) {
unsigned char temp;
PORTA = 0xFF;/*打開上拉*/
DDRA = 0x00;/*方向輸入*/
PORTB = 0xF0;/*電平設(shè)置*/
DDRB = 0xFF;/*方向輸出*/
PORTC = 0xFF;
DDRC = 0x00;
PORTD = 0xFF;
DDRD = 0x00;
twi_read(0x08, temp);
PORTB = ~temp;
temp ++;
twi_write(0x08, temp);
DDRA = 0x00;/*方向輸入*/
PORTB = 0xF0;/*電平設(shè)置*/
DDRB = 0xFF;/*方向輸出*/
PORTC = 0xFF;
DDRC = 0x00;
PORTD = 0xFF;
DDRD = 0x00;
twi_read(0x08, temp);
PORTB = ~temp;
temp ++;
twi_write(0x08, temp);
while (1) {
;
}
}
評(píng)論