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

* 105081: 求助:还是串口通信程序

   kexiner 
kexiner发表的帖子 

 求助:还是串口通信程序
前一段时间做了个串口通信的程序,已经实现了单个字符的传送与接收,现在老师让我做一个接收一串字符的程序。我把程序搞出来了,调试也没有错误了,可是加裁到仿真机时还是不能看到结果。还请高手指点一二,感激不尽!!
我程序所实现的功能是接收: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



发表时间:2007年4月24日13:43:48

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:赠送USB键盘、USB鼠标源代码本公司用USB接口芯片D12作为通讯接口芯片成功研制成USB键盘、U
[下一篇帖子]:[注意]引脚功能要读芯片的PDF文档IRQ引脚是中断请求输出引脚,不要弄错哟。