导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→先祝大家中秋团圆[zhongqiu]

 *第26268篇: 先祝大家中秋团圆

  
楼 主:zhongqiu 2004年9月28日11:05
 先祝大家中秋团圆
归入正题,我有一道难题跟大家请教一下,关于24C02的写入问题,需要通过串口接收不确定数目字节的数据,我编了一下,却发觉该程序有个缺陷,仅仅能接收28个字节的数据,超过后就接收不正常了,经我反复测试,问题大概在串口24C02的写入上,串口接收应该是没有问题,大家有谁能给我指点一下,谢谢!
;该程序为N个字节的串口接收程序,串口采用方式1,并将接收到的数据写到24C02的00H起始的地址中
MAINSCON:MOV 40H,#0A0H
      MOV 41H,#00H
      MOV 42H,#30H;串口写入的内存地址首地址
      SLAW EQU 40H
      NUMBYT EQU 41H
      NWD EQU 42H
      VSDA EQU P0.4
      VSCL EQU P0.5
SDL1:MOV TMOD,#20H;定时器T1作波特率发生器,工作于方式2
     MOV TL1,#0F3H;设定T1的初值确定波特率为4800
     MOV TH1,#0F3H;
     CLR ET1;T1作波特率发生器时应禁止中断
     SETB TR1;启动TR1计数
     MOV SCON,#52H;串行口设置方式1
     ORL PCON,#80H;SMOD=1
     MOV R0,NWD;待接收数据首地址
               ;待接收数据字节数量
     MOV R5,#5
     MOV R3,#50
     MOV R7,NUMBYT
     CJNE R7,#00H,WAIT
WAIT0:JBC RI,SSS
      AJMP WAIT0
WAIT:
     JBC RI,SSS

     DJNZ R5,WAIT
     DJNZ R3,WAIT
     AJMP WAIT1

SSS: CLR RI
     MOV A,SBUF
     MOV @R0,A
     MOV R7,NUMBYT
     INC R7
     MOV NUMBYT,R7

;该程序为将RAM30H-37H中的内容写到24C02的00H
      WRADD:LCALL STA
      MOV A,SLAW
      LCALL WRBYT
      LCALL CACK
      JB F0,WRADD
      MOV A,R7;写入EEPROM单元地址
      LCALL WRBYT
      LCALL CACK
      JB F0,WRADD
      MOV R0,NWD

WRDA:MOV A,@R0
     LCALL WRBYT
     LCALL CACK
     JB F0,WRADD
     LCALL STOP;至此将数据0AAH写入了EEPROM地址单元00中
PROGRAM:LCALL SDL1
        JB RI,SSS
        AJMP WAIT1

WAIT1:LCALL DIR
      CLR P1.4
      SETB P2.6
      CLR P2.6
      JB RI,SSS
      CLR P1.4
      SETB P2.6
      CLR P2.6

      AJMP WRITEONE
DIR:NOP
    NOP
    NOP
    RET
STA:SETB VSDA
    SETB VSCL
    NOP
    NOP
    CLR VSDA
    NOP
    NOP
    CLR VSCL
    RET
STOP:CLR VSDA
     SETB VSCL
     NOP
     NOP
     SETB VSDA
     NOP
     NOP
     CLR VSCL
     CLR VSDA
     RET
MNACK:SETB VSDA
      SETB VSCL
      NOP
      NOP
      CLR VSCL
      CLR VSDA
      RET
MACK:CLR VSDA
     SETB VSCL
     NOP
     NOP
     CLR VSCL
     SETB VSDA
     RET
CACK:SETB VSDA
     SETB VSCL
     CLR F0
     MOV C,VSDA
     JNC CEND
     SETB F0
CEND:CLR VSCL
     RET
WRBYT:MOV R6,#08H
WLP:RLC A
    MOV VSDA,C
    SETB VSCL
    NOP
    NOP
    CLR VSCL
    DJNZ R6,WLP
    RET
RDBYT:MOV R6,#08H
RLP:SETB VSDA
    SETB VSCL
    MOV C,VSDA
    MOV A,R2
    RLC A
    MOV R2,A
    CLR VSCL
    DJNZ R6,RLP
    RET
WRITEONE:
         LCALL STA
      MOV A,SLAW
      LCALL WRBYT
      LCALL CACK
      JB F0,WRITEONE
      MOV A,#00H;写入EEPROM单元地址
      LCALL WRBYT
      LCALL CACK
      JB F0,WRITEONE
         MOV A,NUMBYT
         LCALL WRBYT
         LCALL CACK
         JB F0,WRITEONE
         LCALL STOP;至此将数据0AAH写入了EEPROM地址单元00中
        NOP
LL:END

  
2楼:zhongqiu 2004年9月29日12:00
 老古,要不麻烦您帮忙看一下吧,我挺困难的
老古,要不麻烦您帮忙看一下吧,我挺困难的!!!

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

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


[上一篇主题]:那位用过TEC9988的,我在网上找不到资料,能帮忙传一份吗?nightcat1@126.com

[下一篇主题]:主旨:游戏机声音IC烧录档的制作[求助]