| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2636 人关注过本帖
标题:新手求指教。PC和单片机的串口通信程序,三八译码器位选,数码管显示不正确 ...
只看楼主 加入收藏
huayanxia
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-11-18
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
新手求指教。PC和单片机的串口通信程序,三八译码器位选,数码管显示不正确,错误不知道在哪。程序如下
图片附件: 游客没有浏览图片的权限,请 登录注册

 ORG 0000H
AJMP MAIN
ORG 0023H
AJMP IT_RXD
ORG 0030H
MAIN:   
        //设置T1为方式2,允许串口中断接收
        MOV TMOD,#20H         ;0010 0000  定时方式  方式2八位自动重转载   
        MOV TH1,#0FAH         ;22.1184MHZ:208     //12MHZ:230   
        MOV TH0,#0FAH         ;22.1184MHZ:208     //12MHZ:230
        SETB TR1             ;开启定时器
    MOV R6,#0
        MOV SCON,#50H        ;串行方式1,允许接受
        SETB EA                 ;开启总开关
        SETB ES              ;允许串行口中断
         MOV  DPTR,#TAB1     //字码表首地址
         CLR   A                 //清零
      MOV R0,#0                 //数码管赋初值R0-R3用于数码管赋值   R6计数用于选择数码管
      MOV R1,#0
      MOV R2,#0
      MOV R3,#0
                     
WAIT:    //数码管扫描
        //数码管1
        MOV A,R0             ;R0赋值给A
        MOVC A,@A+DPTR      ;DPTR地址初始化时指向TAB1,MOVC为偏移赋值,即当A=A+DPTR,A为1时A=3FH,为2时A=06H..以此类推到9
        MOV   P2,A              ;P2输出到数码管
        CALL  DELAY          ;延时5ms        
         //数码管2  
        MOV A,R1
        MOVC  A,@A+DPTR  
        MOV   P2,A  
        CALL  DELAY         
        //数码管3
        MOV A,R2
        MOVC  A,@A+DPTR
   
        MOV   P2,A  
        CALL  DELAY
        //数码管4
        MOV A,R3
        MOVC  A,@A+DPTR
   
        MOV   P2,A           
        CALL  DELAY
          SJMP WAIT
IT_RXD://串口发送及接收中断程序
        JB RI,AD_R6              ;判断RI是否为1,为1则说明是串口接收中断进入AD_R6,否则是发送中断则不做处理。

      
RET_IT_RXD:    RETI
        
DELAY:  MOV   R4,#10
D1:     MOV   R5,#80 ;1US
        DJNZ  R5,$ ;2US             (80*2+1)*2*40+1+1
        DJNZ  R4,D1
        RET


CLEAR_R://串口发送过来的是S则清零
      MOV R0,#0
      MOV R1,#0
      MOV R2,#0
      MOV R3,#0
      MOV R6,#0
      JMP RET_IT_RXD

VALUE_R:
       MOV B,R7   
      
    CLR A     
      ANL B,#0FH         //保留低八位,高八位清零
      CJNE R6,#1,TWO      //R6=1跳ONE,不等跳TWO
      JMP ONE
      JMP RET_IT_RXD

//每进入一次接收中断选择赋值给R0还是R1还是R2还是R3,当R6=1时赋值给R0,R6=2时赋值类推。。
ONE:  MOV R0,B                 //B赋给寄存器R0,中断返回
      JMP RET_IT_RXD

TWO:  CJNE R6,#2,THREE      //r6=2将B付给寄存器R1并返回中断,否则跳THREE
      MOV R1,B
      JMP RET_IT_RXD

THREE:CJNE R6,#3,FOUR        //R6=3,     将B付给寄存器R2并返回中断     否则跳FOUR
        MOV R2,B
      JMP RET_IT_RXD

FOUR: CJNE R6,#4,RET_IT_RXD           //R6=4, 将B付给寄存器R3并返回中断     否则直接中断返回
       MOV R3,B
      MOV R6,#0
      JMP RET_IT_RXD

 AD_R6: INC R6        
         CLR RI
        MOV R7,SBUF            ;将串口接收的数据赋值给R7         
        MOV A,R7
           MOV P1,A               //p1连三八译码器        
       ADD A,#01H              ;将串口接收的数据加一重新发送给PC
        MOV SBUF,A     
        CLR A
        CJNE R7,#83,VALUE_R  ;判断字符是否为S,是的话则进入CLEAR_R清零,不是的话就进入VALUE_R给R0-R3赋值
        JMP  CLEAR_R
 JMP RET_IT_RXD
TAB1:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END


搜索更多相关主题的帖子: 数码管 JMP 中断 MOV 赋值 
2018-11-18 17:44
wlrjgzs
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:26
帖 子:212
专家分:1566
注 册:2017-4-10
收藏
得分:20 
留下联系方式可以吗?
2018-11-18 21:21
huayanxia
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-11-18
收藏
得分:0 
回复 2楼 wlrjgzs
QQ..785792499
2018-11-18 21:55
快速回复:新手求指教。PC和单片机的串口通信程序,三八译码器位选,数码管显示不 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030330 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved