导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[求助]帮我看看这个程序。[gmf2008]

 *第14933篇: [求助]帮我看看这个程序。

  
楼 主:gmf2008 2003年7月28日08:37
 [求助]帮我看看这个程序。
各位好友:
       我这里有一个程序,其中有一部分功能不能完全实现,我怎末也想不通是什么原因,功能是这样的,通过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


 
 
 
   

   

  
2楼:jim-gao 2003年7月31日16:05
 硬件问题吧
看看你的硬件是否有问题,譬如基准源

>>>>>>对该主题发表你的看法

本主题贴数2,分页: [第1页]


[上一篇主题]:请问什么地方可以下到Quartus II 2.2 的License?

[下一篇主题]:orcad9.1vs9.2格式转换