📄 电脑串口控制单片机驱动继电器的完整源程序.asm
字号:
单片机源代码(asm格式):
;--------------------------------------------------
;--------------------------------------------------
;设置串行口 波特率9600
;串行口设置MODE1,SM1=0,REN=1,SMOD=1
;晶振11.0592,定时设置为0FDH
;常用端口设置参数
;FD 9600
;FA 4800
;F4 2400
;E8 1200
;--------------------------------------------------
;***********************************************************
ORG 00H
JMP START
ORG 23H
JMP UART
ORG 30H
START: MOV SP,#70H
MOV SCON,#50H
MOV TMOD,#00100001B ;TIM1在模式2 TIM0在模式1
MOV TH1,#0F4H ;设置定时时间
SETB TR1 ;启动定时器1
SETB ES ;允许串口中断
SETB EA ;允许总中断
MOV P0,#0 ;P0、P2输出低电平
MOV P2,#0
JMP $ ;等待状态
;*****************************************
;串行口中断
;*****************************************
UART: PUSH ACC
PUSH PSW
CLR ES ;关闭串行口中断
MOV TH0,#HIGH(65536-65536)
MOV TL0,#LOW(65536-65536)
SETB TR0 ;开定时器0
MOV 30H,#00 ;同步位
MOV 31H,#00 ;数据1
MOV 32H,#00 ;数据2
MOV 33H,#00 ;结束位
MOV R0,#30H
REC:
jbc tf0,FS ;接收时间是否超时?是则执行FS
JNB RI,REC ;接收数据
CLR RI
MOV A,SBUF
MOV @R0,A
INC R0
JMP REC
FS: CLR TR0 ;关定时器0
;********************************
CALL FUN ;解码并控制继电器
SETB ES ;开串行口中断
POP PSW
POP ACC
RETI ;中断子程序返回
;****************************************
;解码并控制继电器
;下面的程序可以更简洁,但为了方便,展开来编制
;****************************************
FUN: MOV A,#0AH ;判断第1字节即同步位
CJNE A,30H,ERR
MOV A,#0DH ;判断第4字节即结束位
CJNE A,33H,ERR
;****************************************
;第2字节即数据位1,代表继电器J1-8
;第3字节即数据位2,代表继电器J9-16
;****************************************
MOV A,31H
MOV P0,A
MOV A,32H
MOV P2,A
RET
;**************************************
; 数据错误处理
;**************************************
ERR:
MOV 30H,#00 ;同步位
MOV 31H,#00 ;数据1
MOV 32H,#00 ;数据2
MOV 33H,#00 ;结束位
RET
END ;程序结束
;--------------------------------------------------
;--------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -