⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slave2.asm

📁 c51 book very good for 51 study
💻 ASM
字号:
;----------------------------------
;                   单片机与单片机通信实例(从机2)
;功能:通过串口接收主机的控制信号,然后通过数模转换输出模拟信号
;-----------------------------------
ORG 0000H
JMP START                 ; 程序开始
ORG 0023H                 
JMP Serial_RX_ISR           ; 串口中断向量

START:    
      MOV SP,#60H         ; 将堆栈位置设为60H
      CALL Init             ; 进行串口及相关寄存器的初始化
       
MainLoop:
;-----------------------
; 主循环:
;-----------------------
      JMP MainLoop           

Init:
;---------------------------------
;     程序初始化,包括串口、定时器T1、中断的初始化
;---------------------------------
      MOV SCON,#11110000B    ; 串口控制寄存器初始化
      ORL PCON,#10000000B    ; 把SMOD位置1
      SETB EA                 ; 中断允许总控制位使能
      SETB ES                 ; 串口中断使能
      SETB PS                 ; 把串口中断设为高优先级
      CALL Timer1_Init         ; 进行定时器T1的初始化
      RET

Timer1_Init:
;-------------------------
;     定时器T1作为串口的波特率发生器
;     (2^SMOD)*fosc/32*12*(256-th1)=57600
;-------------------------
      ORL TMOD,#00100000B   ; 定时器T1工作在方式2
      ORL TCON,#01000000B    ; 定时器T1使能
      MOV TH1,#0FFH          ; 设定定时器T1的初始值
      RET

DA_Operation:
;-------------------------
;     DAC0832的操作
;     电压控制值存放在ACC中
;-------------------------
      CLR P3.6                   ; 将WR设为低
      MOV DPTR,#0EFFFH        ; 选中片选信号
      MOVX @DPTR,A           ; 输出控制电压
      RET
Serial_RX_ISR:
;-----------------------------------
;     串口接收中断服务程序,需要在程序开始时在2FH处写入缓存区首地址
;-----------------------------------
       PUSH PSW                   ; 程序状态字压栈
       PUSH 1                      ; R1压栈
       PUSH 2                      ; R2压栈
MOV C,TI
       CLR TI
JC OUT_ISR

       MOV A,SBUF 
       CJNE A,#02,Out_ISR          ; 判断是否为从机2的命令帧
       CLR SM2                    ; 把SM2清零
       CLR ES                      ; 禁止串口中断
       CLR RI                      ; 软件清除串口接收中断标志
       NOP
Serial_RX_WAIT:                    ; 等待下一个字节数据的接收     
       JNB RI,Serial_RX_WAIT
       MOV A,SBUF                 ; 将接收到的数据写入A
       CALL DA_Operation            ; 模拟输出
       SETB SM2                    ; SM2置1
Out_ISR:  
       CLR RI                      ; 软件清除串口接收中断标志位
       POP 2                       ; R2 出栈
       POP 1                       ; R1 出栈
       POP PSW                    ; 程序状态字出栈
       RETI       
                
       END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -