451按鍵碼不能用USB上傳到PC端

CH451L只做鍵盤接口,使用INTO端口,USB使用INT1端口。 以下是451中斷源碼,單片機響應(yīng)中斷后由USB口回送到PC測試(USB發(fā)送接收測試沒有問題),使用CH372DBG\DEBUG372\Release\DEBUG372.EXE 數(shù)據(jù)端2上傳接收,長度設(shè)為1,可是451按鍵按下后,測試軟件無反映(以按下 數(shù)據(jù)端2上傳 的確定按扭),請問這是為什么?

/* CH451鍵盤中斷服務(wù)程序INT0,使用寄存器組1 */ void mCH451Interrupt( ) interrupt 0 using 1 { ............ ............ 以上獲取獲取CH451_KEY(同示例,用指示燈測試按鍵正常) IE0=0; /* 清中斷標志 */ CH372_WR_CMD_PORT(CMD_WR_USB_DATA7); /* 向USB端點1的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 */ CH372_WR_DAT_PORT(1); /* 首先寫入接收到的數(shù)據(jù)長度 */ CH372_WR_DAT_PORT(CH451_KEY); /* 接收到的數(shù)據(jù)是否正確 */ } 請高手指教,謝謝。

CH372_WR_CMD_PORT(CMD_WR_USB_DATA7); 這哪里是往端點1送數(shù)據(jù)啊? 端點2 吧!


你的晶振是多少? 如果晶振大于16MHZ 在CH372_WR_CMD_PORT(CMD_WR_USB_DATA7);后面加上2us的延時試試


向375命令口寫命令的子程序如果是象下面這樣寫的 void CH375_WR_CMD_PORT( unsigned char cmd ) { /* 向CH375的命令端口寫入命令,周期不小于4uS,如果單片機較快則延時 */ Delay2us(); CH375_CMD_PORT=cmd; Delay2us(); } 你可以把第一個Delay2us();去掉試試.或者在程序的開頭加上#pragma NOAREGS 因為你的CH375_WR_CMD_PORT()子程序加在中斷程序中.而你的中斷程序使用了寄存器組1, 延時程序中使用了工作寄存器R7,它的地址在寄存器組1中的地址與其他寄存器組的地址是不一樣的.


這是keil編譯器的問題


我的晶振是12M的,我試試,謝謝各位。 1234請問你所說的: 而你的中斷程序使用了寄存器組1,延時程序中使用了工作寄存器R7,它的地址在寄存器組1中的地址與其他寄存器組的地址是不一樣的.

工作寄存器R7是地址在寄存器組1中的R7嗎? 如果我用寄存器組2呢?R7是否是2的R7?

0-3的四組寄存器中R7的地址分別為07H,0FH,17H,1FH.


如果你用寄存器組2,R7是2組的R7


知道了,謝謝1234


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频