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

 *第47243篇: 求助:单片机双机通信程序

  
楼 主:kexiner 2007年3月24日11:03
 求助:单片机双机通信程序
最近做毕业设计,老师让我先做一个小的程序来实现双机通信,可是我的程序有毛病,自己不会调,希望有高手指点一下啊!程序如下:
ORG    0000H 
       AJMP   START
       ORG    0023H
       LJMP   ACTNT            ; 串口中断入口地址
       ORG    0000H
      ;------主程序--------   
START: MOV    TMOD,#20H      ; 置定时器/计数器1工作方式2
       MOV    TH1,#0FDH       ;预置初值(按照波特率9600BPS预置初值)
MOV    TL1,#0FDH       ;预置初值(按照波特率9600BPS预置初值)
SETB   EA             ; 开中断
CLR    ES             ; 禁止串行中断
MOV    PCON,#00H      ; 波特率不倍增
       SETB   TR1            ; 启动定时器1
MOV    DPTR,#TAB
MOV    R7,#08H        ; 数据个数;
SETB   ES             ; 允许串口中断
SJMP   $              ; 等待发送

;------中断服务程序--------  
ORG    0023H
ACTNT: MOVC   A,@A+DPTR      ;读数据
       CLR    TI             ;清发送中断
       MOV    SBUF,A         ;发送字符 
       DJNZ   R7,AEND        ;没发送完转AEND
       CLR    ES             ;禁止串行中断
       CLR    TR1            ;定时器1停止计数
AEND:  INC    DPTR           
       RETI                  ;中断返回
TAB:   DB 'A','B','C','D' 
END

  
2楼:BaoFu 2007年3月25日07:40
 我看的看法
MOV  SBUF,A执行后,串口即开始发送,发送完毕就会引发新的中断,你把这一句放在中断服务程序中,很可能导致中断中的中断,并在此处往复进行出不来。
  
3楼:ningling_21 2007年3月25日14:24
 应在主程序中发送
应在主程序中发送数据,串口中断可以不开
 ;------主程序应该是这样--------   
START: MOV    TMOD,#20H      ; 置定时器/计数器1工作方式2
           MOV    TH1,#0FDH       ;预置初值(按照波特率9600BPS预置初值)
           MOV    TL1,#0FDH       ;预置初值(按照波特率9600BPS预置初值)
           SETB   EA             ; 开中断
           CLR    ES             ; 禁止串行中断
           MOV    PCON,#00H      ; 波特率不倍增
           SETB   TR1            ; 启动定时器1
           SETB   ES             ; 允许串口中断
  STAR: MOV    DPTR,#TAB
           MOV    R7,#08H        ; 数据个数;
           MOV    A,R7
           MOVC A,@A+DPTR
           MOV   SBUF,A
           JNB    TI,$
           CLR  TI  
           AJMP STAR
           ; 等待发送


  
4楼:wanxianjian 2007年3月26日20:04
 本人在学习中,修改了下他的程序,不知道还有什么意见不
ORG 0000H
AJMP START
ORG 0023H
AJMP ACTNT

START:MOV TMOD,#20H
      MOV TH1, #0FDH
      MOV TL1, #0FDH
      SETB EA
      CLR  ES
      MOV PCON,#00H
      MOV SCON,#50H
      SETB TR1
      MOV DPTR,#TAB
      MOV R7,#08H
      MOV A,R7
      SETB ES
      SJMP

ACTNT: CLR EA
AEND:  MOVC A,@A+DPTR
       INC DPTR
       MOV SUBF, A
       DJNZ R7,AEND
       JNB TI,$
       CLR TI
       SETB EA
       RET1

你程序的本意是一次传送A,B,C,D还是只是一个数。你主程序的意思只传送一个,而中断里的意思是传诵4的,但你这样是实现不了的。

  
5楼:kexiner 2007年4月2日11:18
 谢谢
呵呵,多谢

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

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


[上一篇主题]:[分享]红外线资料集-----我对网上的红外线相关资料进行了收集整理.

[下一篇主题]:特价提供TDS510  Ver3.1  DSP仿真器