当前位置:首页 > 单片机 > 单片机
[导读] ;=============两机串口通讯程序(主机)=====================;; 功 能: 使用串行中断,接收数据并显示; 硬件环境: 自制单片机实验板; 软件环境: 伟福 V3.20; Create date: 2004_07_26; First Modify: 20

;=============两机串口通讯程序(主机)=====================
;
; 功 能: 使用串行中断,接收数据并显示
; 硬件环境: 自制单片机实验板
; 软件环境: 伟福 V3.20
; Create date: 2004_07_26
; First Modify: 2004_07_26
; second Modify:

; Last Modify: 2004_07_26
; Author: Sujiande
;
;===========预定义===================
LED0 EQU 40H ;预定义数码管
LED1 EQU 41H ;预定义数码管
LED2 EQU 42H ;预定义数码管
LED3 EQU 43H ;预定义数码管
LED4 EQU 44H ;预定义数码管
LED5 EQU 45H ;预定义数码管
LED6 EQU 46H ;预定义数码管
LED7 EQU 47H ;预定义数码管
SDA BIT P0.1 ; 定义数据线引脚定义
SCL BIT P0.0 ; 定义时钟线引脚定义
;---------------------------
ORG 0000H ;主程序入口
AJMP MAIN ;跳转到主程序
ORG 0100H ;主程序在ROM中存放位置
;===============主程序=====================
MAIN:
MOV LED0,#00H ;赋初值
MOV LED1,#00H
MOV LED2,#16 ;赋初值为16, 数码管显示代码为: 灭
MOV LED3,#16
MOV LED4,#16
MOV LED5,#16
MOV LED6,#16
MOV LED7,#16
;--------------------
;MOV DPTR,#TABLE ; 赋显示代码首地址
MOV R1,#00H ; 给R1赋初值00H
ACALL DISPLAY ; 调显示子程序
MOV SP, #30H ; 给堆栈指针赋初值
;--------------------------
; 使用定时器1,作为波特率发生器,设定波特率=9600,
; 定时器初值为:FAH
; 串行控制器设置:SM0=0,SM1=1,SM2=0,REN=1,TB8=0,
; RB8=0,TI=0,RI=0 即0101 0000B
; 波特率加倍
;-----------------------------
MOV TMOD,#20H ;设置定时器1,工作方式2
MOV TH1,#0FAh ;赋初值: FA
MOV TL1,#0FAh ;赋初值: FA
MOV SCON, #50h ;设置串行口控制寄存器
MOV PCON, #80h ;设置电源控制寄存器, 让波特率加倍(2X)
SETB TR1 ;启动定时
;*****************主程序结束************************
LP8: MOV A,R1 ;将R1的数据装到A中
;-----------------------
MOV SBUF,A ;将A的数据送到缓冲区
JNB TI,$ ;等待数据发送完毕
CLR TI ;清发送中断标志
;-----------------------
INC R1
CJNE R1,#99,LP3
MOV R1,#00H


LP3: ACALL SEPERATE ;调拆分程序
ACALL DISPLAY ;调显示子程序
ACALL DELAY_1S ;调延时子程序
AJMP LP8
;=================拆分程序=====================
SEPERATE: ANL A,#0Fh ;与操作得到个位数据
MOV LED0,A ;个位送LED0
MOV A,R1
ANL A,#0F0H ;与操作得到十位数据
SWAP A
MOV LED1,A ;十位送LED1
RET
;===============显示子程序======================

DISPLAY:
MOV DPTR,#TABLE ; 赋显示代码首地址

MOV A,LED0 ;查表数据送A
MOVC A,@A+DPTR ;查表,得到显示代码
ACALL SHIFT ;调移位子程序

MOV A,LED1
MOVC A,@A+DPTR
ACALL SHIFT

MOV A,LED2
MOVC A,@A+DPTR
ACALL SHIFT

MOV A,LED3
MOVC A,@A+DPTR
ACALL SHIFT

MOV A,LED4
MOVC A,@A+DPTR
ACALL SHIFT

MOV A,LED5
MOVC A,@A+DPTR
ACALL SHIFT

MOV A,LED6
MOVC A,@A+DPTR
ACALL SHIFT

MOV A,LED7
MOVC A,@A+DPTR
ACALL SHIFT
RET
;---------显示代码表---------
TABLE: DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H ;0,1,2,3,4,5,6,7,8,9,
DB 50H,1CH,39H,16H,38H,78H, 0FFH,0FEH,0EFH ;10,11,12,13,14,15,灭,-

;================移位子程序============================
SHIFT: PUSH A ; 进栈暂存A值
MOV R0,#8 ; 循环8次
CLR C ;清进位标志
CLR SCL ;时钟线,先钳位为0
LP2: RLC A
MOV SDA,C
NOP
NOP
SETB SCL
NOP
NOP
CLR SCL
NOP
NOP
DJNZ R0,LP2
POP A ; 出栈恢复A值
RET
;=============延时子程序===============
DELAY_1S:
MOV R7,#0ffH
LOOP7: MOV R6,#0ffH
LOOP6: NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R6,LOOP6
DJNZ R7,LOOP7
RET
;------------------------------
END

;=============两机串口通讯程序(从机)=====================
;
; 功 能: 使用串行中断,接收数据并显示
; 硬件环境: 自制 单片机 实验板
; 软件环境: 伟福 V3.20
; Create date: 2004_07_26
; First Modify: 2004_07_26
; second Modify:
; Last Modify: 2004_07_26
; Author: Sujiande
;
;===========预定义===================

LED0 EQU 40H ;预定义数码管
LED1 EQU 41H ;预定义数码管
LED2 EQU 42H ;预定义数码管
LED3 EQU 43H ;预定义数码管
LED4 EQU 44H ;预定义数码管
LED5 EQU 45H ;预定义数码管
LED6 EQU 46H ;预定义数码管
LED7 EQU 47H ;预定义数码管
SDA BIT P0.1 ; 定义数据线引脚定义
SCL BIT P0.0 ; 定义时钟线引脚定义
;---------------------------
ORG 0000H ;主程序入口
AJMP MAIN ;跳转到主程序
ORG 0023H ;中断入口地址
AJMP S_INT ;跳转到中断程序
ORG 0100H ;主程序在ROM中存放位置
;==============主程序========================
MAIN:
MOV LED0,#00H ;赋初值
MOV LED1,#00H
MOV LED2,#16 ;赋初值为16, 数码管显示代码为: 灭
MOV LED3,#16
MOV LED4,#16
MOV LED5,#16
MOV LED6,#16
MOV LED7,#16
;------------------------------
MOV DPTR,#TABLE ; 赋显示代码首地址
ACALL DISPLAY ; 调显示子程序
MOV SP, #30H ; 给堆栈指针赋初值
;--------------------------------------------
; 使用定时器1,作为波特率发生器,设定波特率=9600,
; 定时器初值为:FAH
; 串行控制器设置:SM0=0,SM1=1,SM2=0,REN=1,TB8=0,
; RB8=0,TI=0,RI=0 即0101 0000B
; 波特率加倍
;---------------------------------------------
MOV TMOD,#20H ;设置定时器1,工作方式2
MOV TH1,#0FAh ;赋初值: FA
MOV TL1,#0FAh ;赋初值: FA
MOV SCON, #50h ;设置串行口控制寄存器
MOV PCON, #80h ;设置电源控制寄存器, 让波特率加倍(2X)
;---------------------------------------
SETB EA ; 启动总中断
SETB ES ; 启动串行中断
SETB TR1 ;启动定时
AJMP $ ; 等待中断

;*****************主程序结束************************


;===============中断服务程序=============================
S_INT:
MOV R1, SBUF ;将缓冲区的数据送到R1

ACALL SEPERATE ;调拆分程序
ACALL DISPLAY ;调显示子程序
CLR RI ;清接收中断标志
RETI ;中断返回

;=================拆分程序=====================
SEPERATE: MOV A,R1
ANL A,#0Fh ;与操作得到个位数据
MOV LED0,A ;个位送LED0
MOV A,R1
ANL A,#0F0H ;与操作得到十位数据
SWAP A ;
MOV LED1,A ;十位送LED1
RET

;===============显示子程序======================

DISPLAY:
MOV A,LED0 ;查表数据送A
MOVC A,@A+DPTR ;查表,得到显示代码
ACALL SHIFT ;调移位子程序

MOV A,LED1
MOVC A,@A+DPTR
ACALL SHIFT

MOV A,LED2
MOVC A,@A+DPTR
ACALL SHIFT

MOV A,LED3
MOVC A,@A+DPTR
ACALL SHIFT

MOV A,LED4
MOVC A,@A+DPTR
ACALL SHIFT

MOV A,LED5
MOVC A,@A+DPTR
ACALL SHIFT

MOV A,LED6
MOVC A,@A+DPTR
ACALL SHIFT

MOV A,LED7
MOVC A,@A+DPTR
ACALL SHIFT
RET
;---------显示代码表---------
TABLE: DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H ;0,1,2,3,4,5,6,7,8,9,
DB 50H,1CH,39H,16H,38H,78H, 0FFH,0FEH,0EFH ;10,11,12,13,14,15,灭,-

;================移位子程序============================
SHIFT: PUSH A ; 进栈暂存A值
MOV R0,#8 ; 循环8次
CLR C ;清进位标志
CLR SCL ;时钟线,先钳位为0
LP2: RLC A
MOV SDA,C
NOP
NOP
SETB SCL
NOP
NOP
CLR SCL
NOP
NOP
DJNZ R0,LP2
POP A ; 出栈恢复A值
RET
;=============延时子程序===============
DELAY_1S:
MOV R7,#0ffH
LOOP7: MOV R6,#0ffH
LOOP6: NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R6,LOOP6
DJNZ R7,LOOP7
RET
;------------------------------
END


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭