导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→各位大虾麻烦帮我看看我的串口接收程序[yeying117]

 *第43875篇: 各位大虾麻烦帮我看看我的串口接收程序

  
楼 主:yeying117 2006年10月19日10:47
 各位大虾麻烦帮我看看我的串口接收程序
这是我的程控放大程序,硬件经过调试,没什么问题,但我用串口精灵给下位机发数据,就是接收不了。请各位大虾给我指出问题
我的程序
;----------I/O口定义----------------
PD0      BIT  P1.0
PD1      BIT  P1.1
PD2      BIT  P1.2
PD3      BIT  P1.3
WDI      BIT  P3.4
;----------缓存区定义----------------
SEND_INDEX EQU   20H  ; 执行发送命令标志 SEND_INDEX.0=0 有发送 SEND_INDEX.0=1无发送

CARD1      EQU   30H  ;卡1
CARD2      EQU   31H  ;卡2
CARD3      EQU   32H  ;卡3
CARD4      EQU   33H  ;卡4(自检)
MULCARD    EQU   31H  ;放大倍数
SERDATA1   EQU   32H  ;串口数据1(卡号)
SERDATA2   EQU   33H  ;串口数据2(放大倍数)
SUMDATA    EQU   34H  ;串口数据3(校验和)

;-----------------------------------------
          ORG   0000H
          LJMP  MAIN
          ORG   0023H

          LJMP  SERVE                       ;串口中断服务程序入口
          ORG   0050H
;------------------初始化-----------------------
MAIN:   LCALL DOG
        LCALL INITIAL
        LCALL INIOUT
 LOOP1:
         
        LCALL SELFCHELK
        JB SEND_INDEX.0,LOOP1
       
        LCALL DATA_SEND
        AJMP LOOP1


;------------------串口初始化-----------------------
INIOUT:
        LCALL DOG
       MOV SCON,#50H;设置成串口1方式
       MOV TMOD,#20H;波特率发生器T1工作在模式2上
       MOV PCON,#80H;波特率翻倍为2400x2=4800BPS
       MOV TH1,#0F3H;预置初值(按照波特率2400BPS预置初值)
       MOV TL1,#0F3H;预置初值(按照波特率2400BPS预置初值)
       SETB TR1;启动定时器T1
;以上完成通讯初始化设置

        RET
 ;------------------系统初始化---------------------
INITIAL: MOV DPH,#01H
        MOV DPL,#01H
        SETB PD0
        SETB PD1
        SETB PD2
        SETB PD3


        CLR   PD3
        MOV   A,#0FFH
        MOVX  @DPTR,A
        SETB  PD3
        CLR   PD2
        MOV   A,#0FFH
        MOVX  @DPTR,A
       SETB  PD2

        CLR   PD1
        MOV   A,#0FFH
        MOVX  @DPTR,A
        SETB  PD1
        CLR   PD0
        MOV   A,#0FFH
        MOVX  @DPTR,A
        SETB  PD0
        MOV SEND_INDEX,#01H
        RET


;------------------数据接收-----------------------
SERVE:   LCALL DOG

         
         PUSH  A
         PUSH  PSW
WAIT:     JBC   RI,RECET
         AJMP  WAIT                ;保护现场
RECET:   MOV   A,SBUF
         MOV   SERDATA1,A
WAIT0:   JBC   RI,RECET0
         AJMP  WAIT0
RECET0:
          MOV   A,SBUF
          MOV   SERDATA2,A
WAIT1:   JBC   RI,RECET1
         AJMP  WAIT1
RECET1:  MOV   A,SBUF
         MOV   SUMDATA,A
WAIT2:   JNB   RI,WAIT2
         CLR   RI
RETURN:  POP   PSW
         POP   A
         SETB  EA
         RETI
;

;------------------信号校验---------------------
SELFCHELK:     MOV   A,SERDATA1
               ADD   A,SERDATA2
               CJNE  A,SUMDATA,SERVE
               MOV SEND_INDEX,#00H

               RET

;----------------------锁存器选择---------------------------------
DATA_SEND:


PRI1:   MOV   A,SERDATA1
        CJNE  A,#03H,PRI2
        CLR   PD0                        ;开启A组锁存器
        LCALL DATA_SEND0
        SETB PD0
        AJMP SEND_EXIT

PRI2:   CJNE  A,#06H,PRI3
        CLR   PD1                         ;开启B组锁存器
        LCALL DATA_SEND0
        SETB PD1
        AJMP SEND_EXIT

PRI3:   CJNE   A,#09H,SELF_TEST1                ;开启C组锁存器
        CLR   PD2
        LCALL DATA_SEND0
        SETB PD2
        AJMP SEND_EXIT

SELF_TEST1:
       CJNE A,#0CH,SELF_TEST2
       CLR PD3                                 ;开启D组锁存器
       MOV   A,#38H                            ;开自检
       MOVX @DPTR,A
       NOP
       SETB PD3
SELF_TEST2:
      CJNE  A,#0FH,SEND_EXIT
      CLR   PD3                                ;开启D组锁存器
      MOV   A,#3FH                            ;关自检
      MOVX  @DPTR,A
      NOP
      SETB  PD3


SEND_EXIT:
        RET
;-----------------------------------------------


;------------------增益选择---------------------

DATA_SEND0:
        LCALL DOG
        MOV   R1,SERDATA2
        CJNE  R1,#01H,CMP2
        MOV   A,#3FH                      ;增益为1
        MOVX  @DPTR,A
        AJMP SEND0_EXIT

CMP2:   CJNE  R1,#02H,CMP3
        MOV   A,#3EH                      ;增益为2
        MOVX  @DPTR,A
        AJMP SEND0_EXIT

CMP3:   CJNE  R1,#04H,CMP4
        MOV   A,#36H                      ;增益为4
        MOVX  @DPTR,A
        AJMP SEND0_EXIT
CMP4:   CJNE  R1,#08H,CMP5
        MOV   A,#26H                      ;增益为8
        MOVX  @DPTR,A
        AJMP SEND0_EXIT
CMP5:   CJNE  R1,#10H,CMP6
        MOV   A,#24H                      ;增益为16
        MOVX  @DPTR,A
        AJMP SEND0_EXIT
CMP6:   CJNE  R1,#20H,CMP7
        MOV   A,#20H                      ;增益为32
        MOVX  @DPTR,A
        AJMP SEND0_EXIT
CMP7:   CJNE R1,#40H,SEND0_EXIT
        MOV   A,#00H                       ;增益为64
        MOVX  @DPTR,A
SEND0_EXIT:

        RET
;------------------看门狗---------------------
DOG:

        SETB   WDI
        CLR    WDI
        RET

;------------------结束---------------------
        END

  
2楼:yeying117 2006年10月19日10:49
 说明
除了串口以外的其他程序,我都调试过了,没问题,现在主要就是数据接受这块有毛病

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

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


[上一篇主题]:m7612芯片资料

[下一篇主题]:SMT 无铅焊接技术研讨会