阅读:766回复:0
请教:93c46的do脚怎么总是高电平啊?? 程序如下
请教:93c46的do脚怎么总是高电平啊?? 程序如下
//ICC-AVR application builder : 2004-4-21 20:26:09 // Target : 8515 // Crystal: 8.0000Mhz #include <io8515v.h> #include <macros.h> #include \"9346.h\" void sturt(void); void delay_us(uint time); //sbit CS=P1^0; void port_init(void) { //0入 DDRA = 0x00; DDRB = 0xFF; DDRC = 0xFF; } //call this routine to initialise all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); MCUCR = 0x00; GIMSK = 0x00; TIMSK = 0x00; SEI(); //re-enable interrupts //all peripherals are now initialised } void delay_us(uint time) { do time--; while(time>1); //1us } void Ewen(void)//允许写指令 { uchar i,a,InData; cs0; delay_us(20); sk0; delay_us(20); cs1;delay_us(20); InData=0x98; // 10011XXXX for(i=0;i<10;i++) { a=InData&0x80; // 10 if(a==0x80) {DIB1;delay_us(20);} else {DIB0;delay_us(20);} sk1;delay_us(20); sk0;delay_us(20); InData<<=1; } cs0;delay_us(20); } void Ewds(void) //禁止写指令 { uchar i,InData; cs0;delay_us(20); sk0; delay_us(20); cs1;delay_us(20); InData=0x80; // 10000XXXX for(i=0;i<10;i++) { // 10 if((InData&0x80)==0x80) {DIB1;delay_us(20);} else {DIB0;delay_us(20);} sk1;delay_us(20); sk0;delay_us(20); InData<<=1; } cs0; delay_us(20); } void Read(uchar address1) { uchar i,d; uint result=0x0000; Ewen(); sk0;delay_us(20); DIB1;delay_us(20); cs0; delay_us(20); cs1;delay_us(20); sk1;delay_us(20); sk0;delay_us(20); address1=address1&0x3f|0x80;// 110 A5-A0 for(i=0;i<8;i++) { // 8 if((address1&0x80)==0x80) {DIB1;delay_us(20);} else {DIB0;delay_us(20);} sk1;delay_us(20); sk0;delay_us(20); address1<<=1; } DDRA = 0xff; DOA7=0x80;delay_us(20); for(i=0;i<16;i++) { // 16 sk1;delay_us(20); result=(result<<1)|DOA7; sk0;delay_us(20); } cs0; Ewds(); buffer[0]=result; } void Write(uchar address,uint InData) { uchar i; uint a; Ewen(); sk0; delay_us(20); cs0;delay_us(20); cs1;delay_us(20); DIB1;delay_us(20); // 101 A5-A0 sk1;delay_us(20); sk0; delay_us(20); address=address&0x3f|0x40; for(i=0;i<8;i++) { // 8 if((address&0x80)==0x80) { DIB1;} else {DIB0;} sk1; delay_us(20); sk0; delay_us(20); address<<=1; } for(i=0;i<16;i++) { // 16 if((InData&0x8000)==0x8000) { DIB1;delay_us(20);} else {DIB0;delay_us(20);} sk1; delay_us(20); sk0;delay_us(20); InData<<=1; } cs0;delay_us(20); DDRA=0xff; DOA7=0x80;delay_us(20); cs1;delay_us(20); sk1;delay_us(20); DDRA=0x00; while((a=(DOA7&0x80))==0) { // busy test delay_us(20); sk0; delay_us(20); sk1;delay_us(20); } sk0;delay_us(20); cs0;delay_us(20); Ewds(); } void main() { uint i; uchar add=0x02; init_devices(); Write(add,0x2003); Read(add); while(1); } ////////上面是我用的AVR C语言的程序 请大家帮忙啊, do脚一直是高电平。 读不回来数!! 谢谢指教!!! |
|