导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→别客气,我不是老师,我们相互学习罢了

* 18024: 初学者:有关单片机接收字符的命令,我不太懂,请求您的帮助!

   tm1300 
tm1300发表的帖子 

 别客气,我不是老师,我们相互学习罢了
  ;该程序采用串口中断来接收单个字符,并进行判断处理的例子,作为参考
;如果以后熟练了,可以开BUFF区,
;严格控制中断处理时间,串口中断来接收单个字符,定时修正,
;并由主程序判断对接收信息的处理
;00H-07H分别用R0-R7表示,作通用工作寄存器
     ;        ;串口数据缓冲区
     WORD2    EQU 09H        ;接收区1-8      
     WORD3    EQU 0AH
     WORD4    EQU 0BH
     WORD5    EQU 0CH
     WORD6    EQU 0DH
     WORD7    EQU 0EH
     WORD8    EQU 0FH
     
;以下是立即数定义     
     STX      EQU 02H       ;start of text
     ETX      EQU 03H       ;end of text
     
;以下是主程序开始
      ORG 0000H
         AJMP MAIN         ;转主程序
      ORG 0023H
         LJMP SCINT        ;转串行口通信中断服务子程序  

      ORG 0030H
;-------------------------------------------
;以下是程序运行初使化
MAIN:    MOV SP,#30H
         CLR PSW.3         ;选定第0组工作寄存器
         CLR PSW.4
         CLR A
         MOV R0,#08H       ;inside ram initialize
         MOV R7,#30
INITIA:  MOV @R0,A
         INC R0
         DJNZ R7,INITIA
;----------------------
;---------------------       
         MOV PCON,#00H
         MOV SCON,#01010000B ;MODE=1 SM2=0 REN=1
         MOV TMOD,#00100000B ;T1:波特率发生器 模式2
         MOV TL1,#0F4H       ;晶振=11.0592M
         MOV TH1,#0F4H
         CLR ET1
         SETB TR1            ;启动波特率 =2400Bps 
;---------------------------
         SETB EA
         SETB ES             ;串行口接收数据开
LOOP:    .....                 ;程序循环体
         .....
         LJMP LOOP
         
;-------------------串口接收-----------        
SCINT:   PUSH ACC
         PUSH PSW
         CLR ES
         CLR RI
         MOV A,SBUF
         CJNE R2,#00H,BYTE1  ;接收WORD1 起始码              
              CJNE A,#STX,REFUSE              
              MOV R2,#01H
              LJMP SCEXIT

BYTE1:   CJNE R2,#01H,BYTE2  ;接收WORD2 地址
              ;CJNE A,#3CH,REFUSE  ;与'  <'比较     
              MOV WORD2,A
              MOV R2,#02H
              LJMP SCEXIT

BYTE2:   CJNE R2,#02H,BYTE3  ;接收WORD3 DATA1
              ;CJNE A,#43H,REFUSE  ;与'C'比较
              MOV WORD3,A
              MOV R2,#03H
              LJMP SCEXIT

BYTE3:   CJNE R2,#03H,BYTE4  ;接收WORD4 DATA2
              ;CJNE A,#X1H,REFUSE  ;与X1H比较
              MOV WORD4,A
              MOV R2,#04H
              LJMP SCEXIT

BYTE4:  CJNE R2,#04H,BYTE5   ;接收WORD5 DATA3
              ;CJNE A,#X2H,REFUSE  ;与X2比较
              MOV WORD5,A
              SJMP DEALDT
              LJMP SCEXIT

BYTE5:  CJNE R2,#05H,BYTE6   ;接收WORD6 DATA4
              ;CJNE A,#3EH,REFUSE  ;与'  <'比较              
              CJNE A,ETX,REFUSE
              LJMP SCEXIT


REFUSE:  LJMP SCRETI         ;数据非法返回区                

DEALDT:  ........            ;中断处理段

SCRETI:  MOV R2,#00H
SCEXIT:  SETB ES
         POP PSW
         POP ACC
         RETI

         END

发表时间:2003年1月24日15:51:00

  
回复该帖

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

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

  18026.[详细]经过验证的源代码........
摘要:        ORG     0000H     &nbs......(6346字)
- [白莲][1172次] 2003年1月24日

  18233.[详细]Hi, White Lotus Flower
摘要:Hi, White Lotus Flower, Happy to you this Chinse New Year , ......(112字)
- [Kuang-chingTsui][1150次] 2003年2月2日

  18235.[详细]学51单片机
摘要:各位大虾,我想学51单片机,不知需要那些东东。L32K仿真器好用吗?给我个建议好吗?......(42字)
- [dirty][1186次] 2003年2月3日

[上一篇帖子]:这种集电极开路门74LS06, 六集电极开路反相器,这种集电极开路门输出可以带30mA的负
[下一篇帖子]:初学者:谁读过MC68VZ328UM谁读过MC68VZ328UM,有问题请教