导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→求助:还是串口通信程序[kexiner]

 *第48180篇: 求助:还是串口通信程序

  
楼 主:kexiner 2007年4月24日13:43
 求助:还是串口通信程序
前一段时间做了个串口通信的程序,已经实现了单个字符的传送与接收,现在老师让我做一个接收一串字符的程序。我把程序搞出来了,调试也没有错误了,可是加裁到仿真机时还是不能看到结果。还请高手指点一二,感激不尽!!
我程序所实现的功能是接收:AA FF 01 02 20 77 FD这样的一串字符FD是前面几个数值的异或值。程序如下:


CHECK    EQU    70H           ;校验位缓存
 
 
 ;接收缓存 
          RSV_1    EQU    50H           ;开始标志           
          RSV_2    EQU    51H           
          RSV_3    EQU    52H           ;从机地址
          RSV_4    EQU    53H           ;信息长度
          RSV_5    EQU    54H           ;命令
          RSV_6    EQU    55H           ;参数
          RSV_7    EQU    56H           ;校验
 
 
 ;-----------------------------------------------------------------
          ORG    0000H
          AJMP   MAIN
         
          ORG    0023H         ;串行中断入口地址
          AJMP   SIN
          
;------------------------------通信测试程序------------------------------------
          ORG    0100H
 MAIN:    MOV    SP,35H        ; 修改堆栈地址
          MOV    TMOD,#20H     ; 定时计数器1工作于方式2
          MOV    TH1,#0FDH     ; 计数初值(11.0592MHz晶振下,波特率为9600)
          MOV    TL1,#0FDH
          MOV    SCON,#50H     ; 置串口为方式1,允许接收
          MOV    R0,#00H       ; 设置计数器初值为0
          MOV    R1,#07        ; 设置定长为7
          MOV    CHECK,#00H
          SETB   TR1            ; 启动定时器1
          SETB   EA             ; 开中断
      SETB    ES
  
 
                                  
                          
 SIN:     CLR    ES                ;关串行中断
          CLR    RI                ;清接收中断标志
          MOV    A,@R0
          ADD    A,#01             ;计数值加1
          MOV    R0,A
          CJNE   R0,#07,COMPARE    ;计数值是否小于定长值
          
 COMPARE: JC     SMALL             ;CY=1,表示计算机初值  <定长
          AJMP   MORE              ;CY=0,表示计算机初值>  =定长
          
 SMALL:   MOV    A,#50H
          ADD    A,@R0
          DEC    A
          MOV    A,SBUF
          XRL    A,CHECK
          MOV    CHECK,A
          
 REND:    SETB   ES 
          RETI
          
 MORE:    MOV    A,#50H            ;大于等于定长时
          ADD    A,@R0
          DEC    A
          MOV    A,SBUF            ;等于定长时最后一位不用异或,用最后一位的值和CHECK内容相比较
          CJNE   A,#CHECK,REND     ;相等则表明传输正确 
          ACALL  DISP
          MOV    R0,#00H           ;重置计数初值            
          AJMP   REND
          
 
          
 DISP:    CLR    p1.5
          ACALL  DELAY_1
          SETB   p1.5
          RET
          
             
 DELAY_1:
          MOV  R0, #0FFH
 LOOP2:   MOV  R1, #0FFH
 LOOP1:   NOP
          NOP
          DJNZ R1, LOOP1
          DJNZ R0, LOOP2  
          RET
          
          END


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

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


[上一篇主题]:赠送USB键盘、USB鼠标源代码

[下一篇主题]:[分享][推荐]盛唐USB_D12评估板物超所值