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

📄 1602232.asm

📁 说明:本文件夹一共提供各类编程实例200多个
💻 ASM
字号:
;********************************************************************************
;232通信程序2400速率,12m晶体, 烧写后关掉XLISP软件,编程仿真切换到仿真状态(按下 *
;使用配套光盘的工具软件:串口调试助手,设置波特率2400, 连接232电缆到串口,     *
;连接1602液晶到开发板,							        *
用串口调试助手发送字符, 开发板的1602液晶显示相应字符		                *
;********************************************************************************
;*  日期:  2007-3-25                                                            *
;*  版本:  3.0                                                                  *
;*  作者:  深圳学林电子有限公司     专业8051单片机教学站                        *
;*  邮箱: sxj1974@163.com                                                       *
;*  网站: http://www.51c51.com     http://www.8951.com    更多例程请登陆网站   *
;********************************************************************************
;*  硬件:此程序在本公司xlisp系列单片机实验仪运行通过                           *
;********************************************************************************
;* 【版权】 Copyright(C)深圳学林电子有限公司 www.51c51.com  All Rights Reserved *
;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
;********************************************************************************
        TEMP      EQU  30H
        TEMP1     EQU  31H
        BUF       EQU  32H
        DISBUF    EQU  40H
        RS        EQU  P2.0
        RW        EQU  P2.1
        EN        EQU  P2.2
        LCD_X     EQU  2FH
        PLAYFLAG  BIT  20H.0
;*********************************************************
	ORG	0000H
	LJMP	MAIN
        ORG     0023H
        LJMP    T_SERIL
        ORG     0030H
;*********************************************************
;  主程序
;*********************************************************
MAIN:
        MOV  SP,#60H
        MOV  P0,#0FFH
        MOV  P2,#0FFH
        MOV  TEMP,#00H
        MOV  TEMP1,#00H
        CLR  PLAYFLAG
        MOV  R1,#DISBUF      ;清显存单元
CLR1:
        MOV  @R1,#20H
        INC  R1
        CJNE  R1,#50H,CLR1
        CALL SET_LCD         ;LCD1602初始显示

	MOV  TMOD,#20H	     ;定时器1工作于8位自动重载模式,用于产生波特率
	MOV  TH1,#0F3H
	MOV  TL1,#0F3H	     ;波特率2400

	MOV  SCON,#50H	     ;设定串行口工作方式
	ANL  PCON,#0EFH	     ;波特率不倍增

        SETB  EA             ;允许总中断
        SETB  ES	     ;允许串行中断
	SETB  TR1	     ;启动定时器1
        MOV  LCD_X,#00H
        MOV  R1,#DISBUF
MAIN1:
        CALL  PLAY
        JMP   MAIN1
;*********************************************************

; LCD1602 初始化子程序

;*********************************************************

INIT_LCD:                 ;8位I/O控制 LCD 接口初始化
        MOV  A,#38H     ;双列显示,字形5*7点阵
        CALL  WCOM
        CALL  DELAY5MS
        MOV  A,#38H     ;双列显示,字形5*7点阵
        CALL  WCOM
        CALL  DELAY5MS
        MOV  A,#38H     ;双列显示,字形5*7点阵
        CALL  WCOM
        CALL  DELAY5MS
        MOV  A,#0CH     ;开显示,关光标,
        CALL  WCOM
        CALL  DELAY5MS
        MOV  A,#01H     ;清除 LCD 显示屏
        CALL  WCOM
        CALL  DELAY5MS
        RET
;*********************************************************
; LCD1602 显示字符程序
; 在LCD的第一行或第二行显示信息字符
;*********************************************************
LCD_SHOW:
        CJNE  A,#1,LINE2  ;判断是否为第一行
LINE1:
        MOV  A,#80H       ;设置 LCD 的第一行地址
        CALL  WCOM        ;写入命令
        CALL  CLR_LINE    ;清除该行字符数据
        MOV  A,#80H       ;设置 LCD 的第一行地址
        CALL  WCOM        ;写入命令
        JMP  FILL
LINE2:
        MOV  A,#0C0H      ;设置 LCD 的第二行地址
        CALL  WCOM        ;写入命令
        CALL  CLR_LINE    ;清除该行字符数据
        MOV  A,#0C0H      ;设置 LCD 的第二行地址
        CALL  WCOM
FILL:
        CLR  A            ;填入字符
        MOVC  A,@A+DPTR   ;由消息区取出字符
        CJNE  A,#0,LC1    ;判断是否为结束码
        RET
LC1:
        CALL  WDATA       ;写入数据
        INC  DPTR         ;指针加1
        JMP  FILL         ;继续填入字符
        RET
CLR_LINE:                  ;清除该行 LCD 的字符
        MOV  R0,#24
CL1:
        MOV  A,#' '
        CALL  WDATA
        DJNZ  R0,CL1
        RET
;*********************************************************
; 写指令使能子程序
; RS=L,RW=L,D0-D7=指令码,E=高脉冲
;*********************************************************
WCOM:
        MOV  P0,A
        CLR RS
        CLR RW
        SETB EN
        CALL  DELAY0
        CLR EN
        RET
;*********************************************************
;写数据使能子程序
;RS=H,RW=L,D0-D7=数据,E=高脉冲
;*********************************************************
WDATA:
        MOV   P0,A
        SETB  RS
        CLR   RW
        SETB  EN
        CALL  DELAY0
        CLR   EN
        RET
DELAY0:
        MOV  R7,#250      ;延时500微秒
        DJNZ  R7,$
        RET
;*********************************************************
;LCD第二行显示字符子程序
;A=ASC DATA
;*********************************************************
LCDP2:
        MOV  TEMP1,A
        MOV  A,LCD_X     ;设置显示地址
        ADD  A,#0C0H     ;设置LCD的第二行地址
        CALL  WCOM       ;写入命令
        MOV  A,TEMP1
        CALL  WDATA      ;写入数据
        RET
;*********************************************************
;  LCD 初始化设置
;*********************************************************
SET_LCD:
        CLR   EN
        CALL  INIT_LCD     		;初始化 LCD
        CALL  DELAY5MS
        MOV  DPTR,#INFO1   		;指针指到显示信息1
        MOV  A,#1          		;显示在第一行
        CALL  LCD_SHOW
SET_LCD2:
        MOV  DPTR,#INFO2   		;指针指到显示信息2
        MOV  A,#2          		;显示在第二行
        CALL  LCD_SHOW
        RET
INFO1:  DB  " SERIAL TRANFER ",0  	;LCD 第一行显示信息
INFO2:  DB  "                ",0  	;LCD 第二行显示信息
;*********************************************************
; 串口中断服务子程序
;*********************************************************
T_SERIL:
        PUSH  ACC
        CLR  ES               		;关闭串行中断
        CLR  RI               		;清除串行接受标志位
        MOV  A,SBUF           		;从串口缓冲区取得数据
        CJNE  A,#0DH,T_LOOP   		;0D-回车
        JMP  T_END
T_LOOP:
        CJNE  A,#0AH,T_LOOP1  		;0A-换行
        JMP  T_END
T_LOOP1:
        MOV  BUF,A
        CJNE  A,#31H,T_LOOP2
        MOV  TEMP,#35H           	;
        CALL  SENDDATA
        JMP  T_LOOP8
T_LOOP2:
        CJNE  A,#32H,T_LOOP3
        MOV  TEMP,#31H           	;
        CALL  SENDDATA
        JMP  T_LOOP8
T_LOOP3:
        CJNE  A,#33H,T_LOOP4
        MOV  TEMP,#4CH            	;
        CALL  SENDDATA
        JMP  T_LOOP8
T_LOOP4:
        CJNE  A,#34H,T_LOOP5
        MOV  TEMP,#35H           	;
        CALL  SENDDATA
        JMP  T_LOOP8
T_LOOP5:
        CJNE  A,#35H,T_LOOP6
        MOV  TEMP,#31H           	;
        CALL  SENDDATA
        JMP  T_LOOP8
T_LOOP6:
        CJNE  A,#36H,T_LOOP7
        MOV  TEMP,#52H           	;
        CALL  SENDDATA
        JMP  T_LOOP8
T_LOOP7:
        MOV  TEMP,A
        CALL  SENDDATA
T_LOOP8:
        SETB  PLAYFLAG
        MOV  @R1,BUF
        INC  R1
        CJNE  R1,#50H,T_END
        MOV  R1,#DISBUF
T_END:
        SETB  ES
        POP  ACC
        RETI
;*********************************************************
; 串口发送数据子程序
;*********************************************************
SENDDATA:
        MOV  A,TEMP
        MOV  SBUF,A
        JNB  TI,$      			; 等特数据传送
        CLR  TI        			; 清除数据传送标志
        RET
;*********************************************************
; 显示子程序
;*********************************************************
PLAY:
        JNB  PLAYFLAG,PLAYEND   	;判是否需要显示
        CALL SET_LCD2           	;清LCD1602第二行
        MOV  R1,#DISBUF
        MOV  LCD_X,#00H
PLAY1:
        MOV  A,@R1              	;显示接收的数据
        CALL  LCDP2
        INC  LCD_X
        INC  R1
        CJNE  R1,#50H,PLAY1
        MOV  R1,#DISBUF         	;清显存单元
CLR2:
        MOV  @R1,#20H
        INC  R1
        CJNE  R1,#50H,CLR2
        CLR  PLAYFLAG
        MOV  R1,#DISBUF
PLAYEND:
        RET
;*********************************************************
; 延时5MS子程序
;*********************************************************
DELAY5MS:
        MOV  R6,#25
  DL2:
        MOV  R7,#100
        DJNZ  R7,$
        DJNZ  R6,DL2
        RET
;*********************************************************
	END

⌨️ 快捷键说明

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