阅读:1445回复:6
一个很多人碰到,却都没得到很好解决的D12枚举问题!
我用D12也在枚举过程中碰到了问题!在固件程序中一直在响应中断(INT脚一直为低)!后来换了一块硬件绝对没有问题的板子,可是程序还是在一直响应中断!!!!那位大侠帮忙解释一下!谢了!
|
|
最新喜欢:![]() |
沙发#
发布于:2003-09-18 17:03
是不是软件的问题。响应中断后,中断标志什么的有没有清掉。
你提供的信息太少了。 |
|
|
板凳#
发布于:2003-09-18 19:18
外部中断是由硬件自己清除的!程序我查了很久,好像没有什么问题!?
|
|
地板#
发布于:2003-09-19 10:10
外部中断是硬件清除的,可是d12的中断寄存器你必须手动清除才行,尤其对于查询中断,如果不清除可不是总进中断吗?如果你设置的中断是低有效,中断不完成一直有效,那int管脚可不是一直都是低吗?
|
|
地下室#
发布于:2003-09-19 10:42
首先谢谢上面各位的热心恢复!!!真是怪!我的板子(另一块硬件无误的板子还是一直在响应中断!)在测了几下电平后,不再一直中断的,可是却又一直没有中断了!在初始化后测量D+脚电平竟然是0,不是说softconnect后,D+脚电平应该为3伏左右吗!难道我的D12坏了?
|
|
5楼#
发布于:2004-10-27 21:02
jinghuiren说的有道理!
|
|
6楼#
发布于:2004-10-28 04:19
这个不是你的问题,是芯片好像有点问题:看这里把,我转过来了.
http://www.mcu51.com/bbs/lookgood.asp?lookid=1903 可以这样解决usb芯片D12上线时中断脚总是为0电平的问题。(21738字)丁丁2004-4-19 5:26:32[64次] 程序启动时对D12进行一次读写就可以消除上电它的中断脚总是为0电平的问题,代码如下: 用这个启动文件就可以了,里面已经加了D12补丁代码: $NOMOD51 ;------------------------------------------------------------------------------ ; This file is part of the C51 Compiler package ; Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. ;------------------------------------------------------------------------------ ; STARTUP.A51: This code is executed after processor reset. ; ; To translate this file use A51 with the following invocation: ; ; A51 STARTUP.A51 ; ; To link the modified STARTUP.OBJ file to your application use the following ; BL51 invocation: ; ; BL51 <your object file list>, STARTUP.OBJ <controls> ; ;------------------------------------------------------------------------------ ; ; User-defined Power-On Initialization of Memory ; ; With the following EQU statements the initialization of memory ; at processor reset can be defined: ; ; ; the absolute start-address of IDATA memory is always 0 IDATALEN EQU 80H ; the length of IDATA memory in bytes. ; XDATASTART EQU 0H ; the absolute start-address of XDATA memory XDATALEN EQU 0H ; the length of XDATA memory in bytes. ; PDATASTART EQU 0H ; the absolute start-address of PDATA memory PDATALEN EQU 0H ; the length of PDATA memory in bytes. ; ; Notes: The IDATA space overlaps physically the DATA and BIT areas of the ; 8051 CPU. At minimum the memory space occupied from the C51 ; run-time routines must be set to zero. ;------------------------------------------------------------------------------ ; ; Reentrant Stack Initilization ; ; The following EQU statements define the stack pointer for reentrant ; functions and initialized it: ; ; Stack Space for reentrant functions in the SMALL model. IBPSTACK EQU 0 ; set to 1 if small reentrant is used. IBPSTACKTOP EQU 0FFH+1 ; set top of stack to highest location+1. ; ; Stack Space for reentrant functions in the LARGE model. XBPSTACK EQU 0 ; set to 1 if large reentrant is used. XBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1. ; ; Stack Space for reentrant functions in the COMPACT model. PBPSTACK EQU 0 ; set to 1 if compact reentrant is used. PBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1. ; ;------------------------------------------------------------------------------ ; ; Page Definition for Using the Compact Model with 64 KByte xdata RAM ; ; The following EQU statements define the xdata page used for pdata ; variables. The EQU PPAGE must conform with the PPAGE control used ; in the linker invocation. ; PPAGEENABLE EQU 0 ; set to 1 if pdata object are used. ; PPAGE EQU 0 ; define PPAGE number. ; PPAGE_SFR DATA 0A0H ; SFR that supplies uppermost address byte ; (most 8051 variants use P2 as uppermost address byte) ; ;------------------------------------------------------------------------------ ; Standard SFR Symbols ACC DATA 0E0H B DATA 0F0H SP DATA 81H DPL DATA 82H DPH DATA 83H NAME ?C_STARTUP ?C_C51STARTUP SEGMENT CODE ?STACK SEGMENT IDATA RSEG ?STACK DS 1 EXTRN CODE (?C_START) PUBLIC ?C_STARTUP CSEG AT 0 ?C_STARTUP: LJMP STARTUP1 RSEG ?C_C51STARTUP STARTUP1: ;以下5句代码是添加的usb补丁 mov dptr,#0bf01h mov a,#0f4h movx @dptr,a dec dpl movx a,@dptr ;以上5句代码是添加的usb补丁 IF IDATALEN <> 0 MOV R0,#IDATALEN - 1 CLR A IDATALOOP: MOV @R0,A DJNZ R0,IDATALOOP ENDIF IF XDATALEN <> 0 MOV DPTR,#XDATASTART MOV R7,#LOW (XDATALEN) IF (LOW (XDATALEN)) <> 0 MOV R6,#(HIGH (XDATALEN)) +1 ELSE MOV R6,#HIGH (XDATALEN) ENDIF CLR A XDATALOOP: MOVX @DPTR,A INC DPTR DJNZ R7,XDATALOOP DJNZ R6,XDATALOOP ENDIF IF PPAGEENABLE <> 0 MOV PPAGE_SFR,#PPAGE ENDIF IF PDATALEN <> 0 MOV R0,#LOW (PDATASTART) MOV R7,#LOW (PDATALEN) CLR A PDATALOOP: MOVX @R0,A INC R0 DJNZ R7,PDATALOOP ENDIF IF IBPSTACK <> 0 EXTRN DATA (?C_IBP) MOV ?C_IBP,#LOW IBPSTACKTOP ENDIF IF XBPSTACK <> 0 EXTRN DATA (?C_XBP) MOV ?C_XBP,#HIGH XBPSTACKTOP MOV ?C_XBP+1,#LOW XBPSTACKTOP ENDIF IF PBPSTACK <> 0 EXTRN DATA (?C_PBP) MOV ?C_PBP,#LOW PBPSTACKTOP ENDIF MOV SP,#?STACK-1 ; This code is required if you use L51_BANK.A51 with Banking Mode 4 ; EXTRN CODE (?B_SWITCH0) ; CALL ?B_SWITCH0 ; init bank mechanism to code bank 0 LJMP ?C_START END 搞单片机,不得不服那里个论坛了. |
|