本人使用AT89C51控制CH452,只用到其键盘功能.但程序写好后,一直的不到LOAD产生的中断信号,有能人帮忙解决下吗: //////---------------- sbit DCLK=P1^5; sbit DIN=P1^4; sbit LOAD=P1^6;//暂时由P1.6作为CH452的LOAD信号输入 sbit DOUT=P3^2; /////------------ #define CH452_KEY_LOAD_SET LOAD=1 #define CH452_KEY_LOAD_CLR LOAD=0 #define CH452_KEY_DIN_SET DIN=1 #define CH452_KEY_DIN_CLR DIN=0 #define CH452_KEY_DCLK_SET DCLK=1 #define CH452_KEY_DCLK_CLR DCLK=0 ///----------------51初始化 void AT89C51_Init() { TCON|=0x01;//中断0下降沿触发; EA=1;//全局中断允许; CH452_KEY_INT0_ON;//中断0允许; } /////////////////////CH452初始化 void CH452_Init() { Uint CH452_SYS_SET=0; CH452_SYS_SET=CH452_SYS_COM|CH452_KEY_KEYB_ON|CH452_KEY_INTM_ON;//CH452系统参数设置:开键盘功能边沿中断 WriteCH452(CH452_RESET); WriteCH452(CH452_SYS_SET); } /////////////向CH452发命令 void WriteCH452(Uint command) { Uchar i; CH452_KEY_INT0_OFF;//51禁止452产生的中断 CH452_KEY_LOAD_CLR;//LOAD低电平 for(i=0;i<12;i++) { if(command&0x0001)CH452_KEY_DIN_SET; else CH452_KEY_DIN_CLR; //DIN=command&0x0001; CH452_KEY_DCLK_CLR; command>>=1; CH452_KEY_DCLK_SET; } CH452_KEY_LOAD_SET;//LOAD上升沿加载命令 NOP; CH452_KEY_INT0_ON;//51允许452产生的中断 } ///////////////读CH452 Uchar ReadCH452() { Uchar i,j; Uchar key=0; Uchar read; CH452_KEY_INT0_OFF; read=CH452_R_COM; CH452_KEY_LOAD_CLR; for(i=0;i<4;i++) { if(read&0x01)CH452_KEY_DIN_SET; else CH452_KEY_DIN_CLR; //DIN=read&0x01; CH452_KEY_DCLK_CLR; read>>=1; CH452_KEY_DCLK_SET; } CH452_KEY_LOAD_SET;//LOAD上升沿加载命令 NOP; for(j=0;j<7;j++) { key<<=1; key|=DOUT; NOP; CH452_KEY_DCLK_CLR; NOP; CH452_KEY_DCLK_SET; } CH452_CLR_INT_FLAG; CH452_KEY_INT0_ON; return(key); } /////////////中断处理 void CH452_INT0() interrupt 0 { key_int_flag=1; keyboard=ReadCH452(); } ///////----main()----忽略 |