单片机音响技术网
首页 | 热销产品 | 单片机入门 | 下载中心 | 技术文章 | Protel专区 | 电子制作 | 购物指南 | 发货查询 | 本站淘宝
动画01 当前位置:本站首页技术文章
文章搜索
pix
本站推荐产品
  • 单片机音响软件专业开发板
  • 详细介绍
  • TOPAV-2008单片机开发板 598元
pix
pix
pix
单片机技术文章精选
pix

6位数的计数器汇编源程序

单片机音响技术网 www.mcu51av.com

;6位数的计数器汇编源程序
;可以从0一直到999999
;24C02记忆计数值
;按p3.2计数
;P0口接数码管段
;P2口数码管位选
;晶振12M

A_BIT EQU 20H ;个位寄存器,6个寄存器的起始地址

DEVICE_R EQU 10100001B;读24C02地址
DEVICE_W EQU 10100000B;写24C02地址
SCL BIT P3.6;P3.6连接SCL
SDA BIT P2.7;P2.7连接SDA

PPP BIT P3.2;按键接口

ORG 00H
AJMP MAIN
ORG 30H
MAIN:;判断24C02;如果6位数中有一位大于9,则执行初始化
ACALL R_D
MOV R0,#20H
MOV R7,#6
CLR C
MAIN_0:
MOV A,#9
MOV B,@R0
SUBB A,B
JC MAIN_1
INC R0
DJNZ R7,MAIN_0
ACALL R_D
AJMP STLOP

MAIN_1:;初始化把所有的位全部清零
MOV A_BIT,#0
MOV A_BIT+1,#0
MOV A_BIT+2,#0
MOV A_BIT+3,#0
MOV A_BIT+4,#0
MOV A_BIT+5,#0
MOV R2,#6
ACALL W_R
ACALL R_D

STLOP:
ACALL DISPLAY;调用显示
JB PPP,STLOP;监测键盘,如果p3.2未按下则执行显示

WE:ACALL DISPLAY;显示保持
ACALL DELAY;延时避免键盘误动
JNB PPP,WE;如果p3.2还没有放开继续延时

COUNT:;计算数据部分
INC A_BIT;个位加1
MOV A,A_BIT
CJNE A,#10,COUNT_00;如果在10以内显示
MOV A_BIT,#0;如果个位到了10则清0
AJMP COUNT_1

COUNT_00:
MOV R2,#1;字节数
ACALL W_R;调用写子程序
AJMP STLOP

COUNT_1:
INC A_BIT+1;10位加1
MOV A,A_BIT+1
CJNE A,#10,COUNT_10
MOV A_BIT+1,#0
AJMP COUNT_2
COUNT_10:
MOV R2,#2
ACALL W_R
AJMP STLOP

COUNT_2:
INC A_BIT+2;百位加1
MOV A,A_BIT+2
CJNE A,#10,COUNT_20
MOV A_BIT+2,#0
AJMP COUNT_3
COUNT_20:
MOV R2,#3
ACALL W_R
AJMP STLOP

COUNT_3:
INC A_BIT+3;千位加1
MOV A,A_BIT+3
CJNE A,#10,COUNT_30
MOV A_BIT+3,#0
AJMP COUNT_4
COUNT_30:
MOV R2,#4
ACALL W_R
AJMP STLOP

COUNT_4:
INC A_BIT+4;万位加1
MOV A,A_BIT+4
CJNE A,#10,COUNT_40
MOV A_BIT+4,#0
AJMP COUNT_5
COUNT_40:
MOV R2,#5
ACALL W_R
AJMP STLOP

COUNT_5:
INC A_BIT+5;十万位加1
MOV A,A_BIT+5
CJNE A,#10,COUNT_50
MOV A_BIT+5,#0
AJMP COUNT_3
COUNT_50:
MOV R2,#6
ACALL W_R
AJMP STLOP

DISPLAY: ;显示
MOV R0,#A_BIT ;显示偏移量
MOV R3,#06H
MOV DPTR,#TAB
MOV A,#0BFH
LOOP1: MOV B,A ;
MOV P2,a
MOV A,@R0
MOVC A,@A+DPTR
MOV P0,a ;送显示
MOV R2,#80H ;延时
DJNZ R2,$
INC R0
MOV A,B
RR A
DJNZ R3,LOOP1 ;循环显示
RET

TAB: DB 28H,7EH,0A2H,62H,74H,61H,21H,7AH,20H,60H

R_D:;读24C02中数据
CLR P3.7
ACALL STAR_IC;24C02启动
MOV A,#DEVICE_W;发24C02写命令
ACALL WRITE;
MOV A,#10H;读出字节源地址
ACALL WRITE;
ACALL STAR_IC;24C02启动
MOV A,#DEVICE_R;确定24C02读命令
ACALL WRITE;
ACALL R_D0
ACALL STOPIC
RET

R_D0:
MOV R0,#A_BIT
MOV R6,#06H
R_D1:
MOV R7,#08H;
D1:;从24C02读出一个字节
ACALL DELAY
SETB SCL
ACALL DELAY
MOV C,SDA;利用SCL下降沿从24C02中读出一位数据
CLR SCL
RLC A;
DJNZ R7,D1;
DJNZ R6,R_D2
SETB SDA
SETB SCL
ACALL DELAY
CLR SCL
MOV @R0,A;将从24C02中相应位读出的数据保存
SETB SDA
RET

R_D2:
CLR SDA
SETB SCL
ACALL DELAY
CLR SCL
MOV @R0,A;
INC R0
SETB SDA
AJMP R_D1

W_R:;向24C02中写入数据
ACALL STAR_IC;24C02启动
MOV A,#DEVICE_W
ACALL WRITE;
MOV A,#10H;写入字节目的地址
ACALL WRITE;
MOV R0,#A_BIT
W_R1:
MOV A,@R0;
INC R0
ACALL WRITE;
DJNZ R2,W_R1
ACALL STOPIC;24C02停止
RET;

STAR_IC:;24C02启动条件
CLR SCL;
SETB SDA;
ACALL DELAY
SETB SCL;
CLR SDA;
ACALL DELAY
CLR SCL;
SETB SDA;
ACALL DELAY
RET;

STOPIC:;24C02停止条件
CLR SDA;
ACALL DELAY
SETB SCL;
ACALL DELAY
SETB SDA;
ACALL DELAY
RET;

WRITE:;一个字节的写操作
MOV R6,#08H;
D2:
CLR SCL;
RLC A;
MOV SDA,C;
SETB SCL;
ACALL DELAY
DJNZ R6,D2;
CLR SCL;
SETB SDA;
ACALL DELAY
SETB SCL;
JB SDA,$;
CLR SCL
RET;

DELAY: ;延时子程序
NOP
NOP
NOP
NOP
RET

END


摘录:半键纵横;   责任编辑:mcu51av 2007-11-10

上一篇:PT6311汇编源代码
下一篇:音响系统USB开发及主流芯片比较

pix

关于我们 | 联系我们 | 友情链接 | 网站地图 | 点击给我留言
Copyright © 2007 - 2008 单片机音响技术网 All rights reserved. 站长统计