[求助]帮我看看这个程序。
各位好友:
我这里有一个程序,其中有一部分功能不能完全实现,我怎末也想不通是什么原因,功能是这样的,通过ADC0809的通道0采集电压信号,把采集到的数据进行处理,后送到串行显示器去显示,现在的问题是电压采集只能从2.5V到5V能被采集到,0到2.5V以后的电压值就采集不到了,并有死机现象,我把程序中各个子程序的功能说明一下:
ADC_P : 数据采集程序
D_PROC : 数据处理处理程序
DIS_P ; 显示程序,虚拟串行显示
T0_P ; T0中断处理程序
T0_INI ; T0中断响应程序
这个程序是基于WINDOWS的消息写出来的,中断程序只在中断中设置相应的消息位,
主程序的任务是不断查询消息状态和响应中断,然后根据消息位,起动相应的消息响应程序,这个程序只起动通道0工作,请各位好友看看,问题到出到那里了.先谢了.
INC_P EQU 32H
D_BUF EQU 33H
CHANNEL EQU 34H
EOC BIT P1.0
VTXD BIT P1.1
VRXD BIT P1.2
LED21 EQU 30H
LED43 EQU 31H
LED1 EQU 14H
LED2 EQU 15H
LED3 EQU 16H
LED4 EQU 17H
ORG 0000H
AJMP INI
ORG 000BH
AJMP T0_INI
INI: MOV SP,#60H
;MOV TMOD,#01H
;MOV TH0,#0B1H
;MOV TL0,#0E0H;20MS
;SETB TR0
;SETB EA
;SETB ET0
MOV 20H,#00H ;MESSAGE REG
MOV CHANNEL,#00H;
SETB 20H.2
;------------MESSAGE PROCESS --
MESS:; JB 20H.1,TO_T0
JB 20H.0,TO_DIS
JB 20H.2,TO_ADC
JB 20H.3,TO_DATA
SJMP MESS
TO_DIS: ACALL DIS_P
SJMP MESS
TO_T0: ACALL T0_P
SJMP MESS
TO_ADC: ACALL ADC_P
SJMP MESS
TO_DATA:ACALL D_PROC
SJMP MESS
;------------------------------
T0_P: PUSH ACC
MOV A,INC_P
CJNE A,#02H,T_BACK;WHEN 50MS COMES FETCH ADC
MOV INC_P,#00H
SETB 20H.2 ;SET ADC MSG SIGN
T_BACK: CLR 20H.1 ;CLR T0_INT MSG SIGN
POP ACC
RET
;---------MESSAGE 1--------------
T0_INI: PUSH ACC
PUSH PSW
MOV TH0,#0D8H
MOV TL0,#0F0H
INC INC_P
SETB 20H.1 ;SET T0_INT MSG SIGN
CPL P3.0
POP PSW
POP ACC
RETI
;--------------------------------
ADC_P: PUSH DPH
PUSH DPL
MOV DPTR,#0000H;CHANNEL 0 WAS SELECTED
MOVX @DPTR,A ;ALE/START IS '1'
NOP ;START CHANGE
JB EOC,$
JNB EOC,$ ;WAIT CHANGE OVER
MOVX A,@DPTR ;OE IS '1'
MOV D_BUF,A ;CHANGE value STORED IN D_BUF
CLR 20H.2 ;CLR ADC_P MSG SIGN
SETB 20H.3 ;SETB D_PROC MSG SIGN
CPL P3.0 ;
POP DPL
POP DPH
RET
;---------------------------------------------------------------
D_PROC: PUSH PSW
PUSH DPH
PUSH DPL
SETB RS0
CLR RS1
MOV A,R3
CJNE A,D_BUF,D_NXT ;R3!=D_BUF,NEW DATA FETCHED
SJMP D_EXT
;-------------THE PART OF CHECK TABLE -----------
D_NXT: MOV DPTR,#TAB0
MOV R3,D_BUF
MOV A,R3
MOV B,#02H
MUL AB ;A STORED LOW 8BITS ,B STORED HIGH 8BITS
ADD A,DPL
MOV DPL,A
MOV A,DPH
ADDC A,B
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV LED43,A
MOV A,#01H
MOVC A,@A+DPTR
MOV LED21,A
SETB 20H.0 ;SET DIS_P MSG SIGN
D_EXT: CLR 20H.3 ;CLR D_DPROCESS MSG SIGN;
SETB 20H.2 ;SET ADC_P MSG SIGN
CPL P3.1
POP DPL
POP DPH
POP PSW
RET
;-------DIS_P--------------------
DIS_P: PUSH PSW
SETB RS1
CLR RS0
ACALL F_CODE ;SEPARATE ONE WORD BCD CODE
MOV A,LED3
MOV LED3,LED4
MOV LED4,A
ANL LED3,#7FH ;设置小数点位
VUATR: MOV R0,#LED1 ;发送起始地址
MOV R2,#04H ;发送字节数
SEND: MOV R3,#08H ;每一帧发送位数
MOV A,@R0
S_STA: JNB ACC.0,SND_0
SND_1: SETB VRXD
CLR VTXD;0
SETB VTXD;1
SJMP S_CONT
SND_0: CLR VRXD
CLR VTXD
SETB VTXD
S_CONT: RR A
DJNZ R3,S_STA
INC R0
DJNZ R2,SEND
CLR 20H.0 ;CLR DIS_P MSG SIGN
POP PSW
NOP
RET
;-------------------------
F_CODE: MOV R0,#LED21
MOV R1,#LED1
MOV R2,#02H
RE_F: MOV A,@R0
MOV B,#10H ;BCD/16,SHANG A,YU B ;A,B ARE ALSO BCD CODE
DIV AB ;HIGH BIT IN A,LOW BIT IN B
INC R1
ACALL FETCH ;FETCH SHI WEI
DEC R1
MOV A,B
ACALL FETCH ;FETCH GE WEI
INC R0
INC R1
INC R1
DJNZ R2,RE_F
RET
FETCH: MOV DPTR,#LEDTAB
MOVC A,@A+DPTR
MOV @R1,A
RET
;------------------------
LEDTAB: DB 0C0H,0F9H,0A4H,0B0H,99H;0,1,2,3,4
DB 92H,82H,0F8H,80H,90H;5,6,7,8,9
;------------------------
;HIGH 8 BITS FIRST STORED
;LOW 8 BITS SECOND STORED
;EXAMPLE 0313H EQUAL (DATA)H=03H,(DATA)L=13H
TAB0: DW 0000H,0019H,0039H,0058H,0078H,0098H,0117H,0136H
DW 0156H,0176H,0195H,0215H,0234H,0254H,0273H,0293H
DW 0313H,0332H,0352H,0371H,0391H,0410H,0430H,0449H
DW 0469H,0488H,0508H,0527H,0547H,0566H,0586H,0605H
DW 0625H,0645H,0664H,0684H,0703H,0723H,0742H,0762H
DW 0781H,0800H,0820H,0840H,0859H,0879H,0898H,0918H
DW 0938H,0957H,0977H,0996H,1016H,1035H,1055H,1074H
DW 1094H,1113H,1133H,1152H,1172H,1191H,1211H,1230H
DW 1250H,1270H,1289H,1309H,1328H,1348H,1367H,1387H
DW 1406H,1426H,1445H,1465H,1484H,1504H,1523H,1543H
DW 1563H,1582H,1602H,1621H,1641H,1660H,1680H,1699H
DW 1719H,1738H,1758H,1777H,1797H,1816H,1836H,1855H
DW 1875H,1895H,1914H,1934H,1953H,1973H,1992H,2012H
DW 2031H,2051H,2070H,2090H,2109H,2129H,2148H,2168H
DW 2188H,2207H,2227H,2246H,2266H,2285H,2305H,2324H
DW 2344H,2363H,2383H,2402H,2422H,2441H,2461H,2480H
DW 2500H,2520H,2539H,2559H,2578H,2598H,2617H,2637H
DW 2656H,2676H,2695H,2715H,2734H,2754H,2773H,2793H
DW 2813H,2832H,2852H,2871H,2891H,2910H,2930H,2949H
DW 2969H,2988H,3008H,3027H,3047H,3066H,3086H,3105H
DW 3125H,3145H,3164H,3184H,3203H,3223H,3242H,3262H
DW 3281H,3301H,3320H,3340H,3360H,3379H,3398H,3418H
DW 3438H,3457H,3477H,3496H,3516H,3535H,3555H,3574H
DW 3594H,3613H,3633H,3652H,3672H,3691H,3711H,3730H
DW 3750H,3770H,3789H,3809H,3828H,3848H,3867H,3887H
DW 3906H,3926H,3945H,3965H,3984H,4004H,4023H,4043H
DW 4063H,4082H,4102H,4121H,4140H,4160H,4180H,4199H
DW 4219H,4238H,4258H,4277H,4297H,4316H,4336H,4355H
DW 4375H,4395H,4414H,4434H,4453H,4473H,4492H,4512H
DW 4531H,4551H,4570H,4590H,4609H,4629H,4648H,4668H
DW 4688H,4707H,4727H,4746H,4766H,4785H,4805H,4824H
DW 4844H,4863H,4883H,4902H,4922H,4941H,4961H,4980H
END
发表时间:2003年7月28日8:37:15