📄 随机数.asm
字号:
;*********************8X8LED显示随机数.ASM **********************************
;*
;* 标题: 用8X8LED显示随机数
;* 版本: 1.0
;*最后更新日期: 2000.08.08
;*
;* 支援 E-mail: gzsl@sl.com.cn
;*
;* 描述
;* 用AVR单片机I/O口产生随机数,用8X8LED显示随机亮点
;* 实验器件用AT90S8515,必须有AT90S8515的文件头*.inc
;* 作者: SL.
;*程序适用于所有单片机
;***************************************************************************
.include "8515def.inc"
.org $0000
rjmp RESET ;复位
.org $0010 ;跳过中断区
.def temp =r16 ;数据暂存器
.def temp1 =r17
.def udata =r21 ;A口随机数数值
.def ddata =r22 ;C口随机数数值
.cseg
.org 0x10
RESET:ldi temp,high(RAMEND) ;设堆栈初值#025F,在文件头有定义
out SPH,temp ;(SPH)=02H
ldi temp,low(RAMEND)
out SPL,temp ;(SPL)=5FH
ldi temp,0xff ;设方向寄存器为输出
out ddra,temp ;A口为输出
out ddrc,temp ;C口为输出
start: wdr ;关看门狗
ldi udata,0x6a ;设A口随机数数初值
ldi ddata,0x3c ;设台初值
startp: out porta,udata ;A口随机数数输出
out portc,ddata ;C口随机数数输出
ldi temp,0x80 ;延时常数,可修改
rcall delay ;调用延时子程序
rcall randm ;
rjmp startp
delay: ;延时子程序
push temp ;延时常数进栈
l1: push temp ;延时常数进栈
l2: dec temp ;-1
brne l2 ;不为0转,为0顺执
pop temp ;出栈
dec temp ;-1
brne l1 ;不为0转,为0顺执
pop temp ;出栈
dec temp ;-1
brne delay ;不为0转,为0顺执
ret ;子程序返回
randm: ;随机数产生子程序
mov temp,udata ;A口随机数送temp
mov temp1,udata ;A口随机数送temp1
rol temp ;通过进位位左循环
eor temp1,temp ;二个随机数异或
rol temp ;通过进位位左循环
rol temp ;通过进位位左循环
eor temp1,temp ;二个随机数异或
mov temp,ddata ;C口随机数
swap temp ;C口随机数半字节交换
eor temp,temp1 ;二个随机数异或
rol temp ;通过进位位左循环
rol ddata ;C口随机数通过进位位左循环
rol udata ;A口随机数通过进位位左循环
ret ;子程序返回
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -