本人有一段程序,用的是ATmega16单片机,想通过74hc165采集外部信号,却怎么也实现不了,各位大侠,帮忙指点。 我用的是ICCAVR编译环境,PC0口与165的SH/LD相连,PC1口与165的CLK相连,PC2与165的数据输出端相连,程序如下: #include <iom16v.h> #include <macros.h> void port_init(void) { PORTA = 0x00; DDRA = 0xFF; PORTB = 0x00; DDRB = 0xFF; PORTC = 0x04; //m103 output only DDRC = 0xFB; PORTD = 0x00; DDRD = 0xFF; } unsigned char read_hc165(void) { unsigned char data,i,temp,b; data=0; temp=0x01; PORTC = PORTC&0xFE; //置SH/LD为低电平,读入8位并口数据 PORTC = PORTC|0x01; //置SH/LD为高电平,保持数据 for(i=0;i<8;i++) //低位在前高位在后依次移出数据 { PORTC = PORTC|0x02; //CLK上升沿,串出下一位数据 delay_us(1); b = PINC; if((b&0x04)==0x04) data=data|temp; //读入QH端一位数据 data = data<<1; PORTC = PORTC&0xFD; //CLK下将沿,保持 } return data; } void main(void) { unsigned char m; delay_ms(5); init_devices(); delay_ms(5); while(1) { m=read_hc165(); delay_ms(1); PORTD=m; } 测试D端口的电压与实际结果不符,程序错了吗? 错在何处?请指正!!!
|