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

📄 count.asm

📁 AVR开发板范例程序,WS开发板配套_51_汇编源程序
💻 ASM
字号:

;/********************************************************************
 ;*  主    页 :  HTTP://WWW.QLMCU.COM
 ;*;
 ;*  程序功能 :  0~9999计数器实验
 ;*
 ;*  应用软件 :  KEIL C
 ;*
 ;*  版    本 :  KEIL 7.06 完整版
 ;*
 ;*  硬    件 :  WS803、WS804、WS806
 ;*
 ;*  创建时间 :  2005-05-20
 ;*
 ;*  注:为了有更多实用的实验程序供大家学习,部分程序参考网上的资源,
 ;*      在此谢谢这些无私奉献的朋友!!!
 ;*
 ;********************************************************************/
;/* 功能介绍:本计数器程序实现了0~9999任意数的计数功能,具体的计数初值大家可以自行在程序里修改.
;   计数通过外部中断1 的按键模拟中断计数,按一下P3.3 的按键(INT1) ,计数器自动加 1 .
;   实际的扩展使用让大家自己发挥了,   比如可以加入键盘对初值的设定,
;   还加入24C02的记忆存储功能,对每次上次计数的初值的记忆等,总之更多的功能让大家发挥了,呵呵。
;*/

BEEP EQU P3.2  ;蜂鸣器端口定义

ORG 0000H
AJMP MAIN

ORG 0003H
RETI
ORG 000BH
RETI

ORG 0013H  ;外部中断1入口地址
LJMP INTT1

ORG 001BH
RETI
ORG 0023H
RETI
;-----------------------------------------------------------------
ORG 0100H
MAIN:            ;*****主程序*******
                  ; MOV   P2,#0F8H
                  ; MOV   A,P2
                  ; JNB   ACC.3,LOOP ; 根据 P2.3 的电平对计数初值的选择!!!
                  ; MOV   40H,#01H   ;选择 100 的计数初值
                  ; AJMP  LOOP0

LOOP:              MOV   40H,#00H   ;系统初始设置计数初值:100 (可自行修改)
LOOP0:             MOV   39H,#01H
                   MOV   38H,#00H
                   MOV   37H,#00H

                   MOV   30H,#00H   ;数码管显示缓存 千位
                   MOV   29H,#00H   ;数码管显示缓存 百位
                   MOV   28H,#00H   ;数码管显示缓存 十位
                   MOV   27H,#00H   ;数码管显示缓存 个位

                   MOV 30H,40H  ;初值传递
                   MOV 29H,39H
                   MOV 28H,38H
                   MOV 27H,37H

                   MOV   R1,#0FFH
                   MOV   R2,#0FFH
                   MOV   R5,#0FFH
           JJJ:    LCALL DISPLAY  ;开始重复调用显示子程序,显示系统设置的初始值
                   DJNZ R1,JJJ    ;多约 1 秒钟
           FFF:    LCALL DISPLAY
                   DJNZ R5,FFF
           FKK:    LCALL DISPLAY
                   DJNZ R2,FKK

                   MOV   30H,#00H
                   MOV   29H,#00H
                   MOV   28H,#00H
                   MOV   27H,#00H
                   SETB  EA  ;开启CPU中断
                   SETB  IT1 ;边沿触发
                   SETB  EX1 ;开启外部中断1

KKK:               LCALL DISPLAY
                   AJMP KKK

;**************************************************
;******************外部中断1子程序*****************
;**************************************************
INTT1:
                   INC   27H     ;累加程序
                   MOV   A,27H
                   CJNE  A,#10,LOOP1
                   MOV   27H,#00H

                   INC   28H
                   MOV   A,28H
                   CJNE  A,#10,LOOP1
                   MOV   28H,#00H

                   INC   29H
                   MOV   A,29H
                   CJNE  A,#10,LOOP1
                   MOV   29H,#00H

                   INC   30H
                   MOV   A,30H

LOOP1:             MOV   A,27H     ;比较判断程序
                   CLR   C
                   SUBB  A,37H
                   JNZ   LOOP2

                   MOV   A,28H
                   CLR   C
                   SUBB  A,38H
                   JNZ   LOOP2

                   MOV   A,29H
                   CLR   C
                   SUBB  A,39H
                   JNZ   LOOP2

                   MOV   A,30H
                   CLR   C
                   SUBB  A,40H
                   JNZ   LOOP2


                   CLR P1.0  ;当计到系统设置的初始值后,数码管显示" - - - " 
                   CLR P1.1
                   CLR P1.2
                   CLR P1.3
                   MOV P0,#10111111B

                   LCALL BZ  ;并且蜂鸣器发出声音提示
                   LCALL BZ
                   LCALL BZ
                   LCALL BZ
                   LCALL BZ
                   LCALL BZ
                   LCALL BZ
                   LCALL BZ
                   LCALL BZ
                   LCALL BZ

                   MOV P0,#0FFH     ;关闭数码管的显示输出
                   MOV   30H,#00H   ;再给计数缓存置 0
                   MOV   29H,#00H
                   MOV   28H,#00H
                   MOV   27H,#00H
                   MOV P1,#0FFH

LOOP2:             RETI

;***********************************************
;******************显示子程序*******************
;***********************************************
DISPLAY:           MOV   DPTR,#TAB
                   MOV   P1,#0FFH

                   MOV   A,30H
                   MOVC  A,@A+DPTR
                   MOV   P0,A
                   CLR   P1.0
                   ACALL DELAY
                   SETB  P1.0

                   MOV   A,29H
                   MOVC  A,@A+DPTR
                   MOV   P0,A
                   CLR   P1.1
                   ACALL DELAY
                   SETB  P1.1

                   MOV   A,28H
                   MOVC  A,@A+DPTR
                   MOV   P0,A
                   CLR   P1.2
                   ACALL DELAY
                   SETB  P1.2

                   MOV   A,27H
                   MOVC  A,@A+DPTR
                   MOV   P0,A
                   CLR   P1.3
                   ACALL DELAY
                   SETB  P1.3
                   RET
;===========================================
TAB:    DB        0C0H;0
        DB        0F9H;1
        DB        0A4H;2
        DB        0B0H;3
        DB        099H;4
        DB        092H;5
        DB        082H;6
        DB        0F8H;7
        DB        080H;8
        DB        090H;9

;===========================================
DELAY:             MOV   R6,#1H    ;动态扫描延时子程序,这个时间能短就短,不然数码管会有闪烁.
DEL1:              MOV   R7,#10H
                   DJNZ  R7,$
                   DJNZ  R6,DEL1
                   RET
;===========================================
DELAY1:            MOV   R4,#14H    ;输出控制延时子程序
DEL2:              MOV   R3,#0C8H
DEL3:              MOV   R2,#0FAH
                   DJNZ  R2,$
                   DJNZ  R3,DEL3
                   DJNZ  R4,DEL2
                   RET


BZ:                        ;蜂鸣器
         MOV  R6,#100
  B1:    CALL  DEX
         CPL  BEEP
         DJNZ  R6,B1
         MOV  R5,#10
         CALL  DELAY
         RET
DEX:    MOV  R7,#180
DE1:    NOP
         DJNZ  R7,DE1
         RET
END

⌨️ 快捷键说明

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